Fragen zu Debian 4.0 Hardening

Hallo zusammen.

Ich bin neu hier auf dem Board, hab natürlich auch die Suchfunktion benutzt und Google ist mein bester Freund. :P

Zum Thema: Ich beschäftige mich schon seit einigen Monaten mit Linux (Debian 4.0 und Ubuntu 8.03) und habe mir nun einen eigenen Root-Server zugelegt (steht also in einem RZ und ist mit 100mbit angebunden).

Er soll für folgende Sachen genutzt werden:
- 6 Webpräsenzen (u.a. 2 Communities mit etwa 150 Usern) samt zugehörigen Datenbanken sollen gehostet werden
- Mailserver für etwa 20-30 User
- 60 Slot-TS-Server

Ich habe mir natürlich vorher Gedanken um die Administration und Sicherheit gemacht und mich auch schon eingelesen und selber zu Hause rumprobiert. Nun gibt es aber leider unendlich viel Informationen (gerade im Bereich Sicherheit)... in ungefähr 180 Sprachen und ich fühl mich leicht überfordert zu differenzieren was nun wichtig ist und was nicht.

Apache, PHP, MySQL habe ich schon eingerichtet. Damit konnte ich zuhause etwas mehr herumexperimentieren und ich denk mal, dass meine Konfiguration OK ist.

Was habe ich bereits getan:
- Unnötige Dienste abgeschaltet bzw deinstalliert
- Apache-, MySQL- und PHP-Config angepasst (habe mich an diverse Anleitungen im Netz gehalten und die Docs und Manpages gelesen.. zumindest teilweise :P )
- vsftpd so eingerichtet, dass nur bestimmte User aus vsftpd.user_list Zugriff haben und sie werden auch in ihr Home-Verzeichnis eingesperrt
- SSH auf einen anderen Port gelegt (wird mit den Standard-Suchmuster von Nmap nicht mehr gelistet) und ich habe nur einem speziellen User den Zugriff erlaubt (nicht root)
- Postfix eingerichtet (scheint zumindest laut abuse.net kein Relaying möglich zu sein)
- Backup-Lösung (Bashscript und Tarball, der täglich bei mir zuhause auf den FTP-Server geladen wird)

In den nächsten Tagen wollte ich folgende Punkte noch umsetzen:
- Quotas
- File-Integrity-Check

Und gerade im Moment kämpfe ich mit Logrotate und mit meinem iptables-Script. Das will beides nicht so wie es soll, aber das is'n anderes Thema... -_-


Meine konkreten Fragen sind nun:
1.) Was sollte man noch unbedingt absichern bzw beachten?
2.) Bzw besser gefragt, gegen was sollte man sich noch alles schützen?
3.) Welche Tipps oder persönliche Erfahrungen könnt ihr einem Server-Admin-Neuling geben?

Ich möchte noch hinzufügen, dass sämtliche Webpräsenzen private Projekte sind und der Server keine geschäftskritischen Daten verarbeiten oder bereitstellen soll. Sonst würde ich mich da garnicht ranwagen. Ich glaube aber dass ich mittlerweile genug praktische Erfahrung für einen 1. "kleinen" RootServer habe.
Nichts desto Trotz bin ich mir aber der Verantwortung bewusst und aus diesem Grund will ich mir hier ja weiterführende Infos holen um meinen Wissensstand zu erweitern.

Besten Dank im voraus. ;)
Grüße Zipper
 
nuja, im grossen und ganzen sieht das nach einem anständigen plan aus. zu den einzelnen punkten würde ich nur kleinigkeiten hinzufügen:

