Linux-Webserver absichern und Hacker-Attacken abwehren

So genannte “root-Server” vom Hostingprovider Ihrer Wahl versprechen uneingeschränkte Server-Power und vollen Zugriff. Doch wer seinen LinuxWebserver selbst betreibt, sollte sich auch ein paar Gedanken zur Sicherheit machen. Mit nur wenigen Handgriffen wird der Webserver deutlich sicherer. Server-Sicherheit ist ein umfassendes Thema. Es beginnt mit der Wahl eines sicheren Passworts und ist mit einer sicheren Programmierung der eingesetzten Web-Applikationen noch nicht zu Ende. Dennoch können Sie schon mit einfachen Mitteln der Masse der Script-Kiddies und Möchtegern-Hacker deren Tun deutlich erschweren.

Offene Ports schließen

Zuerst werfen Sie einen Blick auf die aktiven Server-Dienste, die einen Port zur Außenwelt offenhalten. Faustregel für Neulinge: Was man nicht kennt, wird nicht benötigt. Was nicht benötigt wird, wird auch nicht gestartet. Denn was nicht gestartet ist, kann später kein Sicherheitsrisiko werden. In jedem Fall sollten Sie nach dem Abschalten von Ports ausführlich testen, ob es Probleme gibt.

Einen Überblick verschafft das Kommando

netstat -ltup

Das gibt etwa auf einem Standard-Debian-System eine Ausgabe wie im Bild gezeigt zurück

Ausgabe des Befehls netstat

Interessant sind der Port (steht hinter dem Doppelpunkt der local address) und der Programmname. In Ordnung ist in unserem Beispiel die vorletzte Zeile. Der SSH-Dämon wird zum sicheren Login auf dem Server benötigt. Meist kommen dazu noch Programme auf Port 21 (FTP) und Port 80 oder 443 (HTTP/HTTPS). Eine ausführliche Beschreibung, welche Ports für welchen Dienst zuständig sind, finden Sie beispielsweise hier:

http://www.chebucto.ns.ca/~rakerman/port-table.html

Sofern Sie kein NFS (network filesystem) verwenden, sind die restlichen angezeigten Ports unnötigerweise geöffnet. Zum Ausschalten gibt es zwei Möglichkeiten: Am einfachsten entfernen Sie mit dem Paketmanager (dselect, aptitude oder yast) das gesamte überflüssige Programm-Paket.

Aber Vorsicht: Oft sind andere, noch benötigte Programm-Pakete von dem fraglichen Paket abhängig. In diesem Fall dürfen Sie das Paket nicht entfernen, sondern Sie verändern zum Ausschalten die Start-Scripte des Systems, die normalerweise im Ordner /etc/init.d zu finden sind. Der Befehl

/etc/init.d/portmap stop

schaltet beispielsweise den Portmapper (erste Zeile) aus. Damit allerdings noch nicht genug, Sie müssen auch dafür sorgen, dass der Dienst bei einem System-Neustart nicht wieder mit gestartet wird. Nehmen Sie den Texteditor Ihrer Wahl und öffnen Sie die gerade aufgerufene Script-Datei.

Schreiben Sie

exit 0

an den Beginn der Datei und speichern Sie das File.

Ein Spezialfall ist das Programm inetd beziehungsweise xinetd (siehe dritte Zeile im Bild). Mit diesem Dämon können verschiedene Dienste gestartet werden. Welche aktiv sind, bestimmt normalerweise die Datei /etc/inetd.conf oder /etc/xinetd.conf.

Tipp: Ist nicht klar, welches Startscript für einen Dienst zuständig ist, hilft der grep-Befehl, etwa

grep -i rpc.statd /etc/init.d/

* Falls Sie eine Suse-Distribution verwenden, schalten Sie die Dienste einfach in Yast ab. Dazu rufen Sie als root Yast von der Kommandozeile aus mit

yast

auf. Die Dienste sehen Sie unter System – Runlevel-Editor.

Apache-Webserver absichern

Jetzt kommt der Webserver an die Reihe, fast immer ist ein Apache httpd 1.3 oder 2.0 installiert. Dessen Grundfunktionen werden durch etliche ladbare Module ergänzt.

Welche Module aktuell benutzt werden, steht bei Version 1.3 in der Datei /etc/apache/httpd.conf, etwa

LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so

LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so

LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so

LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so

LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so

Überflüssige Module kommentieren Sie hier # plus Leerzeichen am Zeilenanfang aus. Das hat neben dem Sicherheitsaspekt noch den netten Zusatzeffekt, dass der Apache mit weniger Modulen schneller arbeitet und weniger Speicher benötigt.

Nur Module, die tatsächlich benötigt werden, sollten geladen werden. Welche das sind, hängt von den Aufgaben Ihres Servers ab. Auf einem StandardWebserver sind fast immer überflüssig:

* lib_status (liefert eine serverinterne Statusanzeige)

* libproxy (damit dient der Webserver als Zwischenspeicher für Zugriffe auf weitere Server – ein enormes Sicherheitsrisiko!)

* mod_cgi (dient zum Ausführen sogenannter cgi-scripte, die heute kaum noch verwendet werden, ebenfalls ein Sicherheitsrisiko)

* mod_userdir (generiert für jeden auf dem System vorhandenen Benutzer ein eigenes Webserver-Verzeichnis)

Ein Apache 2.0 verwendet in Debian die Datei /etc/apache2/apache2.conf zur Konfiguration. Dort wiederum werden standardmäßig alle Module geladen, für die im Verzeichnis /etc/apache2/mods-enabled/ ein symbolischer Link vorhanden ist. Zum Ausschalten eines Moduls müssen Sie deshalb diesen Link löschen. Nach dem Ändern der Config-Dateien zeigt ein

apache -t

ob die Konfigurations-Syntax noch in Ordnung ist. Ein

/etc/init.d/apache restart

oder

/etc/init.d/apache2 restart

startet dann den Server neu, damit die Änderungen auch wirksam werden.

Unter Suse ist es ein wenig anders. Dort werden die Apache-Module in der Datei /etc/sysconfig/apache2 geladen. Suchen Sie in der Datei nach der Zeile APACHE_MODULES und löschen Sie daraus die nicht gewünschten Einträge. Danach müssen Sie

SuSEconfig

von der Shell aus aufrufen. Anschließend starten Sie mit

rcapache2 restart

den Webserver neu. Genaue Infos zur Aufgabe jedes Moduls gibt es auf den Apache-Webseiten unter

http://httpd.apache.org/docs/1.3/mod/index-bytype.html und

http://httpd.apache.org/docs/2.0/mod/

Ähnliche Beiträge