Hallöchen,
Da ich in letzter Zeit immer mal wieder lese, dass Server gesperrt werden wegen DDos oder weil sich jemand Zugang zum Server verschafft hat. Habe ich mir gedacht, ich schreibe mal ein kleines Howto, wie man seinen Server ein kleines bisschen sicherer macht.
Dieses Howto ist natürlich nicht das Maß aller Dinge und umfasst nicht einen 100%igen Schutz, aber ich denke, dass es ein guter Anfang ist.
Getestet ist das ganze unter Ubuntu 8.04. Wer ein anderes Betriebssystem hat, muss das ganze dann auf seine jeweilige Distribution übertragen, was aber nicht weiter schwer sein dürfte.
Ich gehe hier auf drei Sicherungspunkte ein:
Sicherung des Apache Webserver
Um den Apache Webserverdienst gegen DDos zu schützen und ein bisschen sicherer zu machen bietet sich ein ganz bestimmtes Modul des Apache an:
mod_evasive
Die Installation ist denkbar einfach:
fertig
Nun muss man noch die Konfiguration vornehmen, dazu fügt man folgenden Code in die /etc/apache2/apache2.conf ein:
Durch die Kommentierung kann man leicht entnehmen welche Einstellungen bei dem jeweiligen Punkt vorgenommen werden müssen. Die richtigen Einstellungen müsst ihr für euer System selbst finden.
Jetzt noch ein: /etc/init.d/apache2 force-reload
und schon ist der Apache ein kleines bisschen sicherer.
Anmerkung: Ganz interessant ist auch noch der Befehl: DOSSystemCommand, damit könnte man theoretisch die IP an Iptables weitergeben und gleich blocken lassen, allerdings hab ich hierzu noch nicht wirklich was gefunden.
Sicherung von SSH
Auch immer sehr begerht: BruteForce Attaken auf den SSH Dienst eines Servers. Hier gibt es viele Möglichkeiten solche Attaken aufzuspüren und zu neutralisieren. Ich habe mich für den Einsatz von DenyHosts entschieden. Warum wird im Punkt 3 klar.
Die Installation von DenyHosts ist ebenfalls denkbar einfach unter Ubuntu:
Kurz warten...FERTIG.
Jetzt müssen wir noch ein bisschen die Konfiguration bearbeiten:
Hier obliegt es wieder dem Sysadmin sich einen Überblick über die Ausreichend kommentierten Optionen zu verschaffen, sehr wichtig ist:
Hierbei sei angemerkt, dass ich ein ziemlich paranoider Admin bin, und dass deswegen jeder der sich 3 mal vertippt gleich vom System geblockt wird. Sollte man sich oft vertippen dann sollte man die Werte vielleicht etwas erhöhen. Dann haben wir noch eingestellt, dass sich Denyhosts jede Stunde mit dem Denyhosts Server abgleicht und aus dem Internet eine Liste mit IPs holt, die bereits schon negativ in anderen Systemen aufgefallen sind. Diese Liste wird dann automatisch in /etc/hosts.deny eingetragen.
Also dann starten wir DenyHosts mal:
Und schon werden alle potetiellen Angreifer vom System ausgeschlossen.
Aussperren eines Angreifers
Nun zu dem Punkt, warum wir auf DenyHosts setzen und nicht auf Fail2Ban. Die Möglichkeit sich eine Liste mit IPs zu besorgen läßt uns die Möglichkeit offen, die potetiellen Angreifer direkt auszusperren bevor sich etwas machen, und nicht nur vom SSH Dienst sondern am besten direkt vom ganzen System.
Dazu erstellen wir zwei Scripte:
Inhalt:
Und:
Inhalt:
Nun noch die richtigen Rechte setzen:
Was machen diese Scripts?
Sie durchsuchen die /etc/hosts.deny Datei (die Denyhosts mit "bösen" IPs füllt) und blocken via iptables diese IPs für das ganze System (also auch für den Webserver, Email etc...)
Nun wollen wir das aber nicht immer per Hand ausführen, sondern das soll Cron für uns übernehmen:
Als root:
Und dann folgendes Einfügen:
Damit wird unser Script alle 5 min ausgefüht. Das sollte reichen
Somit haben wir den Server ein bisschen sicherer gemacht.
Weiterhin wollte ich auch noch auf die Instalation von: (D)DoS-Deflate eingehen, jedoch wars nicht möglich Ubuntu zu überreden dieses Script zu nutzen
Für Fragen und Anregungen bin ich jederzeit offen
Da ich in letzter Zeit immer mal wieder lese, dass Server gesperrt werden wegen DDos oder weil sich jemand Zugang zum Server verschafft hat. Habe ich mir gedacht, ich schreibe mal ein kleines Howto, wie man seinen Server ein kleines bisschen sicherer macht.
Dieses Howto ist natürlich nicht das Maß aller Dinge und umfasst nicht einen 100%igen Schutz, aber ich denke, dass es ein guter Anfang ist.
Getestet ist das ganze unter Ubuntu 8.04. Wer ein anderes Betriebssystem hat, muss das ganze dann auf seine jeweilige Distribution übertragen, was aber nicht weiter schwer sein dürfte.
Ich gehe hier auf drei Sicherungspunkte ein:
- Sicherung des Apache
- Sicherung von SSH
- Aussperren eines Angreifers
Sicherung des Apache Webserver
Um den Apache Webserverdienst gegen DDos zu schützen und ein bisschen sicherer zu machen bietet sich ein ganz bestimmtes Modul des Apache an:
mod_evasive
Die Installation ist denkbar einfach:
Code:
apt-get install libapache2-mod-evasive
Nun muss man noch die Konfiguration vornehmen, dazu fügt man folgenden Code in die /etc/apache2/apache2.conf ein:
Code:
<IfModule mod_evasive.c>
#DOSHashTableSize gibt die Größe der Hashtabelle in Bytes an
DOSHashTableSize 3097
#DOSPageCount gibt die Anzahl der Seitenaufrufe eines Clients pro DOSPageInterval-Zeitintervall
DOSPageCount 100
#DOSSiteCount gibt die Anzahl der Seitenaufrufe auf einen Child-Prozess pro DOSSiteInterval-Zeitintervall
DOSSiteCount 100
#DOSPageIntervall und DOSSiteInterval werden in Sekunden angegeben
DOSPageInterval 15
DOSSiteInterval 15
#DOSBlockingPeriod gibt die Sperrzeit in Sekunden an
DOSBlockingPeriod 6000
#DOSEmailNotify gibts die eMail Adresse an, an welche eine Warnmail geschickt wird
DOSEmailNotify root@localhost
#DOSSystemCommand führt bei einem Angriff weitere Programme/Scripte aus wenn gewünscht
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
#DOSLogDir gibt das Verzeichnis an in dem das Modul seine Lock-Datei schreibt
#Achtung: der Ordner sollte nur f�r root erreichbar sein
DOSLogDir "/var/lock/mod_evasive"
#DOSWhitelist beinhaltet eine Aufzählung aller IP-Adressen für die mod_evasive NICHT gilt
#DOSWhitelist 127.0.0.1
</IfModule>
Jetzt noch ein: /etc/init.d/apache2 force-reload
und schon ist der Apache ein kleines bisschen sicherer.
Anmerkung: Ganz interessant ist auch noch der Befehl: DOSSystemCommand, damit könnte man theoretisch die IP an Iptables weitergeben und gleich blocken lassen, allerdings hab ich hierzu noch nicht wirklich was gefunden.
Sicherung von SSH
Auch immer sehr begerht: BruteForce Attaken auf den SSH Dienst eines Servers. Hier gibt es viele Möglichkeiten solche Attaken aufzuspüren und zu neutralisieren. Ich habe mich für den Einsatz von DenyHosts entschieden. Warum wird im Punkt 3 klar.
Die Installation von DenyHosts ist ebenfalls denkbar einfach unter Ubuntu:
Code:
apt-get install denyhosts
Jetzt müssen wir noch ein bisschen die Konfiguration bearbeiten:
Code:
nano /etc/denyhosts.conf
Code:
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 3
DENY_THRESHOLD_VALID = 3
DENY_THRESHOLD_ROOT = 3
SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
Also dann starten wir DenyHosts mal:
Code:
/etc/init.d/denyhosts restart
Aussperren eines Angreifers
Nun zu dem Punkt, warum wir auf DenyHosts setzen und nicht auf Fail2Ban. Die Möglichkeit sich eine Liste mit IPs zu besorgen läßt uns die Möglichkeit offen, die potetiellen Angreifer direkt auszusperren bevor sich etwas machen, und nicht nur vom SSH Dienst sondern am besten direkt vom ganzen System.
Dazu erstellen wir zwei Scripte:
Code:
/usr/local/bin/denyiptables.sh
Code:
#!/bin/bash
ROOT_UID=0
E_NOTROOT=67
if [ "$UID" != "$ROOT_UID" ]; then
echo "Must be root to run this script."
exit $E_NOTROOT
fi
iptables -F
echo "The following ips are blocked: " 1> /var/log/block.log
for x in `cat /etc/hosts.deny | grep -v ^# | cut -d : -f 2`; do
/usr/local/bin/deny.sh $x >> /var/log/block.log
done
exit 0;
Und:
Code:
/usr/local/bin/deny.sh
Code:
#!/bin/bash
ROOT_UID=0
E_NOTROOT=67
if [ "$UID" != "$ROOT_UID" ]; then
echo "Must be root to run this script."
exit $E_NOTROOT
fi
iptables -I INPUT -s $1 -j DROP
if [ $? != 0 ]; then
echo "block did not work on $1"
exit 1;
fi
echo "$1 was blocked."
exit 0;
Nun noch die richtigen Rechte setzen:
Code:
chmod +x /usr/local/bin/deny.sh /usr/local/bin/denyiptables.sh
Sie durchsuchen die /etc/hosts.deny Datei (die Denyhosts mit "bösen" IPs füllt) und blocken via iptables diese IPs für das ganze System (also auch für den Webserver, Email etc...)
Nun wollen wir das aber nicht immer per Hand ausführen, sondern das soll Cron für uns übernehmen:
Als root:
Code:
crontab -e
Code:
*/5 * * * * /usr/local/bin/denyiptables.sh
Somit haben wir den Server ein bisschen sicherer gemacht.
Weiterhin wollte ich auch noch auf die Instalation von: (D)DoS-Deflate eingehen, jedoch wars nicht möglich Ubuntu zu überreden dieses Script zu nutzen
Für Fragen und Anregungen bin ich jederzeit offen
Last edited by a moderator: