Wie lässt sich ein Server härten? – Teil 2

Wer einen Server betreibt, der der Öffentlichkeit zugänglich gemacht wird, hat es nicht immer leicht mit der Sicherheit. Der kleinste Fehler kann dazu führen, dass die Maschine kompromitiert wird und Daten von Kunden oder eigene Daten gestohlen werden können. Hin und wieder werden diese Server weiter für andere kriminelle Zwecke missbraucht. Meistens ohne, dass der Betreiber dies bemerkt. Also müssen Schutzmechanismen her, um die Anwendungen und das Betriebssystem zu schützen. Im Allgemeinen ist dies bekannt als Serverhärtung oder Serverhardening.

Dieser Artikel ist Teil einer Serie, die laufend veröffentlicht wird. Fett gedruckte Einträge in der To-Do Liste werden im Artikel behandelt. In diesem Artikel geht es um nicht benötigte Dienste und um die Fernwartung.

To-Do Liste

Damit ihr das Problem kurzerhand angehen könnt kommt hier eine schnelle To-Do Liste. Im Nachgang werden alle Punkte detaillierter erläutert.

  • Server über 1 bis mehrere DMZ betreiben
  • Nur benötigte Rollen und Features installieren
  • Nicht benötigte Dienste beenden
  • Remotecontrol nur über interne Netzwerke erlauben
  • Unbenutzte Ports am Server schließen
  • Hostfirewall zusätzlich einsetzen
  • Software so aktuell wie möglich halten

Nicht benötigte Dienste beenden

Windows

Unter Windows ist es ein leichtes, wie folgendes Video beweist:

Linux

Hier kommt es stark auf die Distribution an. Während unter Ubuntu folgendes machbar ist:

  • service stop <Name des Dienstes>

Kann es sein, dass andere Distributionen anders reagieren. Ich möchte nicht jeden Linuxgeschmack hier auflisten, weswegen ich dich an dieser Stelle weiterleiten möchte:

Möchtest du hingegen lediglich einen laufenden Prozess manuell beenden, so sind folgende Kommandos sicher nützlich. Sie funktionieren in jedem Linux: Um einen Prozess, der einen Dienst betreibt, den du nicht möchtest anzuhalten, gibt es auch einen eleganten Weg. Zuerst musst du genau wissen welche Prozess ID dein Ziel ist:

  • pidof <Name des Prozesses>

Falls das nicht geht oder hilft ist folgender Klassiker auch möglich:

  • ps aux | grep <Name des Prozesses>

Nun kann der Prozess beendet werden:

  • sudo kill <Prozess-ID>

Für hartnäckige Prozesse hilft das hier, aber Vorsicht!

  • sudo kill -9 <Prozess-ID>

Blog aktiv unterstützen

Remotecontrol nur über interne Netzwerke erlauben

Remotecontrol nur intern

Windows

Unter Windows gibt es mehrere Möglichkeiten die RDP Sitzungen von außen zu Unterbinden. Am einfachsten erfolgt dies über die Firewalls. So sperrt man also den dafür nötigen Port 3389 einfach. Dadurch kann kein System vor der Firewall auf die RDP Schnittstelle in Windows zugreifen. Diese Schritte kann ich leider nicht im Detail beschreiben, da jede Firewall andere Konfigurationswege hat. Folgendes ist natürlich eine Wiederholung des Videos weiter oben, aber der Vollständigkeit halber, möchte ich auch eine gezielte Anleitung dazu bereitstellen.

Eine weitere, gern auch zusätzliche, Methode wäre es den Dienst zu deaktivieren, der am Port 3389 lauscht. Das wird in Windows über die Diensteverwaltung geregelt. Dort müsst ihr den Dienst: Remotedesktopdienste finden und euch anschauen, wie dieser konfiguriert ist. Bei mir sieht das wie folgt aus:

Remotedesktopdienst

In meinem Fall ist der Status auf Wird ausgeführt. Dadurch weiß ich, dass eine RDP Verbindung zu meinem Rechner möglich wäre. Der Starttyp hingegen steht auf Manuell. Dies bedeutet, dass Windows den Dienst normalerweise nicht bei Hochfahren startet. Ich muss ihn selbst vorher starten. Aber um den Dienst zu deaktiveren muss mit einem Rechtsklick das Eigenschaftenfenster des Dienstes aufgerufen werden:

