hanru.debianinit
debianinit: Inicjalizacja serwera Debian
Ten rol Ansible konfiguruje minimalny serwer Debian, który jest gotowy do przyszłego użytkowania.
Aktualnie rola obsługuje następujące dystrybucje:
- Debian Jessie (8.x)
- Debian Stretch (9.x)
- Debian Buster (10.x)
- Debian Bullseye (11.x)
Wymagania
- Użytkownik SSH na zdalnym serwerze ma uprawnienia roota.
- Python jest zainstalowany na zdalnym serwerze.
Zmienne roli
di_ssh_port: 22
Port, na którym nasłuchuje demon SSH. Umieszczanie SSH na niestandardowym porcie i ignorowanie innych środków bezpieczeństwa jest uważane za bezpieczeństwo przez nieprzejrzystość.
Domyślnie SSH nasłuchuje na porcie 22. Nie zaleca się zmiany tej konfiguracji.
di_ssh_password_authentication: 'no'
Czy uwierzytelnianie hasłem SSH jest włączone.
Domyślnie uwierzytelnianie hasłem jest wyłączone. Chyba że masz konkretne wymagania, ta opcja nie powinna być zmieniana.
di_ssh_permit_root_login: 'without-password'
Czy użytkownik root
może się logować. Jeśli uruchamiasz ansible jako root
, to without-password
jest rozsądnym wyborem. W przeciwnym razie można to bezpiecznie ustawić na no
.
Domyślnie ta opcja jest ustawiona na without-password
.
di_ssh_allow_users: []
Lista użytkowników, którzy mogą logować się przez SSH. Pusta lista oznacza, że to ustawienie nie jest egzekwowane.
Domyślnie ta lista jest pusta, co oznacza, że wszyscy użytkownicy mają dostęp.
di_system_removed_packages:
- apache2
- bind9
- rpcbind
- samba
- sendmail
- snmp
Lista pakietów do usunięcia. Domyślnie niektóre pakiety są usuwane jak w powyższym bloku.
di_system_installed_packages:
- apt-transport-https
- bzip2
- ca-certificates
- cron
- curl
- dbus
- dnsutils
- haveged
- less
- logrotate
- lsb-release
- mtr-tiny
- openssl
- rsyslog
- screen
- sudo
- time
- vim-tiny
- vnstat
- wget
- whiptail
Lista pakietów do zainstalowania. Domyślnie niektóre pakiety są instalowane jak w powyższym bloku.
di_system_fail2ban_enabled: yes
Czy zainstalować fail2ban, który blokuje złe hosty zgodnie z określonymi zasadami. Po instalacji automatycznie blokowane są próby logowania przez SSH.
Domyślnie fail2ban jest zainstalowany.
di_system_timezone: 'UTC'
Strefa czasowa serwera. Chyba że masz konkretne wymagania, UTC
jest preferowaną i domyślną strefą czasową.
di_system_timesync_enabled: yes
Czy włączyć usługę synchronizacji czasu. Usługa ta jest dostarczana przez systemd i jest lżejsza niż usługa ntp. Na serwerach wirtualnych Xen, KVM i dedykowanych ta usługa powinna być włączona. Na serwerach wirtualnych OpenVZ ta usługa może nie działać.
Domyślnie ta usługa jest włączona.
di_system_unattended_upgrades_enabled: no
Czy włączyć automatyczne aktualizacje, które będą codziennie aktualizować system. Pamiętaj, że serwery powinny być nadal nadzorowane, nawet jeśli ta funkcja jest włączona. Na przykład, niektóre nowe pakiety (np. nowy kernel Linux) nie wejdą w życie, chyba że serwer zostanie uruchomiony ponownie.
Domyślnie automatyczne aktualizacje są wyłączone. Można je bezpiecznie włączyć na standardowym systemie.
di_system_unattended_upgrades_mail_to: ''
Adres e-mail, na który będą wysyłane powiadomienia, gdy automatyczne aktualizacje aktualizują system lub napotkają problemy.
Domyślnie ta opcja jest pusta, co oznacza, że nie będzie wysyłany żaden e-mail.
di_add_users: []
Lista użytkowników do utworzenia na serwerze. Każdy użytkownik musi mieć zdefiniowane trzy pola: name
, password
i shell
. Zobacz sekcję przykładów, aby dowiedzieć się więcej o definiowaniu nowych użytkowników.
Domyślnie nie są tworzeni żadni użytkownicy.
di_sudoers_password: []
Lista użytkowników, którzy mogą wykonywać polecenia sudo
po podaniu hasła.
Domyślnie żaden użytkownik nie jest dodawany do tej listy.
di_sudoers_passwordless: []
Lista użytkowników, którzy mogą wykonywać sudo
bez podawania hasła. Ponieważ sudo
uruchamia polecenia jako root, jest to z natury niebezpieczne, jeśli nie jest wymagane hasło przed uruchomieniem. Ta opcja lepiej jest pozostawić pustą dla ważnych serwerów.
Domyślnie żaden użytkownik nie jest dodawany do tej listy.
di_ufw_enabled: no
Czy zainstalować ufw, przyjazny dla ludzi interfejs do iptables. Włączając ufw, ustawiane są domyślne polityki (zezwolenie na ruch wychodzący, odrzucenie ruchu przychodzącego) oraz zezwolenie na TCP na porcie SSH. Jeśli serwer będzie miał inne zastosowania, takie jak http, będziesz musiał dostosować zmienną di_ufw_rules
, patrz poniżej i w przykładach.
Domyślnie ufw nie jest zainstalowany.
di_ufw_rules:
- { rule: allow, from: any, to: any, port: '{{ di_ssh_port }}', proto: tcp }
Lista reguł ufw zdefiniowanych przez użytkownika. Te reguły będą stosowane, gdy ufw jest włączony. Każda reguła musi mieć pięć pól.
rule
definiuje typ reguły. Możliwe wartości toallow
(zezwól),deny
(odrzuć) ireject
(odrzuć).from
definiuje adres IP źródłowy. Ustawfrom
naany
, jeśli nie ma ograniczenia adresu IP.to
definiuje adres IP docelowy. Ustawto
naany
, jeśli nie ma ograniczenia adresu IP.port
definiuje port docelowy.proto
definiuje protokół sieciowy. Możliwe wartości totcp
,udp
iany
.
Sekcja przykładów pokazuje, jak definiować reguły ufw. Należy pamiętać, że jeśli chcesz zmienić di_ufw_rules
, pierwsza reguła, która zezwala na port SSH, musi zostać zachowana, inaczej możesz ryzykować zablokowanie dostępu do serwera. Ta rola jest w stanie obsługiwać tylko proste reguły ufw. W przypadku bardziej skomplikowanych reguł może być konieczne ich ręczne zdefiniowanie.
Domyślnie TCP na porcie SSH jest dozwolony. Nie są definiowane dodatkowe reguły ufw.
Zależności
Ta rola nie ma zależności.
Przykładowy playbook
Gdy root uruchamia playbook:
- hosts: testservers
vars:
di_add_users:
- name: test
password: randompassword
shell: /bin/bash
- name: git
password: anotherrandompassword
shell: /usr/bin/git-shell
di_ssh_allow_users:
- root
- test
- git
di_sudoers_password:
- test
di_system_unattended_upgrades_enabled: yes
di_system_unattended_upgrades_mail_to: [email protected]
di_ufw_enabled: yes
di_ufw_rules:
- { rule: allow, from: any, to: any, port: '{{ di_ssh_port }}', proto: tcp }
- { rule: allow, from: any, to: any, port: 80, proto: tcp }
- { rule: allow, from: any, to: any, port: 443, proto: tcp }
- { rule: deny, from: 192.168.1.0/24, to: any, port: 53, proto: any }
roles:
- { role: hanru.debianinit }
Gdy użytkownik z uprawnieniami sudo uruchamia playbook:
- hosts: testservers
vars:
...
roles:
- { role: hanru.debianinit, become: yes }
Licencja
MIT
Źródło
Ta rola jest inspirowana Moimi pierwszymi 5 minutami na serwerze. Podczas rozwijania tej roli dużo się nauczyłem z następujących playbooków/rol Ansible.
ansible-galaxy install hanru.debianinit