Debian Webserver härten gegen Hack-Angriffe

Bevor Services eines Servers über das Internet erreichbar sind, sollten diese abgesichert werden. Mit kleinen Einstellungen können oft gleich eine vielzahl an Angriffen ausgeklammert werden.

In diesem Beitrag möchte ich gezielt auf das Hardening eines Webservers mit den Standardservices eingehen. Die einzelnen Punkte können natürlich auch für andere Einsatzgebiete sinnvoll sein.

SSH Konfiguration optimieren

Benötigt man SSH-Zugriff auf den Server (ungeachtet dessen ob der Dienst auf eine öffentliche Adresse gemappt wurde) verringern folgende Einstellungen das Risiko angegriffen zu werden. Die Optionen werden in folgender Datei angepasst oder hinzugefügt:

sudo nano /etc/ssh/sshd_config

Root Login deaktivieren

PermitRootLogin no

Automatisierte Attacken richten sich oft gegen den root-User. Ausserdem muss man zweimal mit unterschiedlichen Benutzern authentifizieren, bevor man root-Zugriff hat. Am besten deaktiviert man diesen Zugang.

Leere Passwörter nicht zulassen

PermitEmptyPasswords no

Dies schützt vor dem Fernzugriff über einen versehentlich erstellten Benutzer oder ein Benutzer, der automatisch von einem Dienst erstellt wurde.

Listen-Port verändern

Port 666

Diese Massnahme schützt nur durch Verschleierung. Automatisierte Attacken können damit aber gut abgewendet werden.

Fun-Fact: Port 666 (zwar UDP) ist die offizielle Port-Nummer des FPS Doom.

SSH-Zugriff auf einzelne User/Groups beschränken

AllowUsers nm
AllowGroups wheel

Grenzt den SSH-Zugriff auf einzelne Nutzer oder Gruppen ein.

Verbindung trennen nach 3 Fehlversuchen

MaxAuthTries 5

Nach einer bestimmten Anzahl Fehlversuchen wird die Verbindung getrennt.

Service neustarten

sudo service ssh reload

Apache Konfiguration optimieren

Eigener User für Apache

Um einem Angreifer die Eskalation seiner Berechtigungen so schwierig wie möglich zu machen, sollte der User welcher den Apache-Service startet, so wenig Berechtigungen haben wie möglich. Während der Apache installation wird in der Regel ein solcher User erstellt (www-data). Ob Apache korrekt über diesen User gestartet wurde, kann man über folgendem Befehl testen:

ps -efl | grep apache2

Versionsnummer nicht ausgeben

Bei Fehlermeldungen (Bsp. 404 – Not Found) wird unten die Versionsnummer des Webservers angezeigt. Diese kann wie folgt versteckt werden:

sudo nano /etc/apache2/conf.d/security
# Deaktiviert Versionsnummern in servergenerierten Dokumenten (bsp. 404)
ServerSignature Off
# Deaktiviert das Senden von Systeminformationen an Clients
ServerTokens ProductOnly

Ordnerauflistung standardmässig deaktivieren

Die Ordnerauflistung (bei fehlender Index-Datei) kann per Options-Direktive deaktiviert werden.

Options -Indexes

Unnötige Module deaktivieren

Module die nicht mehr benötigt werden brauchen unnötig Ressourcen und repräsentieren nur eine grössere Angriffsfläche. Was nicht mehr benötigt wird, sollte deaktiviert werden:

sudo a2dismod

Dieser Befehl listet aktivierte Module auf. Durch Eingabe deren Namen kann man diese deaktivieren.

Dieser Beitrag wird laufend aktualisiert

Notizen für weitere Schritte 🙂

apt-get install fail2ban
change hostname
add user deploy
installed and enabled ufw
ssh private keys, no root login
logwatch
rkhunter
chkrootkit
psad
tripwire