Grundverständnis für Sicherheit
Sicherheit ist ein voranschreitender Prozess.

Darum ist es nicht ausreichend, ein System nach dem ersten Einrichten und Absichern sich selbst zu überlassen.

 
 

Allgemein

Ein regelmäßiger Blick auf die Systeme hilft maßgeblich zur Vermeidung von Risiken.. Dieser Artikel beschreibt im Folgenden einige Möglichkeiten, die man zur Absicherung des Servers durchführen kann oder sollte.

 

Passwörter

Je komplexer ein erstelltes Passwort, desto schwieriger ist die Überwindung. Wichtig für ein sicheres Passwort sind die folgenden Aspekte:

  • die Länge des Passwortes
  • die verwendeten Zeichen (Buchstaben, Sonderzeichen sowie Zahlen)
  • eine zufällige Zeichenkette, die auf keinen Zusammenhang zurückzuführen ist.

Ein einfaches Passwort wie zum Beispiel "Eistee" ist demnach sehr unsicher. Es gibt mehrere Möglichkeiten Passwörter zu überwinden. Die einfachste davon nennt sich Brute-Force-Attacke. Dabei wird versucht das Passwort durch systematisches und häufig wiederholtes Ausprobieren herauszufinden. Der Angriff auf ein solches Passwort wird häufig durch ein Wörterbuch unterstützt. Der so genannte Dictionary Attack versucht aus in einem Wörterbuch angegebenen Text-Bausteinen Passwörter zusammen zu setzen. Das oben erwähnte Passwort "Eistee" wäre somit ein sehr leichtes Ziel für einen solchen Angriff. Aus dem selben Grund sollten einschlägige Zeichenketten wie Datums- oder Zeitangaben nicht in Passwörtern verwendet werden.

 

SSH

Um ein Schlüsselpaar auf demjeniger Nutzerkonto anzulegen mit dem man gerade arbeitet, führt man folgenden Befehl aus:

ssh-keygen -t rsa

Daraufhin werden im Home-Verzeichnis des Nutzers zwei Dateien angelegt:

  • /home/NUTZER/.ssh/id_rsa : Beinhaltet den privaten Key, welcher nicht weitergegeben werden sollte.
  • /home/NUTZER/.ssh/id_rsa.pub : Beinhaltet den öffentlichen Key, den man auf anderen Systemen hinterlegt um die Authentifizierung zu ermöglichen.

Als alternatives Verschlüsselungsverfahren kann zum Beispiel auch DSA genutzt werden. Ein Unterschied zwischen den beiden Verschlüsselungsverfahren liegt im Rechenaufwand bei der Generierung sowie Überprüfung der Schlüssel. Da dieser Rechenaufwand auf heutigen Systemen zu vernachlässigen ist, hat sich das etwas sicherere RSA in der Verwendung durchgesetzt.

Der öffentliche Schlüssel wird auf den anderen Systemen in der Datei /home/NUTZER/.ssh/authorized_keys nach folgendem Muster angelegt:

ssh-rsa KEY NUTZER@HOSTNAME

NUTZER@HOSTNAME bezeichnet eine Zeichenkette, die dem Administrator die Zuordnung des Schlüssels zu einem Nutzer auf dem angegebenen Rechner vereinfachen soll.

 

Apache2

Um den Webserver Apache2 abzusichern bietet sich das Modul mod_security an. Dieses lässt sich schnell über die meisten Paketquellen installieren. In diesem Fall reicht ein

apt-get install libapache2-mod-security

Falls noch nicht automatisch nach der Installation geschehen, muss das Modul noch aktiviert und der Apache2 neu gestartet werden.

a2enmod mod-security /etc/init.d/apache2 restart

Danach kann das Modul über die Konfiguration des Webservers angesprochen werden. Alternativ kann auch eine eigene Konfigurationsdatei angelegt werden, welche über die Include-Funktion in die Konfiguration des Webservers geladen wird. Der für das Modul wichtige Abschnitt in der Konfiguration könnte beispielsweise so aussehen:

<IfModule mod_security.c>
SecFilterEngine On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off
SecFilterForceByteRange 0 255
SecAuditEngine RelevantOnly
SecAuditLog /var/log/apache2/audit_log
SecFilterDebugLog /var/log/apache2/modsec_debug_log
SecFilterDebugLevel 0
SecFilterScanPOST On
SecFilterDefaultAction "deny,log,status:500"
</IfModule>