2016-06-12 14_01_29-Dienste

In diesem Fenster kann man nun auswählen wie der Dienst gestartet werden soll. Am besten man stellt den Dienst auf Deaktiviert. Dadurch bleibt er ausgeschaltet. Um ihn direkt zu beenden, falls er denn läuft, reicht auch ein Klick auf den Button Beenden. Mit Übernehmen muss nur noch bestätigt werden, und schon ist der Dienst deaktiviert.

2016-06-12 14_02_01-Dienste

Linux

Unter Linux hat man in der Regel über den Port 22 eine Fernsteuerungsmöglichkeit. Über diesen Port läuft nämlich meistens der SSH Server. Das SSH Protokoll ist in allen Linuxdistributionen sehr beliebt und wird häufig eingesetzt. Eine Fernsteuerung via SSH lässt sich ebenso wie bei Windows (RDP) über die Firewall einstellen. Lässt die externe Firewall Pakete an Port 22 nicht durch, bleiben die Server dahinter verschont. Lokal kann man den Port aber auch sperren:

  • sudo -s
  • iptables -A INPUT -i eth0 -p tcp –destination-port 22 -s 192.168.11.0/24 -j DROP
  • service iptables save

Mein gewähltes Beispiel setzt sich aus folgenden Elementen zusammen:

  • A INPUT: Bedeutet, dass es um eingehenden Traffic handelt
  • -i eth0: Dies bezeichnet das Interface. Ein Server kann mehrere Netzwerkkarten haben. Mit dem Befehl ifconfig bekommt ihr alle heraus
  • -p tcp: Wir wollen, dass die Regel für das TCP Protokoll greift
  • –destination-port 22: Wir wollen alle Pakete blockieren, die als Zielport die 22 haben
  • -s 192.168.11.0/24: Damit sagen wir, dass die Quelle (source) der Pakete das besagte Netz ist. Damit schließen wir zum Beispiel die DMZ Systeme aus
  • -j DROP: Die letzliche Aktion, die durchgeführt wird, wenn alle vorherigen Filter etwas erkennen. In unserem Fall, lassen wir die Pakete droppen, also leiten diese nicht weiter.

Edit: Nachtrag von Markus (siehe Komentar)

Die Verwendung von SSH an sich lässt sich auch mit der Einrichtung von Zertifikaten erreichen. Dabei wird zuerst ein Schlüsselpaar erzeugt aus öffentlichem und privatem Schlüssel. Den privaten Schlüssel behält der Client, denn damit kann er Daten entschlüsseln. Der öffentliche wird auf alle Systeme gepusht, die mitkonfiguriert werden sollen. Nach erfolgreicher Konfiguration kann nun der Server, wenn er über SSH Daten an den Client sendet, diese zusätzlich so verschlüsseln, dass nur der passende Client die Daten lesen kann. Wie genau die Konfiguration aussehen kann findet ihr hier:

Weiterführende Artikel

Bücher zum Thema

 

Beitragsbild: Cortana scripting language verändert, von Christiaan ColenCC BY-SA 2.0

Artikel teilen:

2 Gedanken zu „Wie lässt sich ein Server härten? – Teil 2

  • 12. Juni 2016 um 14:43
    Permalink

    Hallo André, vielen Dank für deinen zweiten Teil. Da man irgendwie ja den Server per Remote administrieren muss, möchte ich noch erwähnen, dass man ssh unter Linux auch gut absichern kann, wenn man den Standardport ändert und ein Zertifikat verwendet. Ich habe Anfangs ssh mit dem Standardport und ohne Zertifikat betrieben. Hier konnte man sehr stark die täglichen Angriffe im Logfile sehen. Seit ich aber diese Dinge geändert habe ist es viel besser geworden. Ein Grundsatz auf dem Server ist prinzipiell immer: Je weniger läuft umso weniger Angriffsfläche bietet man. Genau das ist ja auch ein Grund, warum man in der Regel keine GUI auf einen Server im Internet hat. Microsoft drängt ja auch immer mehr darauf, dass man einen Windows Server ohne GUI installiert.

    Antwort
    • 18. Juni 2016 um 00:43
      Permalink

      Eine tolle Ergänzung Markus. Danke für den Kommentar. Ich werde mich schlau machen und den Beitrag erweitern :-)

      Antwort

Kommentar verfassen