Absicherung eines Debian Servers
Dieser Artikel beschreibt die Absicherung eines Debian Root Servers und optionale Einrichtung von Monitoring.
Inhaltsverzeichnis
- 1 Minimale Installation
- 2 SSH Login absichern
- 3 SSH Port ändern
- 4 Benachrichtigung bei SSH Login
- 5 Regelmäßige Systemupdates
- 6 Alle Ports sperren und mit Whitelists arbeiten
- 7 Brute Force Attacken mit Fail2Ban verhindern
- 8 Rootkits mit rkhunter aufspüren
- 9 Dienste mit Monit überwachen
- 10 Festplatten mittels smartmontools überwachen
- 11 Einzelnachweise
Minimale Installation
Installieren Sie Ihren Server stehts nur mit den notwendigen Paketen. Jeder Overhead an Software bedeutet auch mehr potentielle Angriffsfläche.
SSH Login absichern
Es empfiehlt sich dem Root Benutzer keinen direkten SSH Login zu erlauben. Sie können ausserdem eine Gruppe von Benutzern festlegen, die SSH nutzen dürfen.
Die genauer Anleitung finden Sie unter SSH Root Login unter Debian verbieten
Sicherer und komfortabler ist es ausserdem, den Login mit Passwort zu verbieten und dafür einen SSH Key zu verwenden.
Die genaue Anleitung finden Sie unter SSH Key Login
SSH Port ändern
Die Mehrzahl der (automatisierten) Loginattacken auf SSH erfolgt auf den Standardport 22. Eine einfache und effektive Methode ist es, den SSH Port auf einen anderen zu ändern. Öffnen Sie dazu die Konfigurationsdatei von SSH
nano /etc/ssh/sshd_config
und ändern Sie den SSH Port von
Port 22
auf einen anderen Port nach Ihrer Wahl ab. Der SSH Dienst muss danach mit
/etc/init.d/ssh restart
neu gestartet werden.
Beachten Sie bitte, dass Sie keinen festen Port eines anderen Dienstes benutzen. Eine Liste mit Ports und Diensten finden Sie unter
more /etc/services
Aktive SSH Verbindungen bleiben offen. Öffnen Sie nun ein neues Terminalfenster und testen Sie ob Sie SSH mit Ihrem angegebenen Port erreichen, bevor Sie das aktive Fenster schließen.
Benachrichtigung bei SSH Login
Mit folgendem Skript erhalten Sie eine E-Mail, sobald sich ein Benutzer per SSH einloggt.
Erstellen Sie dazu ein ausführbares Shell Skript /opt/shell-login.sh mit folgendem Inhalt:
#!/bin/bash echo "Login auf $(hostname) am $(date +%Y-%m-%d) um $(date +%H:%M)" echo "Benutzer: $USER" echo finger
Damit die Mails beim Login versendet werden, muss folgende Zeile
/opt/shell-login.sh | mailx -s "SSH Login auf IHR-HOSTNAME" ihre-emailadresse@example.com
in der Datei
/etc/profile
eingetragen werden.
Die Datei /opt/shell-login.sh muss die Rechte 755 besitzen:
chmod 755 /opt/shell-login.sh
Die Mail wird nun automatisch versendet, sobald sich ein Benutzer per SSH einloggt. Der User bekommt davon nichts mit.
Regelmäßige Systemupdates
Das Debian Security Team veröffentlicht regelmäßig Sicherheitsupdates und neue Kernelversionen. Die Updates sollten Sie (sofern Sie keinen eigenen, angepassten Kernel verwenden) regelmäßig durchführen. Um nicht jeden Tag Updates manuell prüfen zu müssen, gibt es das Paket apticron, welches Sie per Mail über neue Updates informiert. Installieren Sie zunächst das Paket mit
aptitude install apticron
und legen Sie unter
/etc/apticron/apticron.conf
Ihre Mailadresse und den Hostnamen des Systems (optional) fest. Die Updates könnten natürlich auch per Cronjob jeden Tag automatisch installiert werden, war wir jedoch nicht empfehlen. Sie haben so nie die Kontrolle darüber was installiert wird und können evtl. Fehler nur schwer nachvollziehen.
Weiterführender Link: Debian E-Mail Updatebenachrichtigung mit apticron
Alle Ports sperren und mit Whitelists arbeiten
Diese Methode bedarf großer Vorsicht bei der Einrichtung, damit Sie sich nicht aussperren.
Sobald alle Dienste installiert sind und Sie wissen, welche Ports benötigt werden, können Sie alle anderen Ports mittels iptables blocken.
Weitere Informationen dazu finden Sie auf folgenden Webseiten:
Brute Force Attacken mit Fail2Ban verhindern
Das Packet fail2ban kann verwendet werden um verschiedene Dienste gegen Bruteforce Attacken abzusichern. Nach einer Anzahl X Logins wird die IP Adresse des Angreifers für X Minuten/Stunden/Tage gesperrt.
Die genaue Anleitung finden Sie unter SSH_Login_unter_Debian_mit_fail2ban_absichern
Rootkits mit rkhunter aufspüren
Sollte es einem Angreifer gelingen das System zu kompromittieren, ist es meist schwer nachzuvollziehen wo der Einbruch erfolgte. Mit dem Tool rkhunter wird der Server auf häufige Rootkits, verdächtige Strings, etc. überprüft und der Benutzer beim Fund informiert.
Installieren Sie das Paket mit
aptitude install rkhunter
und tragen Sie in der Datei
/etc/rkhunter.conf
Ihre Mailadresse beim Punkt
MAIL-ON-WARNING="user@domain.tld"
ein. Führen Sie nun einen ersten Test mittels
rkhunter --check
aus. Sollten Sie hier Warnungen erhalten, bei denen Sie wissen dass diese false-positive sind, können Sie Whitelists unter
/etc/rkhunter.conf
erstellen. Diese könnten ungefähr so aussehen
ALLOWHIDDENDIR=/dev/.mdadm RTKT_FILE_WHITELIST=/etc/init.d/.depend.boot SCRIPTWHITELIST=/etc/init.d/hdparm
Genaue Ergebnisse der Tests finden Sie unter
/var/log/rkhunter.log
Dienste mit Monit überwachen
Die Dienste auf Ihrem Server können Sie (soweit nicht bereits durch ein anderes Managementsystem eingerichtet) mit dem Tool Monit überwachen. Je nach Konfiguration sendet Monit Ihnen Mails, z.B. wenn ein Dienst nicht erreichbar ist oder von Monit neu gestartet wurde. Sie können den Platz auf den Festplatten, Offene Ports, Dienste und vieles mehr überwachen.
Installieren Sie das Paket mit
aptitude install monit
und ändern Sie per
nano /etc/default/monit
den wert
startup=0
auf
startup=1
damit Monit als Dienst laufen kann. Nun müssen die Dienste, die überwacht werden sollen in die Konfigurationsdatei eingetragen werden:
nano /etc/monit/monitrc
Die Datei könnte z.B. so aussehen (die // Kommentare sind nur zur Erklärung und dürfen in der Konfigurationsdatei nicht angegeben werden)[1]
set daemon 120 // Monit überprüft all 2 Minuten set logfile syslog facility log_daemon // Wo wird die Logdatei hingeschrieben set mailserver localhost // Mailserver über den die Mails verschickt werden set mail-format { from: user@domain.tld } // Mailadresse Absender set alert user@domain.tld // Empfänger der Mails check system localhost // Lokalen Server überwachen if loadavg (5min) > 1 then alert // Wenn Loadaverage über 5 Minuten größer 1 ist, Alarm versenden if memory usage > 75% then alert // Wenn mehr als 75% des Speichers benötigt werden, Alarm versenden if cpu usage (user) > 70% then alert // Wenn mehr als 70% CPU Leistung benötigt wird, Alarm versenden (User) if cpu usage (system) > 30% then alert // Wenn mehr als 30% CPU Leistung benötigt wird, Alarm versenden (System) if cpu usage (wait) > 20% then alert // Wenn mehr als 20% CPU Leistung benötigt wird, Alarm versenden (Wait) check process sshd with pidfile /var/run/sshd.pid // Dienst SSH durch PID File überwachen start program "/etc/init.d/ssh start" // Wie kann SSH im Fehlerfall gestartet werden stop program "/etc/init.d/ssh stop" // Wie kann SSH im Fehlerfall beendet werden if failed port 22 protocol ssh then restart // Wenn der SSH Dienst nicht läuft, neu starten if 5 restarts within 5 cycles then timeout // Wenn nach 5 Versuchen der Dienst nicht gestartet werden kann, mit Timeout beenden check process mysql with pidfile /var/run/mysqld/mysqld.pid // Dienst Mysql durch PID File überwachen group database // Gruppe definieren start program = "/etc/init.d/mysql start" // Wie kann der MySQL Server im Fehlerfall gestartet werden stop program = "/etc/init.d/mysql stop" // Wie kann der MySQL Server im Fehlerfall gestopt werden if failed host 127.0.0.1 port 3306 then restart // Wenn Port 3306 (MySql) auf dem Lokalen Server nicht läuft, neu starten if 5 restarts within 5 cycles then timeout // Wenn nach 5 Versuchen der Dienst nicht gestartet werden kann, mit Timeout beenden
Natürlich gibts es eine Vielzahl anderer Überwachungssoftware auf dem Markt. Monit ist jedoch sehr schnell und unkompliziert eingerichtet. Sollten Sie mehr Details benötigen bzw. ganze Serverfarmen monitoren wollen, empfehlen wir Nagios für welches wir auch IPMI Plugins anbieten.
Festplatten mittels smartmontools überwachen
Wichtige Bauteile wie Festplatten sollten ebenfalls überwacht werden. Da es hier zu viele Konstellationen von Raid Controllern und Konfigurationen gibt, gehe ich hier nur auf die smartmontools ein. In dem Beispielszenario werden 2 SATA Platten mittels mdadm im Raid 1 auf dem onboard Raidcontroller verwendet. Die Installation von mdadm setze ich hier als Grundlage voraus.
Das Paket smartmontools wird mittels
aptitude install smartmontools
installiert und der auskommentierte Wert
#start_smartd=yes
in der Datei
/etc/default/smartmontools
einkommentiert werden, damit der Dienst aktiv beim Systemstart gestartet wird.
start_smartd=yes
Nun werden die zu überprüfenden Festplatten in die Datei
/etc/smartd.conf
eingetragen. Kommentieren Sie zunächst folgende Zeile aus
DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
und setzen Sie diese beiden Zeilen darunter
/dev/sda -n standby -a -I 194 -W 6,50,55 -R 5 -M daily -M test -m user@domain.tld /dev/sdb -n standby -a -I 194 -W 6,50,55 -R 5 -M daily -M test -m user@domain.tld
Erklärung:
/dev/sda // Bezeichnung der zu überwachenden Festplatte -n standby // Wenn die Festplatte im Standbymodus ist, diese nicht aufwecken -a // Alle Werte überprüfen -I 194 // Temperature Wert auslassen -W 6,50,55 // Änderungen von 6 Grad oder mehr reporten. Temperaturhöchstwert 50 Grad. Bei 55 Grad warnen. -R 5 // Reallocated Sectors beachten (ID 5) -M daily // Tägliche Erinnerung versenden, auch wenn das Problem bereits gemeldet wurde -M test // Testmail beim Neustart des Diensts schicken -m user@domain.tld // Empfänger der Warnungen