Nachfolgend werden die einzelnen Punkte kurz erklärt.

SecFilterEngine On/Off

Aktivieren/Deaktivieren des Filters.

SecFilterCheckURLEncoding On/Off

Überprüft das Encoding spezieller Zeichen in der Browserzeile (%XY). Erlaubt für X und Y sind nur hexadezimale Werte 0-9 und A-F. Wird dieses nicht überprüft können Angreifer andere Zeichen nutzen um den Decoding-Algorithmus auszutricksen.

SecFilterCheckUnicodeEncoding Off

Standardmäßig deaktiviert. Es ist nur verwendbar, wenn das zu Grunde liegende System Unicode unterstützt.

SecFilterForceByteRange 0 255

Erlaubt es den Bereich der zu verwendenden Bytes anzugeben. Ermöglicht Stack-Overflow-Attacken abzuwehren, welche normalerweise einen beliebigen Binärinhalt verwenden. Standardmäßig sind alle Bytes(0-255) erlaubt.

SecAuditEngine RelevantOnly
SecAuditLog /var/log/apache2/audit_log

Um Angreifer zurückzuverfolgen reichen die Informationen aus dem Standard Log-File von Apache oft nicht aus. Aus diesem Grund ermöglicht mod-security ein detailierteres Logging welches durch die oben genannten Zeilen aktiviert wurde.

SecFilterDebugLog /var/log/apache2/modsec_debug_log
SecFilterDebugLevel 0

Ermöglicht das Loggen von Debuginformationen des Moduls. Das Loglevel kann zwischen null und drei eingestellt werden.

SecFilterScanPOST On

Überprüft das encoding der mittels Post übergebenen Werte. Ein entsprechender Filter könnte so aussehen:

SecFilterSelective HTTP_Content-Type 
  "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data;)"
SecFilterDefaultAction "deny,log,status:500"

Obwohl für jeden Filter eine eigene Aktion definierbar ist, welche bei Auslösen abgearbeitet werden soll, ist es empfehlenswert für alle Filter eine Standardaktion zu wählen. In diesem Fall wird bei einer erfolgreichen Filterung die Anfrage mit der Statusmeldung 500 abgelehnt.

 

PHP

PHP ist mittlerweile eine weit verbreitete Scriptsprache, die überwiegend in der Webentwicklung eingesetzt wird. Für PHP existiert ein Patch, der unter dem Namen Suhosin geführt wird. Der Patch implementiert eine Sicherungsschicht in PHP, die Lücken durch unsauberen PHP-Code abfangen kann. Suhosin setzt sich aus zwei Teilen zusammen. Die Extention bietet eine Erweiterung, die einige Schutzmechanismen implemeniert. Die Erweiterung kann meist aus den Paketquellen bezogen werden.

apt-get install php5-suhosin

Der zweite Teil besteht aus einem Patch, den man auf der unten angegebenen Webseite beziehen kann. Um diesen nutzen zu können muss PHP allerdings neu erstellt werden. Einige Distributoren liefern über die Paketquellen schon ein mit Suhosin gepatchtes PHP-Paket aus. Um Suhosin zu konfigurieren wird ebenfalls die Datei php.ini verwendet. Für die meisten Installationen reicht allerdings die Standardkonfiguration aus.

Weiterführendes Material:

 

Knockd

knockd ist eine Software, die Port-Türchen durch den Gebrauch einer "Parole" schützt. Um auf einen Port überhaupt Zugriff zu erhalten muss man das Port-Türchen erst durch knock öffnen lassen. Das geschieht mit dem Befehl

knock IP Sequenz

Alternativ zur IP kann natürlich auch der Domainname genutzt werden. Die Sequenz wurde im Zielrechner konfiguriert. Eine einfache Konfiguration des knockd auf einem Zielsystem könnte für den Port 22 (SSH) so aussehen:

[options]
logfile = /var/log/knockd.log

[opencloseSSH]
sequence      = 1234,5678,9101
seq_timeout   = 15
tcpflags      = syn
start_command = /sbin/iptables -A open -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout   = 10
stop_command  = /sbin/iptables -D open -s %IP% -p tcp --dport 22 -j ACCEPT

Global können die Verzeichnisse zum Konfigurationsfile, oder PID File definiert werden. Ebenso kann über

Interface =ethX

