Hat die Installation geklappt, wird es Zeit den Server zu schützen. Mit nur wenigen Tools kannst du Deinen Server bereits gegen die wichtigsten Attacken abwehren:
- SSL-Zertifikat let’s encrypt (erzwingt das https)
- ufw (als Firewall)
- fail2ban (gegen DDoS-Attacken)
- root-login deaktivieren
SSL-Zertifikat für apache2 oder nginx
Ein SSL-Zertifikat verschlüsselt sämtlichen Datenverkehr zwischen dem Benutzer und deiner Webseite. Der einfachste Weg für einen Debianserver geht via Certbot.
um https systemweit anzuwenden, ergänze die .htaccess mit:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Damit das URL-rewrite auch klappt, muss das apache2-Modul aktiviert werden:
# a2enmod rewrite
ufw
ufw wird per
# apt install ufw
installiert. Dannach können per Terminalbefehl Regeln hinzugefügt oder entfernt werden. Vorsicht! Die Firewall ist gnadenlos und es kann durchaus vorkommen, dass du dich selbst vom gesamten Server aussperrst, falls du z.B. vergisst, den Zugang via ssh und den dazugehörenden Port offen zu halten.
Starten von der Firewall: (ausschalten mit disable)
# ufw enable
Alle einkommenden Befehle ignorieren, alle ausgehenden erlauben:
# ufw default deny incoming # ufw default allow outgoing
Erlaube ssh auf Port [12345]:
# ufw allow ssh # ufw allow 12345
Erlaube apache2 mit https:
# ufw allow 443
Erlauf der IP 12.34.567.89 den Zugriff:
# ufw allow from 12.34.567.89
Zeige aller Reglen (Beispiel)
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 12345 ALLOW IN Anywhere [ 3] 443 ALLOW IN Anywhere [ 4] Anywhere ALLOW IN 12.34.567.89 [ 5] 22/tcp (v6) ALLOW IN Anywhere (v6) [ 6] 12345 (v6) ALLOW IN Anywhere (v6) [ 7] 443 (v6) ALLOW IN Anywhere (v6)
lösche eine Regel mit:
# ufw delete NUMMER
starte den Dienst neu mit:
/etc/init.d/ufw restart
fail2ban
fail2ban gibt dir die Möglichkeit, nach ein paar missglückten Versuchen den ssh-Zugang für eine gewisse Zeit komplett zu sperren. Auch hier gilt wieder einmal Vorsicht! Es kann durchaus vorkommen, dass auch du dich unfreiweillig für ein paar Stunden selbst aussperrst. fail2ban gibt es direkt aus den Paketquellen:
$ apt search fail2ban
Sortierung… Fertig
Volltextsuche… Fertig
(...)
fail2ban/stable,now 0.11.2-2 all [installiert]
Sperrt Rechner, die wiederholt Authentifikationsfehler verursachen
# apt install fail2ban
Das nötige Konfigurationsfile findet man unter:
/etc/fail2ban/jail.conf
Erstelle eine Kopie vom Originalfile:
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
die verhindert, dass bei einem Update die eigenen Regeln überschrieben werden.
Hast Du alle Konfigurationen vorgenommen, starte den Dienst neu:
# /etc/init.d/fail2ban restart
Den aktuellen Status von fail2ban ruftst du per systemctl auf:
$ systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-11-26 10:14:43 CET; 1 weeks 1 days ago Docs: man:fail2ban(1) Main PID: 655 (fail2ban-server) Tasks: 5 (limit: 4678) Memory: 21.2M CPU: 6min 15.308s CGroup: /system.slice/fail2ban.service └─655 /usr/bin/python3 /usr/bin/fail2ban-server -xf start Warning: some journal files were not opened due to insufficient permissions.
root-Zugang sperren
Das direkte Login via ssh für den User root ist in Debian 11 standardmässig bereits deaktiviert. Falls nicht, rufe
# nano /etc/ssh/sshd_config
auf und ändere
PermitRootLogin yes
in
PermitRootLogin no
Starte anschliessend der Service neu:
# /etc/init.d/ssh restart
Portwechsel vom ssh-Server
Standardmässig lauscht unser ssh-Server auf Port 22. Um diesen Port zu wechseln, rufe:
# nano /etc/ssh/sshd_config
auf und entferne das Kommentarzeichen (#) und setze den Port neu.
Include /etc/ssh/sshd_config.d/*.conf
Port 12345
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Speichere die Datei ab und starte den ssh-Server neu. Falls eine Firewall wie ufw läuft, unbedingt den neuen Port offen halten.
# /etc/init.d/ssh restart
directory-listing abschalten (apache2)
Standardmässig listet apache2 Verzeichniss unter /var/www auf. Dies ist jedoch nur bei einem lokalen Server erwünscht.
Um dies dauerhaft abzustellen, editiere die Datei
# nano -w /etc/apache2/apache2.conf
und ersetze None mit all:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
erstelle anschliessend eine .htaccess (falls die nicht schon existiert) und füge folgende Zeilen ein:
# schalte das directory-listing aus
Options -Indexes
Falls nicht schon aktiviert, schalte mod_rewrite ein:
# a2enmod rewrite
Starte anschliessend der apache2 neu:
# /etc/init.d/apache2 restart