Für diesen Blog sowie diverse andere Dinge habe ich mir vor geraumer Zeit einen vServer gemietet. Dieser bietet zwar einige Vorteile, bringt allerdings auch einige Nachteile mit sich. So kann ich auf dem Server zwar alles an Programmen laufen lassen, wie ich will, muss im Gegenzug aber auch den Server administrieren. Das bedeutet unter anderem die Sicherheit und Aktualität zu gewährleisten, für einen stabilen Betrieb zu sorgen und alle Dienste regelmäßig zu prüfen.

Seit einiger Zeit hakt es allerdings, vor allem auch wegen meinem bisherigen Hoster. Denn 1&1 bietet zwar günstige vServer, hat aber leider auch einen schlechten Support sowie einige Servereinstellungen, welche einen zuverlässigen Betrieb erschweren (wie das viel zu niedrig angesetzte Prozesslimit, welches nicht einmal ausreicht, um einen Apache-Webserver ordentlich betreiben zu können). Abgesehen davon wurde ich in der Vergangenheit auch nicht über eine Umstellung der Paketquellen informiert (wodurch der Server mehrere Tage schutzlos lief), die OpenSSL-Lücke Heartbleed wurde erst Wochen später bekanntgegeben (nachdem es für mich bereits ein alter Hut war, wie man so schön sagt) und abgesehen von der latenten fachlichen Inkompetenz des Tech-Supports bietet man mir auch keine Möglichkeit an, auf ein aktuelles Betriebssystem zu aktualisieren. Willkommen in der Hölle.

Für mich war also klar: Ein neuer Hoster muss her!

Hoster gesucht…

Meine Auswahlkriterien waren relativ simpel:

  • Ubuntu 14.04 LTS als Betriebssystem, da es im Gegensatz zum bisher verwendetem Debian einen gut definierten Supportzeitraum bietet
  • Lighttpd als Webserver, kein Apache
  • Ca. 300GB/Monat Traffic inklusive, Bedarf steigend
  • E-Mail-Service (wer will bzw. kann schon einen eigenen Mailserver hosten?)
  • IPv4 und IPv6 Adresse(n)

Letztlich hat es netcup.de in meine engere Auswahl geschafft und nach kurzer Rücksprache mit dem schnell reagierendem Support war der Server dann auch gleich gemietet.

Passwörter ändern

Bevor man sich überhaupt an seinen neuen Server heranwagt sollte man sämtliche Passwörter ändern. Und damit meine ich wirklich jedes einzelne Passwort! Zudem sollte man für jeden Zugang ein anderes Passwort verwenden, aber das sollte sowieso klar sein.

Minimalbetriebssystem installieren

Auch wenn bei jedem vServer bereits ein Betriebssystem vorinstalliert ist, gilt: Neu installieren!

Auf den vorinstallierten Betriebssystemen laufen gerne Dienste, die man eigentlich nicht braucht. Daher sollte man immer auf eine Minimalinstallation zurückgreifen, welche lediglich einen SSH-Daemon mitbringt. Den Rest installiert und konfiguriert man später. Ich habe mich, vor allem wegen des garantiertem Supportzeitraumes, für Ubuntu 14.04 LTS entschieden. Das Betriebssystem wird für Server 5 Jahre lang unterstützt und bietet im Gegensatz zu Debian (welches ich bisher verwendet habe) die Möglichkeit, Ausfallzeiten (beispielsweise wegen Upgrades) durch bessere Planbarkeit zu minimieren.

Nutzer hinzufügen

Nachdem man ein minimales Betriebssystem installiert hat, kann man sich via SSH als root am Server anmelden:

$ ssh root@example.org

Aus Sicherheitsgründen erlaubt man weder einen root-Login noch arbeitet man direkt als root, weshalb ich empfehle als Erstes einen neuen Nutzer anzulegen:

# adduser username

Das entsprechende Homeverzeichnis wird automatisch erzeugt. Damit unser Nutzer auch administrative Tätigkeiten durchführen kann fügt man diesen noch der Gruppe sudo hinzu:

# usermod -aG sudo username

Anschließend probiert man in einem weiteren Terminal aus, ob man sich via SSH als Nutzer anmelden und via sudo -i root-Rechte erlangen kann:

