Hier ein paar Worte zur Serversicherheit.
Grundsätzlich sollten über den Router immer nur die Ports freigegeben und an den Server weitergeleitet werden, welche auch benötigt werden. Jeder weitere offene Port bedeutet eine weitere offene Tür für Angreifer.
Auch sollte man tunlichst darauf achten, alle Verbindungen von außerhalb zum Server nur über das verschlüsselte HTTPS ablaufen zu lassen. Die Docker-Services richten wir später entsprechend ein. Als FTP nutzen wir SFTP, welches quasi die verschlüsselte Version von FTP ist.
Firewall via ufw einrichten
Außerdem sollte man eine Firewall einrichten, welche zusätzlich alles sperrt und Zugriffe loggt, damit man Fremdzugriffe kontrollieren kann.
Hierzu nutzt bei bei Linux klassischerweise das Tool iptables. Da dieses aber schwierig zu konfigurieren ist bringt Ubuntu das nette kleine Tool ufw mit.
Eine wunderbare Anleitung finden wir dazu hier, mehr Informationen dazu gibt es hier.
Im Grunde verbieten wir zuerst alle Zugriffe von außerhalb, und schalten dann nur solche frei, für welche wir später auch die entsprechenden Ports freigeben würden. Also 22 für SSH, 80/443 für HTTP/HTTPS bzw. 50 (ich habe das auf einen anderen Port gelegt) für SFTP, Samba, sowie alle weiteren nötigen Ports. Alles ausgehenden Zugriffe bleiben dabei aktiviert, sodass der Server stets aufs Netz zugreifen kann.
Nach Aktivierung der FIrewall aktivieren wir das logging via
sudo ufw logging on
Logs finden wir unter Ubuntu in /var/log/ufw.log, in anderen Distributionen unter /var/log/syslog. Diese Dateien können wir mit jedem Texteditor öffnen. Als Test können wir den Server auf jede beliebige Art ansprechen, über den Browser, über FTP, etc. Alles wird gespeichert.
Den Status und die gesetzten Regeln lassen wir uns jederzeit ausgeben mit
sudo ufw status verbose
Wiederholte fremde Login-Versuche via
fail2ban blockieren
Natürlich versuchen trotzdem immer noch viele sich in unserem System einzuloggen. Davor ist man nie wirklich geschützt, denn es gibt genügend Tools die unsere IP (oder Domain) nach offenen Ports absuchen und dann versuchen, sich darauf mit irgendwelchen Zugangsdaten einzuloggen.
Logs von versuchten und fehlgeschlagenen Authentifikationen finden wir unter /var/log/auth.log.
Um zumindest zu verhindern dass Personen Tools einsetzen und jede mögliche Nutzer/Passwort-Kombination ausprobieren, bis sie die richtige gefunden haben, setzen wir fail2ban ein
Dieses installieren wir mit
sudo apt-get install fail2ban
Nun erstellen wir eine neue Konfigurationsdatei und öffnen diese direkt mit
sudo nano /etc/fail2ban/jail.local
und schreiben folgendes hinein
[DEFAULT]
bantime = 12h
findtime = 1h
maxretry = 3
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Was bedeutet das? Damit setzen wir als Default erstmal die Zeit, wie lange IPs gesperrt werden sollen, auf 12 Stunden, verlängern die Zeit in welcher die IPs abgeglichen werden sollen auf 1 Stunde und setzen die maximale Anzahl an Login-Versuchen, nach denen gesperrt werden soll, auf 3.
Danach aktivieren wir fail2ban für den SSH Zugriff und setzen den korrekten Port.
Jede IP die sich nun innerhalb einer Stunde 3 Mal hintereinander erfolglos versucht über SSH einzuloggen wir dementsprechend für 12 Stunden gesperrt.
Wir speichern und schließen die Datei und starten fail2ban neu mit
sudo systemctl restart fail2ban
Danach ist es aktiv und blockt entsprechend unseren Einstellungen.
Logs checken
Wer gerne ab und zu mal nachsieht, was sich so auf dem Server für Login bzw. Login-Attempts tummeln, kann folgende zwei Kommandos eingeben. Mit
last
findet man die letzten erfolgreichen Logins, und mit
grep "Failed password" /var/log/auth.log
findet man die letzten fehlgeschlagenen Login-Versuche und die zugehörigen Nutzernamen und IPs. Sucht man nun die aufgeführten IPs (bspw. via whatismyipaddress.com/ip-lookup) findet man gerne mal Login-Versuche aus China, den Niederlanden oder sonst wo.