Sicherheit auf dem eigenen Server
Einfach zu bekommen, schwer zu sichern
Einen eigenen Server zu betreiben, ist heute einfacher denn je. Auf dem Markt sammeln sich etliche Hoster, die für bereits unter 10 Euro im Monat Virtual Private Server anbieten, also virtuelle Server, die sich frei administrieren lassen. Auf diesen lassen sich zum Beispiel Anwendungen betreiben, die im Managed Hosting Bereich noch nicht angeboten werden. Für Betreiber eines solchen Servers ist jedoch der Aufwand ungleich höher, denn dieser muss sich nun mit Grundlagen der Serveradministration wie Paketinstallationen, Benutzerverwaltung und Sicherheitsmaßnahmen auseinandersetzen. Besonders der letzte Punkt ist sehr wichtig, denn Server im Internet sind stets Bedrohungen wie Bruteforce oder 0-Day-Attacken ausgesetzt. Ein schlecht abgesicherter Server kann dadurch schnell Teil eines Botnetzes werden oder zum Kryptomining ausgenutzt werden. Wichtige Daten könnten von Angreifern auch verschlüsselt werden, sodass sie nur noch gegen Herausgabe eines Lösegelds wieder lesbar gemacht werden können. Im Folgenden stellen wir daher einige Maßnahmen vor, wie man sich gegen solche Angriffe schützen kann.
Automatische Updates halten das System aktuell
Auch wenn sie nervig sind, Updates sind eine der wichtigsten Methoden, um einen Server sicher zu halten. Bestimmte Fehler in Programmen, wie zum Beispiel Webservern, können aus dem Internet heraus ausgenutzt werden, um Zugriff auf das gesamte System zu bekommen. Sind diese Fehler bekannt, entstehen sehr schnell automatische Tools, mit denen sich solche Lücken einfach ausnutzen lassen. Deswegen ist es unabdingbar, verfügbare Updates schnellstmöglich einzuspielen. Wer keine Zeit hat, das von Hand zu machen, kann den Prozess auch automatisieren. Debian und darauf aufbauende Distributionen wie Ubuntu beinhalten dafür das Paket „unattended-upgrades“.
Zur Einrichtung muss das Paket zuerst installiert werden.
# apt update
# apt install unattended-upgrades
Danach wird eine neue Konfigurationsdatei abgelegt, die definiert, aus welchen Repositories automatisch Updates installiert werden dürfen.
# cat > /etc/apt/apt.conf.d/52unattended-upgrades-local <<'EOF'
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}:${distro_codename}-updates";
};
EOF
Das Paket unterstützt auch das Durchführen eines automatischen Neustarts, da nur so bestimmte Updates aktiv werden. Um diese zu aktivieren, werden der im letzten Schritt angelegten Konfigurationsdatei noch zwei weitere Direktiven hinzugefügt.
# cat >> /etc/apt/apt.conf.d/51unattended-upgrades-local <<EOF
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:15";
EOF
Mit diesen Werten wird der Server automatisch nachts um 2.15 Uhr neugestartet, falls Updates installiert wurden.
Dabei ist es wichtig, zu beachten, dass dieser Prozess nur Updates für Software einspielt, die mithilfe des Paketmanagers installiert worden sind. Andere Software, wie zum Beispiel ein auf den Server kopiertes TYPO3, sind hier ausgenommen.
Ungenutzte Ports mithilfe einer Firewall sperren
Firewalls schränken die Netzwerkverbindung eines Systems so ein, dass nur freigegebene Dienste, wie zum Beispiel SSH für die Ferneinwahl oder HTTP/HTTPS für Webserver, mit Geräten aus dem Internet kommunizieren dürfen. Basierend auf Absender, Ziel und den genutzten Ports kann eine Firewall entscheiden, ob ein Netzwerkpaket akzeptiert oder verworfen wird. Auf einem typischen Webserver müssen zum Beispiel nur die Ports 22 (SSH), 80 (HTTP) und 443 (HTTPS) freigegeben sein.
Für den einfachen Gebrauch empfiehlt sich die Firewall UFW, deren Name für UncomplicatedFireWall steht. Wie der Name vermuten lässt, ist die Nutzung im Gegensatz zu anderen Firewalls sehr simpel gehalten. Dafür ist sie nicht so mächtig wie andere Firewall-Software, wie zum Beispiel firewalld. Im Folgenden sind die Schritte zur Einrichtung von UFW auf Debian erklärt, um einen Webserver zu betreiben.
Zuerst wird UFW installiert.
# apt update
# apt install ufw
Danach werden die ersten Regeln erstellt. Diese erlauben standardmäßig alle ausgehenden Verbindungen, verbieten aber alle eingehenden. Zum jetzigen Zeitpunkt können diese Regeln sicher erstellt werden, da die Firewall noch nicht aktiv ist.
# ufw default deny incoming
# ufw default allow outgoing
Nun müssen noch die spezifischen Regeln definiert werden, damit den erwünschten Diensten die Kommunikation erlaubt wird.
# ufw allow ssh
# ufw allow http
# ufw allow https
Damit die Regeln auch aktiv werden, muss die Firewall nun scharf geschaltet werden.
# ufw enable
Weitere Regeln können nach Bedarf während des Betriebs hinzugefügt werden und benötigen keinen Neustart.
Bruteforce-Attacken mit fail2ban einschränken
Als Bruteforce werden solche Angriffe bezeichnet, bei denen automatisiert sehr schnell verschiedene Passwörter ausprobiert werden, um irgendwann zufällig das richtige zu erraten. Diese Angriffe lassen sich auf die meisten netzwerkfähigen Dienste wie SSH oder die Administrationsoberfläche eines CMS automatisiert ausführen und sind technisch mit geringem Aufwand verbunden. Glücklicherweise ist ein solcher Angriff leicht erkennbar, solange die Loginversuche protokolliert werden. Hier setzt fail2ban an. Es wertet durchgehend die Protokolle aus und erkennt fehlgeschlagene Loginversuche anhand von definierten Mustern. Tauchen davon innerhalb einer definierten Zeit sehr viele auf, kann fail2ban Maßnahmen wie zum Beispiel eine Blockade der Ursprungs-IP implementieren. Komplett verhindern lassen sich die Angriffsversuche dadurch zwar nicht, jedoch zumindest verlangsamen. Als zusätzlichen Schutz vor Bruteforce ist die Nutzung eines sicheren Passwortes in Verbindung mit einem Passwortmanager und von Zwei-Faktor-Authentifizierung (2FA) empfehlenswert. Auch der SSH-Zugriff lässt sich inzwischen per 2FA absichern.
Die grundlegende Einrichtung von fail2ban auf Debian-basierten Systemen ist sehr simpel. So muss nur das Paket installiert werden, um den SSH-Zugriff abzusichern, denn dies ist bereits vorkonfiguriert.
# apt install fail2ban
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Um andere Dienste abzusichern, können weitere sogenannte Jails und Filter angelegt werden. Wie dies funktioniert, ist in der Dokumentation von fail2ban beschrieben.
Für den Ernstfall: Backups
Die Administration eines eigenen Servers sollte nicht auf die leichte Schulter genommen werden. Oft reicht eine unbedachte Fehlkonfiguration und das System wird binnen kurzer Zeit Teil eines Botnetzes oder zum Kryptominer umfunktioniert. Die in diesem Artikel erwähnten Maßnahmen sollten Teil eines umfänglichen Sicherheitskonzeptes sein und decken längst nicht alle möglichen Angriffsszenarien ab, stellen jedoch einen guten Anfang dar. Regelmäßige Backups sind daher ein Muss, um im Ernstfall so schnell wie möglich wieder betriebsbereit zu sein. Empfehlenswert ist hier zum Beispiel Restic, welches sich auf vielen Plattformen installieren lässt und eine Fülle an Protokollen zum Backup unterstützt.