$ ssh username@example.org
$ sudo -i
[sudo] password for username:
#

Sollte das nicht funktionieren muss man womöglich noch mittels visudo die Gruppe sudo freischalten, damit jeder Benutzer in dieser Gruppe root-Rechte erlangen kann. Wenn dies schließlich funktioniert, sperrt man den root-Account:

$ sudo passwd -l root

Damit kann man sich immerhin nicht mehr als root anmelden. Der nächste Schritt befasst sich damit, wie man SSH entsprechend absichert.

SSH absichern

Der SSH-Login via Passwort ist zwar nicht direkt unsicher, birgt aber doch gewisse Gefahren. Es gibt allerdings, dank asymmetrischer Verschlüsselung, die Möglichkeit auf Public-Key-Verfahren zu setzen. Man generiert sich also lokal ein Schlüsselpaar und lädt anschließend den öffentlichen Schlüssel (Public Key) auf den Server. Bei der Generierung empfehle ich einen sinnvollen Namen zu vergeben (im Beispiel serverlogin genannt):

$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/server_login.pub username@example.org

Anschließend kann man sich mit dem privaten Schlüssel am Server anmelden:

$ ssh username@example.org

Erfolgt der Login nun via Schlüssel, d.h. die Eingabe des Passwortes für den Server entfällt, kann man dies nun auch fest als Login-Methode vorgeben. In der /etc/ssh/sshdconfig muss man dazu die entsprechenden Optionen setzen (Ausgabe auf die wesentlichen Punkte gekürzt):

[…]
PermitRootLogin no
[…]
PasswordAuthentication no
[…]

Und anschließend den SSH-Daemon neu starten:

# service sshd restart

Sicherheitshalber sollte man nun noch einmal probieren, ob der Zugang via Public-Key-Verfahren funktioniert. Wenn das nicht der Fall sein sollte gilt es, nochmals alle Optionen zu überprüfen.

Updates, Installationen und Konfigurationen

Nachdem der Server grundlegend abgesichert ist kann man damit beginnen, den Server einzurichten. Zu allererst sollte man natürlich etwaige Updates einspielen:

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

Da bei mir der Kernel aktualisiert wurde folgte kurz darauf auch ein erster, im Vergleich zu 1&1 ungewohnt schneller, Neustart des Systems. Anschließend kann man die gewünschten Dienste installieren und damit anfangen, diese zu konfigurieren. In meinem Fall bedeutet das lediglich die Installation von lighttpd sowie diversen Hilfsprogrammen wie git, tree, htop und screen. Zudem lege ich in den globalen Konfigurationsdateien wie der /etc/bash.bashrc für mich passende Optionen fest. Was man an dieser Stelle alles machen muss bzw. machen will ist natürlich jedem selbst überlassen und kann auch nur ansatzweise in diesem Artikel angesprochen werden, die entsprechenden manpages helfen in diesem Falle weiter.

Routinearbeiten

Ein Server will natürlich auch gepflegt werden. Nachdem alles installiert, konfiguriert und auf den aktuellsten Stand gebracht wurde kann man sich damit befassen, was in Zukunft alles an Arbeit anfällt. Das bedeutet unter anderem:

  • Mindestens täglich Updates einspielen
  • Regelmäßig Backups anfertigen
  • In annehmbaren Intervallen die Logdateien auf Auffälligkeiten untersuchen
  • Wiederkehrend den Zustand des Server begutachten

Man darf nicht vergessen, dass man für den Server verantwortlich ist: Eine ausgenutzte Sicherheitslücke, ein fehlkonfigurierter Dienst und schon könnte es ziemlich schnell ziemlich teuer werden.

Fazit

Obwohl ich zum jetzigen Zeitpunkt mit der Migration des Servers noch nicht komplett fertig bin so lässt zumindest der subjektive Eindruck des neuen Hosters meinen alten Hoster ganz schön alt aussehen. Der Server lässt sich nun endlich auch so betreiben, wie ich es will, und vor allem mit einem aktuellen Betriebssystemen und aktueller Software. Hätte ich den Schritt zu einem anderen Hoster schon früher gewagt, so wäre zum einen die Migration leichter, zum anderen hätte ich mir einiges Stress und schlaflosen Nächten ersparen können.