Server gegen Angriffe absichern

Linux-Server sicher im Netzwerk betreiben

29.03.2011 von Thomas Hümmler
Jeder Rechner im Internet oder Intranet ist für Angriffe von außen anfällig. Viele Betriebssysteme bieten gegen solche Attacken umfangreiche Abwehrmechanismen. Wie Sie Ihren Linux-Server wirkungsvoll absichern, erfahren Sie in unserem Ratgeber.

Im allgemeinen Sprachgebrauch versteht man unter einem Server eine Maschine. Im IT-Sinn aber ist ein Server ein Dienst, der von einem Programm bereitgestellt wird. In einem Unternehmen müssen oft gleich mehrere dieser Dienste vorhanden sein, etwa ein Druckserver, ein Dateiserver, ein Mail- und ein Webserver, ein LDAP-Server, ein Samba-Server oder sogar ein Musikserver.

Die Dienste oder Daemons können auf mehrere Maschinen verteilt sein oder alle zentral von einem Computer vorgehalten werden. In größeren Netzwerken ist zumeist eine Firewall vorgeschaltet, bevor Daten ins Innere gelangen. Kleinere Netzwerke mit einem Server halten eine Firewall oftmals auf dem gleichen Rechner vor oder sogar nur auf dem Internet-Router wie etwa einer FritzBox.

Bildergalerie: Server absichern
Server wirkungsvoll absichern
Lokaler Portmapper: Um entfernte Systeme am Zugang zu hindern, kommentieren Sie die OPTIONS-Zeile aus und starten den Portmapper neu.
Server wirkungsvoll absichern
Aktive Internetverbindungen: Der Befehl netstat -lnp zeigt an, welche Server an welchen Adressen auf Anfragen aus dem Netz lauschen.
Server wirkungsvoll absichern
Ziemlich sicher: Ein Portscan von tecchannel.de ergibt nur einen offenen Port – den Port 80 mit dem Webserver.
Server wirkungsvoll absichern
Schon dabei: In Opensuse wird die Firewall über das Administrationstool Yast konfiguriert.
Server wirkungsvoll absichern
Gewusst wo: In der Datei /etc/login.defs kann root festlegen, wie häufig die Benutzer ihr Passwort ändern dürfen.
Server wirkungsvoll absichern
root-Lektüre: In den Howtos und Sicherheitsartikeln stehen wichtige Dinge, wie Sie ein System sicherer machen.

Wichtig für einen sicheren Serverbetrieb ist der Grundsatz: "Nicht benötigte Dienste abschalten." Die in Linux genutzten Daemons sind generell sicher. Trotzdem gilt: Sie sollten keine Dienste installieren, die Sie nicht unbedingt in Ihrem System benötigen. Denn je weniger Dienste Sie einsetzen, desto geringer ist die Gefahr eines Angriffs. Warum das?

Server horchen an einem Port auf Anfragen - so etwa der SMTP-Dienst am Port 25, der Webserver am Port 80, IMAP am Port 143, der Druckdienst CUPS am Port 631 und der Samba-Share-Server am Port 901. Diese Ports sind die Angriffspunkte, wenn es darum geht, einen Rechner zu kompromittieren. Sie verringern das Risiko eines Eindringens, indem Sie auf nicht benötigte Dienste verzichten und den Port so quasi verschließen.

Netzwerkdienste überprüfen und gegebenenfalls abschalten

Wenn Sie zum Beispiel von außen per SSH (Port 22) auf Ihr Netzwerk zugreifen, benötigen Sie eventuell einen Dienst wie FTP (Ports 20 und 21) nicht. Dann schalten Sie diesen ab, falls er installiert ist. Das machen Sie am einfachsten, indem Sie das zugehörige Paket entfernen. In openSUSE benutzen Sie dazu das Administrations-Tool Yast, in Debian können Sie den FTP-Dienst als Root auf der Konsole löschen mit

apt-get remove --purge ftp

Der Parameter "--purge" sorgt dafür, dass auch sämtliche Konfigurationsdaten gelöscht werden. Für Angreifer ist es danach nicht mehr möglich, sich über den Port Zugang zu verschaffen. Wenn Sie beispielsweise IMAP anstelle von POP3 als Versandprotokoll einsetzen, benötigen Sie den POP3-Dienst (Port 110 und 995).

Lokaler Portmapper: Um entfernte Systeme am Zugang zu hindern, kommentieren Sie die OPTIONS-Zeile aus und starten den Portmapper neu.

