Erste Schritte mit dem neuen vServer
Seit geraumer Zeit schlage ich mich mit dem Gedanken herum, meine Webseite auf einen eigenen Rootserver umzuziehen. Hauptgrund ist dabei die Möglichkeit den gesamten Verkehr über https laufen zu lassen (Let's Encrypt lässt grüßen :-) ) und darüber hinaus auch automatisiert regelmäßige Backups anlegen zu können. Ersteres lässt sich mein momentaner Webspaceanbieter nämlich fürstlich bezahlen, Letzteres war bisher von mir nur sporadisch gepflegt worden da man Backups nur manuell in der Administrationsoberfläche anstoßen konnte.
Das Mehr an Flexibilität (den Spaß nicht zu vergessen :-) ) geht jedoch einher mit einem gestiegenen Wartungsaufwand sowie einem hohen Maß an Verantwortung; schließlich ist man auch direkt verantwortlich, wenn der Server gekapert wird, weil man ihn nicht richtig abgesichert hat und nun Amok läuft. Entscheiden musste ich mich letztendlich nur noch, ob ich mir einen eigenen kleinen Server zu Hause hinstelle oder ob ich etwas Passendes miete. Nach einigem hin und her habe ich mich dann für die Mietoption entschieden, jedoch statt eines echten physischen Servers "nur" einen virtualisierten gemietet. Zum einen war mir ein ausgewachsener Rootserver mit 8-Kern-CPU und Gigabytes voll RAM dann doch 'ne Nummer zu oversized für meine Bedürfnisse, zum anderen zahlt man für solche Rechenknechte auch ein hübsches Sümmchen monatlich. Da bieten gerade die kleineren vServer eine gute Mischung aus Preis und verfügbarer Leistung und sollten für kleinere Projekte vollkommen ausreichen. Gesagt getan, der Server war bestellt und schon nach 5 (!) Minuten bekam ich die Mail mit den Zugangsdaten. Und das am Freitag Abend nach 19 Uhr; Respekt :-)
Erste Schritte
Mit den Zugangsdaten kann man sich nun via SSH auf dem Server als root einloggen. Das erste, was man auf jeden Fall tun sollte ist das Passwort zu ändern:
#: passwd
da der Server bei Auslieferung noch auf Englisch gestellt war, habe ich ihn kurzerhand auf Deutsch umgestellt:
#: dpkg-reconfigure locales
dort die entsprechenden locales auswählen und dann mittels
#: locale-gen
generieren. Da ich nicht gerne ständig im root-Kontext arbeite erstelle ich mir gleich einen eigenen Benutzer
#: adduser vserver-user
SSH-Dienst absichern
Neben einer Firewall wohl der wichtigste Punkt. Momentan kann man sich via SSH mittels Passwort anmelden und auch root kann sich dort anmelden. Um auch hier ein gesteigertes Maß an Sicherheit zu bekommen, sollte man auf jeden Fall den SSH-Login auf Publickey Authentication umstellen und die Anmeldung via Passwort unterbinden; darüber hinaus sollte es dem root user nicht erlaubt sein, sich überhaupt per SSH einzuloggen. Die einzelnen Punkte habe ich hier schonmal beschrieben.
Firewall einrichten
Der nächste Punkt auf der Liste ist die Einrichtung einer Firewall, wenn man nicht will, das die Serverdienste munter und unkontrolliert mit der Außenwelt kommunizieren können. Ich setze dabei auf die 'uncomplicated firewall' bzw. 'ufw', die ein leicht zu bedienendes Frontend für iptables bietet. Als erstes erstellen wir eine Standardregel und verbieten grundsätzlich alles, danach erlauben wir speziell den ssh-Dienst und dann schalten wir noch das logging ein:
#: ufw default deny
#: ufw allow ssh
#: ufw logging on
fail2ban
Ich hatte den Server keine halbe Stunde und schon klopften die ersten Idioten an die Tür, wie mir ein Blick in die Datei
/var/log/auth.log
verrät. Standardmäßig haben sie beliebig viele Versuche um reinzukommen. Um das einzuschränken, bietet sich fail2ban an. Dieses nützliche, in Python geschriebene Programm, scant periodisch verschiedene Logdateien nach verdächtigen Inhalten (z.B. mehrfach gescheiterte Login-Versuche pro IP) und sperrt bspw. eine IP-Adresse nach zuvielen gescheiterten Loginversuchen. Den Status eines 'jails' kann man jederzeit via
#: fail2ban-client status ssh
abrufen.
Fazit
Ich denke, wenn man diese Punkte erst einmal abgearbeitet hat, hat man seinen Server schon ein bedeutendes Maß sicherer gemacht und kann nachts etwas ruhiger schlafen. Absolute Sicherheit gibt es leider nicht, daher sollte man seinen Server regelmäßig kritisch beobachten und vor allem regelmäßg Sicherheitsaktualisierungen einspielen.