das zu verwendende Netzwerkinterface definiert werden. In dieser Konfiguration wurde die Sequenz zu "1234 5678 9101" definiert. Der Punkt wird nachher bei der Verwendung mit knock als Leerstelle interpretiert. Die Werte start_-und stop_command geben die auszuführenden Befehle an. In diesem Fall wird der Port 22 ent- bzw gesperrt.

Weitere Informationen und Beispielkonfigurationen unter:

 

fail2ban

Fail2ban ist ein in Python geschriebenes Intrusion Prevention System. Es nutzt ein manipulierbares Paketfiltersystem (z.B. iptables), um dynamisch Filter-Regeln hinzuzufügen. Somit ist es zum Beispiel möglich eine IP, von der schon einige fehlgeschlagene Loginversuche im log-File registriert wurden, erst gar nicht mehr zuzulassen. Dazu kann man eine Vorhaltezeit für diese Regel einstellen um diese IP nicht für immer vom System auszusperren.

Ein einfaches Konfigurationsbeispiel für den SSH Daemon könnte so aussehen:

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
banaction= iptables-multiport

Die einzelnen Code-Zeilen kurz erklärt:

enabled = true

Aktiviert Fail2ban für den Dienst. Alternativ steht enabled=false zu Verfügung.

port = ssh

ssh steht hier als Synonym für den Standardport auf dem der Dienst läuft (port = 22).

filter = sshd

Bestimmt den Filter, der zur Verarbeitung des log-Files genutzt werden soll.

logpath

Gibt den Pfad zur Log-Datei an.

maxretry

Gibt die Menge der Loginversuche an, bevor die IP-Adresse der eingehenden Verbindung über iptables gesperrt wird.

banaction

Gibt an, was im Falle eines Ban getan werden soll. In diesem Fall wird durch iptables-multiport die zu treffenden Ports für die IP gesperrt.

Weitere Informationen und Beispielkonfigurationen unter:

 

rkhunter

Selbst nach umfangreicher Absicherung eines Servers kann es dazu kommen, dass ein System kompromitiert wird und es einem Angreifer gelingt sich Zugriff zu verschadden. In diesem Fall helfen Tools wie rkhunter bei der Suche nach sogenannten Rootkits.

Installiert werden kann es aus den Paketquellen.

apt-get install rkhunter

Wie ein Virenscanner hat auch rkhunter eine known-bad-Hash-Datenbank, die regelmäßig mit folgendem Befehl aktualisiert werden sollte.

rkhunter --update

Die wichtigsten Parameter für rkhunter lauten:

  • -c : Führt einen gesamten System-Scan aus
  • --display-logfile : Zeigt einen zusammengefassten Report am Ende des Scans
  • --skip-keypress : Normalerweise werden die einzelne Scan-Abschnitten nicht von selbst durchlaufen, sondern müssen mit der Enter-Taste bestätigt werden. Mit diesem Parameter kann man das Verhalten unterbinden, was die Verwendung in automatischen Scripten ermöglicht.

Die Ausgabe von rkhunter findet man zudem in der Logdatei unter:

/var/log/rkhunter.log

Hier werden unter anderem auch Warnungen angezeigt. Zudem kommt rkhunter mit einer Konfigurationsdatei, welche unter

/etc/rkhunter.conf

abgelegt ist. In dieser lassen sich Ausnahmen im Sinne einer Whitelist anlegen. Diese werden dann bei einem erneuten Scan ausgeblendet.

 

Hotline
 
Hotline des Rechenzentrums

Fragen? Rufen Sie uns an!
Montag - Freitag 10:00 - 19:00 Uhr

+49 69 - 900 180 - 0

 
Aktionen & News
 

Dedizierte Supermicro Xeon Server - ab 70,00 Euro

Angebote

 

Zweiter Standort
 
Hotline des Rechenzentrums

Erfahren Sie mehr über unseren zweiten Standort in der Hanauer Landstrasse in Frankfurt am Main.

mehr erfahren

Zertifizierungen
 
TüV geprüftes Rechenzentrum
ISO 27001 zertifiziertes Rechenzentrum
ISO 9001 zertifiziertes Rechenzentrum


Knowledge Base
 

Hilfreiche Artikel zum Thema Netzwerk, Server & IT.

mehr erfahren


Galerie
 

Sehen Sie sich in einem virtuellen Rundgang in unserem Rechenzentrum um:

Niederspannungshauptverteilung Unterbrechungsfreie Strom Versorgung
Kaltwassererzeuger Bereitstellung individueller SAT-Dienstleistungen


100% Ökostrom
 
100% Öko-Strom