Navigation: Start -> ServerAdminTutorials -> Serversicherheit

Serversicherheit

Der Grundschutzkatalog des BSI ist mit 3.800 Seiten für IT-Profis, deren tägliche Aufgabe die Administration von Servern ist, sicher eine umfangreiche Hilfe. Für jene, die nur gelegentlich einen kleinen Server im WWW administrieren, versuchen wir hier einen kurze Hilfestellung zur Erhöhung der Sicherheit zu geben. Die Umsetzung der Beispiele wird für Debian beschrieben.

Allgemeine Grundregeln

In jeder Publication zu diesem Thema findet man die Hinweise, Updates regelmäßig zeitnah zu installieren und nur die benötigten Dienste laufen zu lassen. Nicht benötigte Dienste sollten deinstalliert werden. Werden sie nur gestoppt, kommt es in der Regel nach einem Update oder Reboot ganz unauffällig zu einem Neustart.

SSH-Konfiguration

Die Server in einem Rechenzentrum werden in der Regel via SSH administriert. Ein paar kleine Hinweise zur Konfiguration des Daemons:

Einige relevante Optionen aus der Konfiguration des SSH-Daemon in /etc/ssh/sshd_config, die häufig nach der Installation des Systems anzupassen sind:

Port 55022
Protocol 2
PermitRootLogin without-password   # oder no
PasswordAuthentication no
ChallengeResponseAuthentication no
X11Forwarding no
UsePAM no

Rootkit-Scanner nutzen

Rootkit-Scanner bieten zwar keine perfekte Sicherheit, im Fall der Fälle werden viele Angriffe jedoch erkannt. Debian bietet die Scanner rkhunter und chkrootkit im Repository. Sie werden wie üblich mit aptitude installiert. Nach der Installation können die Einstellungen für den tägliche Scan um 6:00 Uhr mit dem Kommando dpkg-reconfigure angepasst werden. Warnungen bei den täglichen Scans werden per E-Mail an den user root gesendet. Eine Weiterleitung der Nachrichten an den Admin-Account sollte konfiguriert werden (z.B. in der Datei /etc/aliases).

Auf der Kommandozeile werden die Scanner folgerndermaßen aufgerufen:

rkhunter liefert standardmäßig eine Reihe von Fehlermeldungen über versteckte Dateien und Verzeichnisse. Um nicht täglich mit dem gleichen Stuff belästigt zu werden und dabei die wichtigen Meldungen zu übersehen, sollten in der Datei /etc/rkhunter.conf die nötigen Anpassungen über ALLOW-Statements konfiguriert werden. Die Datei enthält bereits alles nötige als Kommentar.

Datenbereiche verschlüsseln

Neben der Software enthält der Server auch die nötigen Daten und Logfiles. Diese können teilweise vertraulich sein, beispielsweise gehören die Identifikations-Keys von Anon-Servern zu den absolut vertraulichen Daten. Um diese Daten auch bei Ausbau der Festplatte durch Service-Personal (z.B. bei technischen Problemen) zu schützen, sollten sie in einem verschlüsselten Container abgelegt werden. Eine Anleitung zur Nutzung von DM-Crypt bietet das Privacy-Handbuch.

SWAP-Partition verschlüsseln

Die swap-Partition kann sensible Daten enthalten. Es ist vor allem für Anon-Server empfehlenswert, diese Partition zu verschlüsseln. Debian GNU/Linux bringt alles nötige dafür bereits mit.

In der Datei /etc/crypttab sind die folgenden Zeilen hinzuzufügen, wobei "/dev/sda2" durch die jeweils genutzten Partition zu ersetzen ist:

cryptswp  /dev/sda2  /dev/urandom  swap

Außerdem ist die swap-Partition in der Datei /etc/fstab anzupassen, welche die beim Bootprozess zu mountenden Partitionen enthält:

/dev/mapper/cryptswp  none  swap  sw  0  0

Die swap-Partition wird mit einem zufälligem Passwort beim Booten initialisiert und verschlüsselt. Mit dem Herunterfahren des Systems ist das Passwort verloren und keiner kommt an diese Daten ran.

Firewall nutzen

Eine restriktive Firewall sollte in jedem Fall genutzt werden. Eine Möglichkeit ist es, die Firewall mit Bastille-Linux zu konfigurieren. Ein kleines übersichtliches Script ist aber auch schnell geschrieben und einfach anzupassen:

IPT=/sbin/iptables
IFACE="eth0"

# Alle Werte zurücksetzen
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -F
$IPT -X

# forwarding deaktivieren
echo 0 > /proc/sys/net/ipv4/ip_forward

# Default-Policies setzen
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# loopback freischalten
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Antworten auf bestehende Verbindungen erlauben
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP erlauben (nur für einige ISPs nötig)
# $IPT -A INPUT -m state --state NEW -p icmp -j ACCEPT


##################################################
# Einzelene Dienste freischalten
##################################################

