hanru.debianinit
debianinit: Debian Server Initialisierung
Diese Ansible-Rolle konfiguriert einen minimalen Debian-Server, der für zukünftige Nutzung bereit ist.
Die Rolle unterstützt derzeit die folgenden Distributionen:
- Debian Jessie (8.x)
- Debian Stretch (9.x)
- Debian Buster (10.x)
- Debian Bullseye (11.x)
Anforderungen
- Der SSH-Benutzer auf dem Remote-Server hat Root-Rechte.
- Python ist auf dem Remote-Server installiert.
Rollenvariablen
di_ssh_port: 22
SSH-Daemon hört auf diesem Port. SSH auf einem nicht-standardmäßigen Port zu betreiben und andere Sicherheitsmaßnahmen zu ignorieren, wird als Sicherheitsmaßnahme durch Verwirrung angesehen.
SSH hört standardmäßig auf Port 22. Es wird nicht empfohlen, diese Einstellung zu ändern.
di_ssh_password_authentication: 'nein'
Ob die SSH-Passwort-Authentifizierung aktiviert ist.
Die Passwort-Authentifizierung ist standardmäßig deaktiviert. Diese Einstellung sollte nicht geändert werden, es sei denn, Sie haben spezielle Anforderungen.
di_ssh_permit_root_login: 'ohne-passwort'
Ob der root
-Benutzer sich anmelden darf. Wenn Sie Ansible als root
ausführen, ist ohne-passwort
eine vernünftige Wahl. Andernfalls kann dies sicher auf nein
gesetzt werden.
Standardmäßig ist diese Einstellung ohne-passwort
.
di_ssh_allow_users: []
Eine Liste von Benutzern, die sich über SSH anmelden dürfen. Eine leere Liste bedeutet, dass diese Einstellung nicht durchgesetzt wird.
Standardmäßig ist diese Liste leer, was bedeutet, dass alle Benutzer zugelassen sind.
di_system_removed_packages:
- apache2
- bind9
- rpcbind
- samba
- sendmail
- snmp
Eine Liste von Paketen, die entfernt (löschen) werden sollen. Standardmäßig werden einige Pakete wie im obigen Block entfernt.
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
Eine Liste von Paketen, die installiert werden sollen. Standardmäßig werden einige Pakete wie im obigen Block installiert.
di_system_fail2ban_enabled: ja
Ob fail2ban installiert werden soll, ein Dienst, der schlechte Hosts gemäß bestimmten Regeln sperrt. Nach der Installation werden bruteforce SSH-Anmeldeversuche automatisch blockiert.
Standardmäßig ist fail2ban installiert.
di_system_timezone: 'UTC'
Server-Zeitzone. Es sei denn, Sie haben spezielle Anforderungen, ist UTC
die bevorzugte und standardmäßige Zeitzone.
di_system_timesync_enabled: ja
Ob der Zeit-Synchronisationsdienst aktiviert werden soll. Dieser Dienst wird von systemd bereitgestellt und ist leichter als der NTP-Dienst. Auf Xen-, KVM- virtuellen Servern und dedizierten Servern sollte dieser Dienst aktiviert werden. Auf OpenVZ-virtuellen Servern funktioniert dieser Dienst möglicherweise nicht.
Standardmäßig ist dieser Dienst aktiviert.
di_system_unattended_upgrades_enabled: nein
Ob die unbeaufsichtigten Upgrade aktiviert werden sollen, die das System täglich automatisch aktualisieren. Bitte beachten Sie, dass Server weiterhin gewartet werden sollten, auch wenn diese Funktion aktiviert ist. Einige neue Pakete (insbesondere neue Linux-Kernel) haben keine Wirkung, es sei denn, der Server wird neu gestartet.
Standardmäßig sind unbeaufsichtigte Upgrades deaktiviert. Es kann sicher auf einem Standard-System aktiviert werden.
di_system_unattended_upgrades_mail_to: ''
Eine Zeichenfolge, die eine E-Mail-Adresse darstellt. Eine E-Mail wird an diese Adresse gesendet, wenn unbeaufsichtigte Upgrades das System aktualisieren oder auf Probleme stoßen.
Standardmäßig ist diese Einstellung leer, was bedeutet, dass keine E-Mail gesendet wird.
di_add_users: []
Eine Liste von Benutzern, die auf dem Server erstellt werden sollen. Jeder Benutzer muss drei Felder definiert haben: name
, password
und shell
. Siehe den Beispiels Abschnitt für weitere Informationen zur Definition neuer Benutzer.
Standardmäßig werden keine Benutzer erstellt.
di_sudoers_password: []
Eine Liste von Benutzern, die den sudo
-Befehl ausführen können, nachdem sie ihre Passwörter eingegeben haben.
Standardmäßig werden keine Benutzer zu dieser Liste hinzugefügt.
di_sudoers_passwordless: []
Eine Liste von Benutzern, die sudo
ohne Eingabe ihrer Passwörter ausführen können. Da sudo
einen Befehl als root ausführt, ist es inhärent unsicher, wenn vor der Ausführung kein Passwort erforderlich ist. Diese Einstellung sollte für wichtige Server lieber leer gelassen werden.
Standardmäßig werden keine Benutzer zu dieser Liste hinzugefügt.
di_ufw_enabled: nein
Ob ufw
, ein benutzerfreundliches iptables-Frontend, installiert werden soll. Durch die Aktivierung von ufw
werden die standardmäßigen Richtlinien (Ausgehende erlauben, Eingehende verweigern) festgelegt und TCP auf dem SSH-Port erlaubt. Wenn der Server weitere Anwendungen hat, wie z.B. http, müssen Sie die Variable di_ufw_rules
weiter anpassen, siehe unten und Beispiel-Playbook.
Standardmäßig ist ufw
nicht installiert.
di_ufw_rules:
- { regel: erlauben, von: beliebig, nach: beliebig, port: '{{ di_ssh_port }}', proto: tcp }
Eine Liste benutzerdefinierter ufw
-Regeln. Diese Regeln werden angewendet, wenn ufw
aktiviert ist. Jede Regel muss fünf Felder haben.
regel
definiert die Art der Regel. Mögliche Werte sinderlauben
,verweigern
undablehnen
.von
definiert die Quell-IP-Adresse. Setzen Sievon
aufbeliebig
, wenn es keine Einschränkung der Quell-IP gibt.nach
definiert die Ziel-IP-Adresse. Setzen Sienach
aufbeliebig
, wenn es keine Einschränkung der Ziel-IP gibt.port
definiert den Zielport.proto
definiert das Netzwerkprotokoll. Mögliche Werte sindtcp
,udp
undbeliebig
.
Im Beispielabschnitt wird gezeigt, wie man ufw
-Regeln definiert. Beachten Sie, dass Sie, wenn Sie di_ufw_rules
ändern müssen, die erste Regel, die den SSH-Port erlaubt, beibehalten müssen, sonst riskieren Sie, sich aus Ihrem Server auszuschließen. Diese Rolle ist nur für einfache ufw
-Regeln geeignet. Für komplexere Regeln müssen Sie diese möglicherweise manuell definieren.
Standardmäßig wird TCP auf dem SSH-Port erlaubt. Es sind keine zusätzlichen ufw
-Regeln definiert.
Abhängigkeiten
Diese Rolle hat keine Abhängigkeiten.
Beispiel-Playbook
Wenn root das Playbook ausführt:
- 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: ja
di_system_unattended_upgrades_mail_to: [email protected]
di_ufw_enabled: ja
di_ufw_rules:
- { regel: erlauben, von: beliebig, nach: beliebig, port: '{{ di_ssh_port }}', proto: tcp }
- { regel: erlauben, von: beliebig, nach: beliebig, port: 80, proto: tcp }
- { regel: erlauben, von: beliebig, nach: beliebig, port: 443, proto: tcp }
- { regel: verweigern, von: 192.168.1.0/24, nach: beliebig, port: 53, proto: beliebig }
rollen:
- { rolle: hanru.debianinit }
Wenn ein Benutzer mit sudo-Rechten das Playbook ausführt:
- hosts: testservers
vars:
...
rollen:
- { rolle: hanru.debianinit, become: ja }
Lizenz
MIT
Referenz
Diese Rolle ist inspiriert von My First 5 Minutes On A Server. Bei der Entwicklung dieser Rolle habe ich viel aus den folgenden Ansible-Playbooks/Rollen gelernt.