Absicherung eines Debian Servers

Aus Thomas Krenn Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt die Absicherung eines Debian Root Servers und optionale Einrichtung von Monitoring.

Inhaltsverzeichnis

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 Script erhalten Sie eine E-Mail, sobald sich ein Benutzer per SSH einloggt.

Erstellen Sie dazu ein ausführbares Shell Script names 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

 /root/scripts/shell-login.sh | mailx -s "SSH Login auf IHR-HOSTNAME" user@domain.tld

in die

 /etc/profile

Die Mail wird nun automatisch versendet, sobald sich ein Benutzer per SSH einloggt. Der User bekommt davon nichts mit. Hierfür muss die Datei jedoch die Rechte 751 besitzen.

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ühren

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. Monit sendet Ihnen Mails, sobald ein Dienst nicht erreichbar ist und versucht zuvor (je nach Konfiguration) den Dienst selbst neu zu starten. 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)

 set daemon 180                                                 // 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 Mysql 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 Wert

 start_smartd=yes

in der Datei

 /etc/default/smartmontools

auf

 start_smartd=yes

geändert, damit der Dienst aktiv beim Systemstart gestartet wird. 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/sda -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

MDADM Raid überwachen


Share/Save/Bookmark  Feedback zu diesem Artikel geben
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Kategorien
Drucken/exportieren
Werkzeuge