# SSH erlauben, max. 3 Versuche in 60sec (Port anpassen!)
$IPT -A INPUT -i $IFACE -p tcp --dport 55022 -m state --state NEW -m recent --set --name SSH
$IPT -A INPUT -i $IFACE -p tcp --dport 55022 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 4 --rttl --name SSH -j REJECT --reject-with tcp-reset
$IPT -A INPUT -i $IFACE -p tcp --dport 55022 -m state --state NEW -j ACCEPT


# DNS erlauben (BIND)
$IPT -A INPUT -i $IFACE -p tcp --dport 53 -j ACCEPT
$IPT -A INPUT -i $IFACE -p udp --dport 53 -j ACCEPT


# Webserver erlauben
$IPT -A INPUT -i $IFACE -p tcp --dport 443 -j ACCEPT
$IPT -A INPUT -i $IFACE -p tcp --dport 80 -j ACCEPT

# alles weitere verwerfen
$IPT -A INPUT -j DROP

Das Beispiel zeigt ein kurzes Script für einen via SSH adminstrierten Webserver. Weitere erreichbare Dienste kann man einfach ergänzen. Das Script ist als Textdatei zu speichern und mit chmod u+x als ausführbar zu kennzeichnen. Es ist nach jedem Reboot aufzurufen.

Ein kleiner Hinweis für TOR-Admins, die keinen Webserver auf ihrem Server nutzen: Es wird gern gesehen, wenn diese Nodes ihre Dienste auf den Ports 443 (ORPort) und Port 80 (DirPort) anbieten. Um dies zu realisieren ohne tor mit der UID root laufen zu lassen, können diese Ports mit folgenden Regeln umgeleitet werden:

# Ohne Webserver können die Ports 443 und 80 für TOR genutzt werden
# $IPT -t nat -A PREROUTING -p TCP -i $IFACE --dport 443 -j REDIRECT --to-ports 9001
# $IPT -t nat -A PREROUTING -p TCP -i $IFACE --dport 80 -j REDIRECT --to-ports 9030

In der Datei /etc/torrc sind die Ports des TOR-Servers wie folgt zu konfigurieren:

ORPort 443
ORListenAddress 0.0.0.0:9001

DirPort 80
DirListenAddress 0.0.0.0:9030

Intrusion Detection Environment nutzen

Nachdem alles eingerichtet und konfiguriert ist, kann ein Tool für den Filesystem Integritäts Check initialisiert werden. Debian GNU/Linux bietet mit AIDE ein Tool für das Aufspüren von Modifikationen an Dateien. Das Tool überprüft die Attribute und verschiedene Checksummen der Dateien und meldet sich, sobald Modifikationen erkannt werden. Damit sollte man die Installation beliebiger Trojaner erkennen können. Debian-typisch ist (fast) alles sinnvoll vorbereitet. Die Installation erfolgt wie üblich mit "aptitude install aide".

Nach der Installation kann die Datei /etc/aide.conf angepasst werden. In dieser Datei ist vor allem das Verzeichnis /tmp von einer Überprüfung auszunehmen, da die häufigen Änderungen zu Fehlalarmen führen. Auch für die $HOME-Verzeichnisse sind besondere Regeln zu konfigurieren. Die Anpassung der Regeln kann ein paar Tage in Anspruch nehmen.

!/tmp$
/home$ p+u+g
!/var/lib/rkhunter/tmp$

Anschließend kann man mit dem Kommando "aideinit" die Datenbasis initialisieren. In Abweichung von der Dokumentation ist NICHT "aide --init" unter Debian aufzurufen. Damit erhält man eine leere Datenbasis. Das Debian-Team stellt Wrapper-Scripte für die Nutzung bereit.

Die Überprüfung des Systems erfolgt mit "aide.wrapper --check". Dieser Check sollte vor jedem Einspeilen von Updates durchgeführt werden!

Nach legalen Änderungen durch Updates und Anpassungen der Konfiguration des Systems ist die Datenbasis zu aktualisieren mit dem Kommando "aide.wrapper --update".

Den tagtäglichen automatisierten Check konfiguriert man in der Datei /etc/default/aide. Hier ist eine E-Mail Adresse für die Fehlermeldungen zu konfigurieren.

In der Dokumention findet man die Empfehlung, die Datenbasis auf einen schreibgeschützten Datenträger zu kopieren und diese Kopie für den Test zu nutzen. Das ist bei einem Server im Rechenzentrum schwer realisierbar. Man kann die Datei jedoch gegen Änderungen immunisieren und Modifikationen an dieser Datenbasis erschweren: "chattr +i /var/lib/aide/aide.db". Vor einem Update der Datenbasis ist diese Immunisierung rückgängig zu machen. "chattr -i /var/lib/aide/aide.db".

GPFWiki: Serversicherheit (last edited 2010-02-14 16:12:48 by e178101253)


Creative Commons License Dieses Werk ist unter einer Creative Commons-Lizenz lizenziert.