In Debian ist zudem der RPC-Portmapper (Port 111) standardmäßig installiert. Das Protokoll Remote Procedure Call (RPC) wird unter anderem von NFS und NIS verwendet. Er muss für manche lokale Dienste laufen, um RPC-Aufrufe ausführen zu können. Zwar gilt der Portmapper selbst als sicher, allerdings gibt es einige DDoS-Angriffe, die RPC-Löcher dazu benutzen, in das System einzudringen. In dem Fall hilft es, den Zugriff auf Portmapper und RPC-Dienste einzuschränken: Dazu blockieren Sie den Zugang zu den Ports entweder mit einer lokalen Firewall oder mittels eines TCP-Wrappers, indem Sie den externen Zugang über die Parameter hosts.allow und hosts.deny in der TCP-Wrapper-Konfiguration blockieren. Die einfachste Lösung dürfte aber sein, das Paket portmap so zu konfigurieren, dass es nur an der lokalen Schleifenschnittstelle lauscht. Das ist seit Version 5.5 möglich. Dazu müssen Sie lediglich die Zeile

#OPTIONS="-i 127.0.0.1"

in der Datei /etc/default/portmap auskommentieren und den Portmapper neu starten. Das reicht aus, um lokale RPC-Dienste laufen zu lassen und entfernte Systeme am Zugang zu hindern.

Mit Port-Scans Sicherheitslücken finden

Welche Ports auf Ihrem System geöffnet sind, erfahren Sie mithilfe des Kommandozeilen-Tools netstat. Netstat liefert Informationen aus dem Linux-Netzwerk-System. Ohne Optionen zeigt netstat den Zustand von offenen Sockets an. Der Befehl

netstat -lnp

ist dienlicher: Er gibt nur die Sockets aus, auf denen gehört wird (-l); zeigt die numerischen Adressen (-n), anstatt zu versuchen, den symbolischen Rechner, Port oder Benutzernamen auszugeben; und er gibt die Prozess-ID sowie den Programmnamen (-p) an, zu denen jeder Socket gehört. Was bei der Ausgabe als aktive Internetverbindung angezeigt wird, sollten Sie besonders beachten: Das sind die Server, die auf Anfragen von draußen lauschen.

Aktive Internetverbindungen: Der Befehl netstat -lnp zeigt an, welche Server an welchen Adressen auf Anfragen aus dem Netz lauschen.

Eine weitere Möglichkeit bietet nmap. Das Kommando

nmap -p1-65535 irgendeinServer.tld

zeigt nach einigen Sekunden alle offenen Ports im Bereich von 1 bis 65535 an, an denen Server lauschen. Diese können Sie einfach kontrollieren und bei Bedarf abschalten. Der Portscanner nmap bietet aber noch einige weitere Möglichkeiten.

Ziemlich sicher: Ein Portscan von tecchannel.de ergibt nur einen offenen Port - den Port 80 mit dem Webserver.

Typisch ist zum Beispiel das Kommando:

nmap -A -T4 irgendServer.tlp

Hier wird ein Portscan durchgeführt. Dieser ermöglicht Betriebssystemerkennung, Skript-Scanning und Traceroute (-A); der Parameter -T4 sorgt zudem für eine schnellere Ausführung. Wenn Sie mit nmap arbeiten wollen, werfen Sie unbedingt einen Blick in die man-Page, die mit mehr als 2.000 Zeilen das Tool umfassend erklärt.

Mehr Schutz mit einer richtig konfigurierten Firewall