- ssh nur mit key zulassen (http://www.schlittermann.de/doc/ssh.html)
- postfix nochmal checken, ist aber per debian default kein relay
- backups nicht per ftp, sondern rsync/scp machen

ich empfehle den leuten gerne fail2ban. diese software sperrt eine ip über iptables, wenn sie an einem konfigurierten dienst (ssh, ftp, ...) in einer gewissen zeit eine bestimmte anzahl an fehllogins verursacht.

prüf regelmässig auf rootkits, halt dein etch (oder lenny) aktuell und lies security mailinglisten (von debian) oder die security webseite (http://www.debian.org/security/) regelmässig.

mehr fällt mir auf anhieb nicht ein :)
 
Würde den FTP Server nicht laufen lassen.
Daten kannst du auch bequem per sftp, welches
per ssh getunnelt wird.
Je mehr Dienste desto mehr Angriffsfläche.
 
- mod_evasive in Apache einbauen um DoS-Angriffen entgegen wirken zu können
- die HTTP-Methoden TRACE und TRACK im Webserver deaktivieren um Crosssite-Scripting und Crosssite-Tracing zu unterbinden bzw. zu erschweren
- Apache in eine chroot-Umgebung einsperren
- MySQL nur auf localhost laufen lassen
- vsftpd so konfigurieren, dass nur SFTP möglich ist und kein "Klartext-FTP"
- rkhunter einrichten und mindestens einmal täglich laufen lassen
- MD5-Summen aller laufenden Binaries und der von ihnen geladenen Shared-Objects erstellen, diese offline aufbewahren und nur auf dem Server einbinden, wenn die Dateien (einmal täglich) geprüft werden (im Optimalfall eine zweite Festplatte, die nur bei Bedarf gemountet wird)
- sicheren Zugang für den Mailserver einrichten (SMTPS, IMAPS, POP3S)
- Modulunterstützung aus dem Kernel entfernen und alle notwendigen Treiber fest einbinden (verhindert LKM-Trojaner/Keylogger)
- tmp-Partition read-only mounten
- Stack-Protector im Kernel nachrüsten
- Passwort-Authentifizierung für SSH verbieten und Key-Auth verwenden
- grundlegendes procfs-Tuning für's Netzwerk einstellen
Code:
	### PROC MANIPULATION ###
	# auf Broadcast-Pings nicht antworten
	echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
	# halt die Klappe bei komischen ICMP Nachrichten
	echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
	# Kicke den ganzen IP Spoofing Shit
	# (Source-Validierung anschalten)
	echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
	# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
	echo 61 > /proc/sys/net/ipv4/ip_default_ttl
	# sende RST-Pakete wenn der Buffer voll ist
	echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
	# warte max. 30 secs auf ein FIN/ACK
	echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
	# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
	# Default ist 6
	echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
	# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
	# Default ist 6
	echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
- wget, lynx, links und curl umbenennen, sofern installiert
- bastille verwenden
- harden installieren und korrekt einstellen

So... das sind erstmal die grundlegenden Sachen. Die Feinheiten überlass ich mal deiner Recherche, z.B. unter http://www.debian.org/doc/manuals/securing-debian-howto/

Nachtrag: Im übrigen wird SFTP nicht über SSH getunnelt, sondern stellt ein extra Protokoll dar, das im SSH-Server als Subsystem integriert ist. Kann aber auch mit vsftp verwendet werden, soviel ich weiss und das wiederum ist wesentlich sicherer, da man die User in einem Ordner bzw. einer chroot-Umgebung einsperren kann.
 
Danke für die netten und ausführlichen Antworten und entschuldigt bitte, dass ich mich erst jetzt wieder zu Wort melde. Ich hatte die letzten Tage beruflich und privat sehr viel um die Ohren.

Wie dem auch sei, ich hab mich gestern mal wieder ans Werk gemacht und einige Vorschläge direkt umgesetzt. Nun sind aber ein paar weitere Fragen aufgetaucht, worauf ich so direkt keine Antwort im Netz gefunden habe.

@bitmuncher:
- tmp-Partition read-only mounten
Ich verstehe nicht so ganz wie das funktionieren soll. Ist die tmp-Partition nicht dafür da, dass temporäre Dateien darauf abgelegt werden können? Führt das nicht zu Problemen? ?(
Momentan habe ich meine tmp-Partition so eingebunden:
/dev/md4 /tmp ext3 defaults,usrquota,nodev,nosuid,noexec 0 0

Und zu deinem Vorschlag Apache in eine Chroot-Umgebung zu packen, habe ich mir folgende Gedanken gemacht:
Ich habe 2 versch. Wege entdeckt, Apache zu "chrooten": mit mod_chroot und mit makejail. Wobei die Vorgehensweise mit 'makejail' veraltet zu sein scheint, oder habe ich da etwas übersehen?
Außerdem sollen noch 2 weitere User FTP- und DB-Zugriff bekommen, da sie die versch. Webprojekte verwalten. Wenn ich nun Apache in das Verzeichnis /var/www/ sperre, müsste ich für die einzelnen Domains Unterordner anlegen und in den vhost-Anweisungen den DocumentRoot jeweils anpassen.
Die 2 FTP-User werden aber auch in ihr Home-Verzeichnis eingesperrt. Könnte ich nun ohne Probleme die Home-Verzeichnisse in der passwd abändern, sodass sie auf die Ordner unterhalb von /var/www/ verweisen? Das wäre die einzigste Möglichkeit, die mir einfallen würde ohne mit Hard- oder SymLinks zu arbeiten (was ja sicherheitstechnische Probleme aufgrund der FileHandler bereiten könnte).
Desweiteren stellt sich mir auch die Frage wie der DB-Zugriff funktionieren soll... Wenn ich das richtig verstanden habe, können Anwendungen über das Loopback-Device mit dem MySQL-Server kommunizieren (also einfach in den Anwendungen statt localhost die IP 127.0.0.1 angeben, oder?). Wie sieht das von der Sicherheit her aus?
Ich möchte den 2 Usern aber noch eine phpmyadmin-Oberfläche zur Verfügung stellen. Nun ist das Problem, dass unter Debian phpmyadmin recht verstreut ist. Ein Teil liegt in /etc/phpmyadmin, ein paar andere Sachen in /var/lib/phpmyadmin und der Rest unter /usr/share/phpmyadmin und /usr/share/doc/phpmyadmin.
Gibt es eine Möglichkeit das sauber "umzubiegen" oder muss ich mir die Version von der phpmyadmin-Seite holen und in mein Chroot-Verzeichnis packen?

Meine letzte Frage wäre noch wie sinnvoll es ist, MySQL in ner Chroot-Umgebung laufen zu lassen?

Danke für eure Mühen und beste Grüße
Zipper
 
Original von Zipper
@bitmuncher:
- tmp-Partition read-only mounten
Ich verstehe nicht so ganz wie das funktionieren soll. Ist die tmp-Partition nicht dafür da, dass temporäre Dateien darauf abgelegt werden können? Führt das nicht zu Problemen?
Sorry, mein Fehler. Meinte natürlich noexec. /usr sollte readonly sein und nur für Updates schreibbar gemountet werden.

Zum Apache:
Wenn FTP, SFTP und Webserver auf die gleichen Jails zugreifen müssen, solltest du von mod_chroot Abstand nehmen und einfach ein Jail für alle 3 Services nutzen.

Original von Zipper
Meine letzte Frage wäre noch wie sinnvoll es ist, MySQL in ner Chroot-Umgebung laufen zu lassen?

Garnicht und meiner Erfahrung nach auch recht problematisch einzurichten.
 
Danke für die Infos. Ich werd nun mal weiter recherchieren und dann versuchen das so um zu setzen. ;)

Grüße
Zipper
 
Zurück
Oben