Dieses Tutorial soll euch zeigen, wie man mit Hilfe von IAM und einem Perlscript den Traffic an den Ports des Webservers überwacht und bei zu hohem Trafficaufkommen eine Mail an den Administrator schickt. So lassen sich beispielsweise DDoS Attaken schneller erkennen und abwehren.
Installation von IAM
IAM bekommt man auf dieser Webseite: http://www.intevation.de/iam
Hier laden wir uns die aktuelle Version (0.0.2) herunter und entpacken sie im /usr/src Verzeichniss:
cd /usr/local/src
wget ftp://ftp.intevation.de/iam/iam-0.0.2.tar.gz
tar xvfz iam-0.0.2.tar.gz
cd iam-0.0.2
Da IAM mit iptables arbeitet kopieren wir die Datei <code>iptables.servercode> ins <code>/etc/init.dcode>-Verzeichniss.
cp iptables.server /etc/init.d/iam
chmod +x /etc/init.d/iam
Nun bearbeiten wird die Datei <code>/etc/init.d/iamcode> mit unserem favourisierten Texteditor und nehmen noch ein paar Einstellungen vor:
(Beachtet dabei, daß auf vServern evtl. <code>venet0code> statt <code>eth0code> eingetragen werden muß.)
DUMPFILE=/var/log/iamdump
extif=eth0
extip=IP DEINES SERVERS
intif=lo
hq=127.0.0.1/29
intnet=127.0.0.1/16
Evtl. kann man auch hq ganz auskommentieren:
#hq=212.227.80.7/32 [...] # new_chain intevation # acc_ip intevation $hqWenn andere iptables genutzt werden empfield sich in der Funktion start_firewall() den Aufruf von allow_all auszukommentieren.
Und nun starten wir schon mal die Filterung und setzen im Erfolgsfall den 'autostart':
/etc/init.d/iam start
#fuer SuSE:
insserv iam
#fuer Fedora/RedHat:
chkconfig iam
#fuer Debian:
update-rc.d iam defaults
Nun erstellen wir noch ein Verzeichnis für die restlichen IAM-Scripts die später benötigt werden und kopieren alles rein:
mkdir /usr/local/iam
cp * /usr/local/iam/
Jetzt erstellen wir für den Benutzer 'root' noch zwei Einträge im Crontab:
*/5 * * * * /etc/init.d/iam dump >/dev/nullFür eine tägliche Nachricht über den angefallenen Traffic modifizieren wir noch die <code>traffikmail.shcode>:
59 23 * * * /usr/local/iam/traffikmail.sh
#!/bin/bash
STARTDATUM=$(date "+%Y%m%d")
ENDDATUM=$(date "+%Y%m%d")
/usr/local/iam/iam -r -f $STARTDATUM -t $ENDDATUM /var/log/iamdump | mail -s "Traffikreport von meinem Server" root
Überwachungsscript:
Nun laden wir uns das zusätzlich benötigte Script runter:
cd /usr/local/src
wget http://www.huschi.net/download/traffic_check.tgz
tar xvfz traffic_check.tgz
mv traffic_check.pl ../iam/.
Nun müssen wir das Script <code>traffic_check.plcode> noch entsprechend anpassen:
$IAM = '/usr/local/iam/iam';Nun kommt der Teil der etwas "tricky" ist: Wir finden im dem traffic_check Script folgende Werte:
$DUMPFILE = '/var/log/iamdump';
$MAIL_FROM = 'root@domain.tld';
$MAIL_TO = 'DEINE@MAILADDR.DE';
%CHAINS = ('outgoing (without other listed services)' => 0.1,Diese Werte geben an, wie groß der Wert sein darf an Traffic bei dem NICHT verwarnt wird.
'www (http/https/caudium)' => 0.1,
'internet services' => 0.1
);
Also:
Im Abschnitt 'www', das ist der Traffic vom Apache Webserver (80), dürfte nach oben in 15 min nicht mehr als 0.1 MB Traffic entstehen, alles was größer ist lößt die Warnung an den Webmaster aus. Das ist natürlich Schwachsinn (0.1 MB), diese Werte kann man eigentlich nur durch Erfrahrung oder Ausprobieren anpassen.
Meine Chains sehen so aus:
'outgoing (without other listed services)' => 10.0,
'www (http/https/caudium)' => 30.0,
'other traffic (unspecified)' => 50.0,
'internet services' => 30.0
Für einen kleinen nicht ausgelasteten Webserver reicht das.
Nun brauchen wir noch einen Cronjob um das Traffic_Check Script 15 minütlich auszuführen:
*/15 * * * * /root/traffic_check.pl >/dev/null 2>&1
Logrotate:
Da die Datei <code>iamdumpcode> mit der Zeit entsprechend wächst, sollte man es noch dem <code>logrotatecode> füttern. (Wie das geht, muß jeder in seiner Distribution selber entdecken. Erster Ansatzpunkt wäre aber <code>/etc/logrotate.confcode> oder <code>/etc/logrotate.d/code>
Quelle:
Server-Support-Forum
Fragen, Fehler, Anregungen bitte (auch) im o.g. Forum posten.