x

Einloggen

Hast du noch keinen Account? Jetzt registrieren!

Grundlegendes um *nix-Webserver sicherer zu machen

Webserver SecurityDie Anleitung ist nummeriert, jedoch nicht nach Wichtigkeit und man kann keinen Punkt vernachlässigen und keinen als allerwichtigsten hervorheben. Es ist auch nicht als schrittweise Anleitung zu verstehen, sondern nur eine Auflistung von wichtige Regeln.

1. Anleitungen nicht blind folgen
Niemals, wirklich niemals tut das! Befolgt keine Anleitung, bei der ihr nicht jeden Schritt und seine Folgen versteht. Das gilt sowohl für Internetseiten (Bücher und andere Quellen) und ganz besonders für Ratschläge in Internetforen (erinnert ihr euch noch an den berühmten Einzeiler in Perl?). Selbst wenn ihr den Webserver nach einer tollen Anleitung von den Apache-Entwicklern selbst einstellt oder den Systemkern nach der Anleitung von Linus Torvalds kompiliert. Vergesst nie, dass Anleitungen von Menschen geschrieben werden, und jeder Mensch macht mal Fehler, niemand ist frei davon und jeder macht mal einen Typo, der manchmal große Konsequenzen nach sich ziehen kann. Deshalb, falls ihr etwas in der Anleitung nicht versteht, dann setzt euch erstmal damit auseinander, bis ihr das versteht und erst dann könnt ihr die verwenden. Im Prinzip sollte man, wenn man diesen Punkt nicht befolgt, die Finger von IT lassen. 

2. Netzwerkverbindung mit einem entfernten Gerät (SSH)
  • Möglichst einen ungewöhnlichen Port für SSH auswählen, das schützt uns zwar nicht vor einem Hacker, der unseren Server fest im Visier hat, jedoch werden wir somit einen Haufen von Bots los. Somit können wir unsere Logs besser lesen und falls mal was passiert nach der entsprechenden Zeile im Log suchen. Falls ihr an Paranoia leidet, dann kann man auch sogenanntes Portknocking einstellen (dabei wird der SSH-Port immer geschlossen und öffnet nur, wenn man vorher an einem anderen Port anklopft). Falls eure Paranoia nicht heilbar ist, dann könnt ihr auch eine ganze Reihe von Ports einstellen, bei denen man erstmal anklopfen muss.
  • Root-Login abstellen (komischerweise ist Root-Login immer noch sehr oft in den Standarteinstellungen erlaubt).
  • Eine Liste an Benutzern erstellen, die sich auf unserem Server einloggen können.
  • Einen Filter einstellen, welcher nach einer bestimmten Anzahl von Fehlversuchen (in der Größenordnung von 5) die IP bannt, z.B. fail2ban
  • Optional, da nicht immer möglich, kein Login über ein Passwort, sondern nur über Schlüssel-Authentifizierung.

3. Der eigentliche Webserver

  • Als Webserver sollte man hauptsächlich apache oder apache+nginx verwenden. Nur nginx sollte eher die Ausnahme sein. Eine noch größere Ausnahme sind lighttpd, cherokee usw. 
  • Mit open_basedir arbeiten (viele schalten das einfach ab, da sie damit nicht zurechtkommen, weil mal eine Fehlermeldung von open_basedir kommt und man sich damit nicht auseinander setzen will).
  • Den Zugang zu den wichtigen Objekten (wenn man diese den anderen Nutzern nicht zugänglich machen muss) über IP (oder Passwörter) regeln. Das geht mittels .htaccess (bei apache) und mit Anweisungen von limit_except (bei nginx). Zu einigen Sachen (zum Beispiel .htaccess) sollte man den Zugang übers Internet komplett untersagen.
  • Das benutzte Betriebssystem nicht anzeigen lassen, das geht bei apache mittels ServerSignature und ServerTokens und bei nginx mit server_tokens off.
  • In php.ini gibt es ebenfalls die Möglichkeit die anzeigten Informationen zu begrenzen.
  • Außerdem für die Sicherheit gefährlichen Funktionen bei php.ini abstellen (exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source usw.).

4. Das Betriebssystem aktualisieren

Rechtzeitig das Betriebssystem zu aktualisieren ist überaus wichtig. Zudem wärs hilfreich einen Newsletter über mögliche Sicherheitslücken zu abonnieren, damit man immer auf dem neusten Stand ist. Wobei dieser Punkt sich nicht nur auf das installierte *nix-Betriebssystem bezieht, sondern natürlich auch auf das benutzte CMS.

5. Rechte
Vergebt niemals unbeschränkte Rechte (777) für CMS-Dateien (übrigens, braucht man eigentlich fast nie 777-Rechte). Das ist komplett sinnlos, auch wenn noch so viele Anfragen von einigen Möchtegern-Programmierern kommen. Auf dem PHP-Hosting reichen Rechte nach Schema 644 für Dateien und 755 für Ordner. Laufwerke, auf denen die Dateien zu Internetseiten gespeichert sind sollten mit noexec gemountet werden (hint: find /path/to/dir -type f -exec chmod 644 {} \;). Es ist allgemein auch wichtig genau zu verstehen, welche Datei welche Ausführrechte benötigt, oder eben nicht.

6. Monitoring
Man sollte Monitoring so einstellen, dass man benachrichtigt wird, falls etwas ungewöhnliches auf dem Server stattfindet (ich meine damit falls etwas die Norm übersteigt, die man vorher selbst eingestellt hat). Perfekt dafür geeignet ist zum Beispiel Munin (lässt sich einfach einstellen, viele Funktionen und grafisch ebenfalls sehr ansprechend) CSF + LFD meldet automatisch Brute-Force-Attacken, was ebenfalls oft hilfreich gegen einige Hacker ist.

7. (last but not least) Alle nicht benutzten Ports mittels iptables für Fernzugriffe blockieren.
Normalerweise reicht es Ports für SSH + 80 und 443 für Webserver offen zu lassen, sowie ein Port für Monitoring. Das wars eigentlich schon. FTP fehlt nicht aus Versehen in meiner Auflistung, da es meiner Meinung nach nicht sicher ist, es wäre besser für Austausch von Daten SCP zu verwenden. Falls der Benutzer Shell nicht braucht, dann sollte man das ebenfalls abschalten, dabei das Kopieren von Dateien mittels SSH erlauben.

So, natürlich darf man nicht vergessen, dass man sich bessere Passwörter als 123456 und qwerty einfallen lassen muss. Es gibt ein ausgezeichnetes Programm apg womit man sich ausgefallene Passwörter einfallen lassen kann:
$ apg -t -q -n 2
dickluer (dick-luer)
JicNeut3 (Jic-Neut-THREE)
$ apg -t -q -m 12 -a 1 -n 2
@%p-a^b`kI>R
dKYeK{7)E`Es 
Das deckt natürlich das Thema Sicherheit nicht komplett ab, sondern eher als Anfang gedacht. Wenn ihr nur diese Punkte befolgt, dann wird es um einiges schwieriger an euren Server ranzukommen.
2834 Mal gelesen
+2
16. Mär 2011, 19:30

Kommentare

(0)
RSS

Kommentieren

Fett Kursiv Unterstrichen Durchgestrichen   Link Zitieren Code
Ich bin mit den Nutzungsbedingungen einverstanden.
Zukünftige Kommentare zu diesem Beitrag abonnieren (abbestellbar).
 
Bitte klicke jetzt auf den Bestätigungslink in deiner E-Mail.