Hallo Liste
heute habe ich eine gaaanz coole Übung.
Ich betreibe einen Mailserver (Exim 3.3)
Alles ist ok bis auf einigen Dictionary Attaken.
Ich war heute Nachmittag am Channel und habe mich mit Ralph unterhalten, er riet mir vrfy abzuschalten und so eine Software oder Script zu nehmen ( heisst graylist oder so ) die grundsätzlich bei jeder ersten mail sagt : tray later. Das zweite mal wird die mail dann akzeptiert.
Ich glaube das diese Lösung sehr gut ist, jedoch bei dictionary attacken hilft es nicht.
Zudem kann eine gefährliche ping-pong Geschichte entstehen und man landet zuletzt selber auf so einer RDBL Liste.
Soviel zu Einleitung.
Für die die das Format der Exim mainlog nicht kennen hier ein Beispiel eines Logeintrags einer dictionary Attake:
2004-12-23 16:22:16 verify failed for SMTP recipient XxSoul4YouxX@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
2004-12-23 16:22:16 verify failed for SMTP recipient bunnyluder@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
2004-12-23 16:22:16 verify failed for SMTP recipient TauchmannDanny@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
[...] ca. 300 Einträge weiter geht es dann so weiter ...
2004-12-23 16:22:16 verify failed for SMTP recipient ixtab@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
2004-12-23 16:22:16 verify failed for SMTP recipient agb@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
2004-12-23 16:22:16 verify failed for SMTP recipient emailconfirm@timisoara.net from H=dsl-084-057-027-045.arcor-ip.net (dtcuwkwda.com) [84.57.27.45]
[...] bis zu 600 mal pro Sekunde kann es gehen.
danach ist ca. 10 Minuten Pause und wieder wird eine Minute gehämmert. Und es sind immer wieder dieselben IP's
zZ ist es Ruhe da ich begonnen habe die IP in iptables einzutragen.
Dies scheint das allheil Mittel zu sein.
Ich habe es von Hand gemacht und es tut einwandfrei.
Da ich ja ein lamer bin habe ich es mit Webmin gemacht weil ich die syntax nicht kenne und nicht riskieren wollte mich rauszusperren.
timisoara.net# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- dsl-084-057-027-045.arcor-ip.net anywhere
Gleich *Frage 1)* Wie lautet die Syntax von um von der console diesen befehl einzugeben?
"Sperre alle ports für sender mit der IP 84.57.27.45"
oder noch besser :
"Sperre den Port 25 TCP für sender mit der IP 84.57.27.45"
Dann habe ich überlegt wie kann ich das automatisieren.
Folgendes Szenario:
<ANFANG>
- verfolge "/var/log/exim/mainlog" und wenn der letzte Eintrag "verify failed for" enthält nimm das was in derselben reihe zwischen "[" und "]" steht und speichere es in eine MySQL tabelle.
- die Tabelle hat das Format | IP | timestamp |, es wird fortlaufend eingetragen.
- wenn die IP 3 (oder 5) mal vorkommt trage die IP in iptables mit der oben genannten Option "Sperre alle Ports mit der IP..." ein.
- Lösche alle einträge aus der tabelle die die IP enthalten.
- wenn derletzte Eintrag 6 Stunden her ist lösche die IP in iptables.
<ENDE>
Mysql Daten:
server :localhost
db: iptables
tabelle: iptables
user: iptables
pass: iptables
Dann hat rabe mir ein kleinen Skript gemnacht der liest die log und gibt die IP aus.
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,\1,p'
dieser Script gibt die IP korekt aus.
Soweit so Gut.
Danach hat er eine Version für die Datenbank gemacht die nicht funktioniert hat:
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,INSERT INTO iptables SET ip="\1";,p' |
mysql -u iptables -piptables -h localhost iptables
dann ging er :-))
wo ist der Fehler ?
ich habe dann begonnen herumzuprobieren
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,INSERT INTO iptables (ip) VALUES ("\1");,p' |
xargs -0 mysql -u iptables -piptables -h localhost iptables -e
das geht auch nicht
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,INSERT INTO iptables SET ip="\1";,p' |
xargs -0 mysql -u iptables -piptables -h localhost iptables -e
das auch nicht
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,INSERT INTO iptables SET ip="\1";,p' |
mysql -u iptables -piptables -h localhost iptables -e
tail -f /var/log/exim/mainlog |
sed -n -e 's,^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9] verify failed for [^[]*[[]\([.0-9]*\)[]]$,`INSERT INTO iptables SET ip="\1";`,p' |
mysql -u iptables -piptables -h localhost iptables -e
geht auch nicht
Okay wer kann mir weiter helfen ? ich bin mir sicher dass ich nicht der einzige bin der Angegriffen wird.
Und mein manueller Versuch hat 100% Resultat gezeigt :-)
mfg
Chr. Eichert
"Be liberal in what you accept, and conservative in what you send."
Jon Postel, August 6, 1943 - October 16, 1998
Received on Thu Dec 23 19:29:37 2004