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