Eine Firewall dient dazu, den Zugriff auf das lokale System abzusichern oder sogar einzuschränken. Der aktuelle Linux-Kernel hat diese Fähigkeiten bereits eingebaut, als Firewall wird iptables beziehungsweise netfilter (http://www.netfilter.org) benutzt. Generell gilt: Man sollte sich nicht allein auf die Firewall-Regeln verlassen. Ebenso wichtig ist das korrekte Konfigurieren aller Dienste, die Verbindung zur Außenwelt haben. Denn ein System, das nur von einer Firewall geschützt wird, wäre nach Entfernen der Regeln geöffnet für Angriffe.

Schon dabei: In Opensuse wird die Firewall über das Administrations-Tool Yast konfiguriert.

Am sinnvollsten ist eine Firewall, die standardmäßig zunächst alles ablehnt, was nicht erlaubt ist. Mit einer strengen Konfiguration kann man selbst Trojaner am Funktionieren hindern, die Meldungen aus dem System heraus verschicken wollen. Das ist insbesondere deshalb interessant, weil Eindringlinge keine Super-User-Rechte benötigen, um etwa ferngesteuerte Trojaner zu installieren. Im Idealfall sorgt eine Firewall dafür, dass eingehende Verbindungen zu lokalen Diensten nur den in der Konfiguration eingetragen erlaubten Maschinen gestattet ist. Verbindungen nach draußen werden von einer derartigen Firewall nur den Diensten gestattet, die auf dem eigenen System benutzt werden - egal, ob das der Webserver oder der Bittorrent-Client ist.

Wird der Zugang zum Netzwerk von einem gesonderten Firewall-Rechner abgeschirmt, wird anhand von Forward-Regeln alles weitere verboten, sei denn, andere Rechner sind entsprechend geschützt. Dazu kann man eine sogenannte Bridge-Firewall aufsetzen. Diese filternde Firewall hat keine IP-Adresse und kann nicht direkt attackiert werden. Je nach Linux-Kernel müssen Sie dazu eventuell den Bridge-Firewall-Patch installieren. Wie das zum Beispiel in Debian funktioniert, wird im Sicherheitshandbuch in Anhang D beschrieben.

Während unter Opensuse die Firewall einfach über Yast konfiguriert werden kann, hat der Debian-Administrator noch die Qual der Wahl zwischen verschiedenen Firewall-Konfigurationspaketen:

Ob nun mit Yast oder einem der Pakete für Debian: Mit allen ist es möglich, sich komplett vom System auszusperren - nicht nur auf dem Remote-System, sondern - so iptables-Debian-Maintainer Laurence J. Lane - sogar "von dem Computer, dessen Tastatur einem unter den Fingern liegt". Gehen Sie daher beim Konfigurieren der Firewall äußerst vorsichtig vor und machen Sie nur das, wovon Sie genau wissen, was Sie tun.

Innere Sicherheit überprüfen und erhöhen

Während einer Debian-Installation werden Sie gefragt, ob Sie Shadow-Passwörter nutzen wollen. Das ist eine sinnvolle Sache, denn die Passwörter werden in der Datei /etc/shadow gespeichert, auf die nur root und die Gruppe shadow Zugriff haben. Mit dem Befehl "shadowconfig on" kann root die Shadow-Passwörter auch nachträglich einschalten. Wichtig kann es zudem sein, dass Benutzer ihre Passwörter regelmäßig ändern sollten. Wann das ist, kann der Administrator in der Datei /etc/login.defs festlegen. Mit den Variablen PASS_MAX_DAYS, PASS_MIN_DAYS und PASS_WARN_AGE legt root fest, wie lange ein Passwort maximal gültig ist, wie kurz die Zeit zwischen Passwortänderungen sein soll und wie viele Tage vor Ablauf des Passworts eine Warnung ausgegeben wird. Auf einem Ubuntu-System ist eine Passwort 99.999 Tage gültig, also fast 274 Jahre. Wer hier beispielsweise spätestens alle drei Monate seine Benutzer auffordern will, ein neues Passwort zu verwenden, trägt bei PASS_MAX_DAYS den Wert 90 ein.

Gewusst wo: In der Datei /etc/login.defs kann root festlegen, wie häufig die Benutzer ihr Passwort ändern dürfen.

Standardmäßig werden Passwörter mit einem SHA512-basierten Verfahren verschlüsselt. Das gilt als relativ sicher gegen Brute-Force-Angriffe. Zum Erzeugen eines SHA-Passworts kann root vorgeben, wie viele Durchläufe der Algorithmus passieren soll. Standardmäßig sind das 5000 Schleifen. Über die Parameter SHA_CRYPT_MIN_ROUNDS und SHA_CRYPT_MAX_ROUNDS in der /etc/login.defs kann root diesen Wert anpassen. Wird nur ein Wert gesetzt, übernimmt das System diesen als Vorgabewert. Hier gilt: Je mehr Runden, desto komplexer wird das Passwort - allerdings sind auch mehr CPU-Reserven zum Authentifizieren erforderlich.

Wer seinen Benutzern das Finden neuer Passwörter erleichtern will, sollte ein Tool wie APG einsetzen. Je nach den Parametern erzeugt dieses Tool zufällig Passwörter, die in keinem Lexikon oder Wörterbuch stehen. In der man-Page von apg steht außerdem der Text für ein Skript pwgen.sh, mit dem Sie sichere Passwörter erzeugen. Der Inhalt des Skripts besteht lediglich aus zwei Zeilen:

#!/bin/sh

/usr/local/bin/apg -m 8 -x 12 -s

Wichtig ist die zweite Zeile, sie ruft das apg-Programm auf. Die Parameter bedeuten: -m legt die Mindestlänge eines Passworts fest; -x definiert die maximale Länge des Passworts; der Parameter -s schließlich sorgt dafür, dass der Benutzer eine zufällige Tastenfolge eingeben muss, um so beim Generieren des neuen Passworts zu helfen.

Sicheres Linux - Weitere Informationsquellen

root-Lektüre: In den Howtos und Sicherheitsartikeln stehen wichtige Hinweise, wie Sie ein System sicherer machen.

Sicherheit ist auf Linux-Systemen ein relevantes, allgegenwärtiges Thema und beschäftigt daher auch die IT-Administratoren in den Unternehmen. Entsprechend viele unstrukturierte Informationen gibt es daher im Internet. Diese sicherheitsrelevanten Daten sind aber oft ungeordnet und schwer im Netz zu finden. Wir haben hier eine konkrete Auswahl für Sie zusammengestellt, die als zusätzliche Lektüre rund um die Sicherheit von Linux-Systemen zu empfehlen ist: