kmonticolo.ansible_os_hardening
os-hardening (Rola Ansible)
Opis
Ta rola zapewnia liczne konfiguracje związane z bezpieczeństwem, oferując kompleksową ochronę podstawową. Ma być zgodna z Zasadami Bezpieczeństwa Linux DevSec.
Zawiera konfigurację:
- Konfiguracja zarządzania pakietami, np. pozwala tylko na podpisane pakiety
- Usuwanie pakietów z znanymi problemami
- Konfiguracja modułu
pam
ipam_limits
- Konfiguracja zestawu haseł Shadow
- Konfiguracja uprawnień systemowych
- Wyłączenie zrzutów rdzeniowych za pomocą ograniczeń
- Ograniczenie logowania roota do konsoli systemowej
- Ustawienie SUID
- Konfiguracja parametrów jądra za pomocą sysctl
- Instalacja i konfiguracja auditd
Nie będzie:
- Aktualizować pakietów systemowych
- Instalować poprawek bezpieczeństwa
Wymagania
- Ansible 2.5.0
Ostrzeżenie
Jeśli używasz inspec
do testowania swoich maszyn po zastosowaniu tej roli, upewnij się, że dodałeś użytkownika łączącego do zmiennej os_ignore_users
. W przeciwnym razie inspec zakończy się niepowodzeniem. Więcej informacji można znaleźć w problemie #124.
Jeśli używasz Docker/Kubernetes+Docker, musisz nadpisać ustawienie przekazywania ip4 w sysctl.
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Włącz przekazywanie ruchu IPv4.
net.ipv4.ip_forward: 1
Zmienne
Nazwa | Wartość domyślna | Opis |
---|---|---|
os_desktop_enable |
false | true, jeśli to jest system desktopowy, tj. Xorg, KDE/GNOME/Unity itd. |
os_env_extra_user_paths |
[] | dodaj dodatkowe ścieżki do zmiennej PATH użytkownika (domyślnie pusta). |
os_env_umask |
027 | ustawia domyślne uprawnienia dla nowych plików na 750 |
os_auth_pw_max_age |
60 | maksymalny wiek hasła (ustawienie na 99999 praktycznie je wyłącza) |
os_auth_pw_min_age |
7 | minimalny wiek hasła (przed zezwoleniem na zmianę innego hasła) |
os_auth_retries |
5 | maksymalna liczba prób uwierzytelnienia, zanim konto zostanie zablokowane na pewien czas |
os_auth_lockout_time |
600 | czas w sekundach, który musi minąć, jeśli konto zostało zablokowane z powodu zbyt wielu nieudanych prób uwierzytelnienia |
os_auth_timeout |
60 | limit czasu na uwierzytelnienie w sekundach, więc logowanie zakończy się, jeśli ten czas minie |
os_auth_allow_homeless |
false | true, jeśli zezwala się użytkownikom bez katalogu domowego na logowanie |
os_auth_pam_passwdqc_enable |
true | true, jeśli chcesz używać silnej kontroli haseł w PAM za pomocą passwdqc |
os_auth_pam_passwdqc_options |
"min=disabled,disabled,16,12,8" | ustaw na dowolną opcję (jako ciąg), którą chcesz przekazać do passwdqc |
os_security_users_allow |
[] | lista rzeczy, które użytkownik może robić. Może zawierać change_user . |
os_security_kernel_enable_module_loading |
true | true, jeśli chcesz zezwolić na zmianę modułów jądra, gdy system działa (np. modprobe , rmmod ) |
os_security_kernel_enable_core_dump |
false | jądro zawiesiło się lub inaczej źle działa, a zrzut rdzenia jądra jest tworzony |
os_security_suid_sgid_enforce |
true | true, jeśli chcesz ograniczyć bity SUID/SGID. Istnieje już lista elementów, które są wyszukiwane w konfiguracji, ale możesz dodać własne |
os_security_suid_sgid_blacklist |
[] | lista ścieżek, z których powinny zostać usunięte bity SUID/SGID |
os_security_suid_sgid_whitelist |
[] | lista ścieżek, których bity SUID/SGID nie powinny być zmieniane |
os_security_suid_sgid_remove_from_unknown |
false | true, jeśli chcesz usunąć bity SUID/SGID z dowolnego pliku, który nie jest wyraźnie skonfigurowany w czarnej liście . To sprawi, że każda operacja Ansible przeszuka zamontowane systemy plików w poszukiwaniu bitów SUID/SGID, które nie są skonfigurowane w domyślnej i użytkownika czarnej liście. Jeśli znajdzie bit SUID/SGID, zostanie usunięty, chyba że ten plik znajduje się na twojej białej liście . |
os_security_packages_clean |
true | usuwa pakiety z znanymi problemami. Zobacz sekcję pakietów. |
ufw_manage_defaults |
true | true oznacza zastosowanie wszystkich ustawień z prefiksem ufw_ |
ufw_ipt_sysctl |
'' | domyślnie wyłącza IPT_SYSCTL w /etc/default/ufw. Jeśli chcesz nadpisać wartości /etc/sysctl.conf używając ufw - ustaw na słownik sysctl, na przykład /etc/ufw/sysctl.conf |
ufw_default_input_policy |
DROP | ustaw domyślną politykę wejściową ufw na DROP |
ufw_default_output_policy |
ACCEPT | ustaw domyślną politykę wyjściową ufw na ACCEPT |
ufw_default_forward_policy |
DROP | ustaw domyślną politykę przekazywania ufw na DROP |
os_auditd_enabled |
true | Ustaw na false, aby wyłączyć instalację i konfigurację auditd. |
Pakiety
Usuwamy następujące pakiety:
- xinetd (NSA, Rozdział 3.2.1)
- inetd (NSA, Rozdział 3.2.1)
- tftp-server (NSA, Rozdział 3.2.5)
- ypserv (NSA, Rozdział 3.2.4)
- telnet-server (NSA, Rozdział 3.2.2)
- rsh-server (NSA, Rozdział 3.2.3)
- prelink (open-scap)
Wyłączone systemy plików
Wyłączamy następujące systemy plików, ponieważ najprawdopodobniej nie są używane:
- "cramfs"
- "freevxfs"
- "jffs2"
- "hfs"
- "hfsplus"
- "squashfs"
- "udf"
- "vfat" # tylko jeśli nie używasz uefi
Aby zapobiec wyłączeniu niektórych systemów plików, dodaj je do zmiennej os_filesystem_whitelist
.
Instalacja
Zainstaluj rolę za pomocą Ansible Galaxy:
ansible-galaxy install dev-sec.os-hardening
Przykładowy plik uruchomieniowy
- hosts: localhost
roles:
- dev-sec.os-hardening
Zmiana zmiennych sysctl
Jeśli chcesz nadpisać zmienne sysctl, możesz użyć zmiennej sysctl_overwrite
(w starszych wersjach musiałeś nadpisać cały sysctl_dict
). Na przykład, jeśli chcesz zmienić zmienną przekazywania ruchu IPv4 na 1
, zrób to w ten sposób:
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Włącz przekazywanie ruchu IPv4.
net.ipv4.ip_forward: 1
Alternatywnie możesz zmienić hash-behaviour
Ansible'a na merge
, wtedy musisz nadpisać tylko pojedynczy hash, który potrzebujesz. Pamiętaj jednak, że zmiana zachowania haszu zmienia je dla wszystkich twoich plików uruchomieniowych i nie jest zalecana przez Ansible.
Lokal testing
Preferowanym sposobem lokalnego testowania roli jest użycie Docker. Musisz zainstalować Docker na swoim systemie. Zobacz Rozpocznij aby znaleźć odpowiedni pakiet Docker dla swojego systemu.
Możesz także używać Vagranta i Virtualbox lub VMWare do przeprowadzenia testów lokalnych. Musisz zainstalować Virtualbox i Vagranta na swoim systemie. Zobacz Pobieranie Vagranta aby znaleźć odpowiedni pakiet Vagrant dla swojego systemu. Do wszystkich naszych testów używamy test-kitchen
. Jeśli nie jesteś zaznajomiony z test-kitchen
, zapoznaj się z ich przewodnikiem.
Następnie zainstaluj test-kitchen:
# Zainstaluj zależności
gem install bundler
bundle install
Testowanie z Docker
# szybki test na jednej maszynie
bundle exec kitchen test default-ubuntu-1404
# test na wszystkich maszynach
bundle exec kitchen test
# do rozwoju
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404
Testowanie z Virtualbox
# szybki test na jednej maszynie
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404
# test na wszystkich maszynach
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# do rozwoju
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404
Więcej informacji znajdziesz w test-kitchen
Współtwórcy + Podziękowania
...
Ta rola opiera się głównie na przewodnikach:
- Arch Linux wiki, Hardening Sysctl
- NSA: Przewodnik po bezpiecznej konfiguracji Red Hat Enterprise Linux 5
- Bezpieczeństwo/ funkcje Ubuntu
- Deutsche Telekom, Grupa IT Security, Wymagania bezpieczeństwa (niemiecki)
Dzięki wszystkim!
Współpraca
Zobacz wytyczne dla współuczestników.
Licencja i autor
- Autor:: Sebastian Gumprich
Licencjonowane na podstawie Licencji Apache, Wersja 2.0 (zwana dalej „Licencją”); nie możesz używać tego pliku, z wyjątkiem zgodnie z Warunkami Licencji. Możesz uzyskać kopię Licencji pod adresem
http://www.apache.org/licenses/LICENSE-2.0
Z wyjątkiem wymagań wynikających z obowiązującego prawa lub uzgodnienia na piśmie, oprogramowanie dostarczane na podstawie Licencji jest dostarczane na zasadzie „TAK JAK JEST”, BEZ GWARANCJI ANI WARUNKÓW JAKIEGOKOLWIEK RODZAJU, wyrażonych lub domniemanych. Zobacz Licencję w celu szczegółowych warunków dotyczących uprawnień i ograniczeń wynikających z Licencji.
This role provides numerous security-related configurations, providing all-round base protection.
ansible-galaxy install kmonticolo.ansible_os_hardening