Spamdyke - Verbesserung mit iptables?

Ulrich

Registered User
Hallo Allerseits,

mein Spamdyke ist mit MySQL Anbindung installiert. Wir haben hier > 10.000 Spam jeden Tag. Bei dieser Menge kommen auch noch ein paar Spams zum Kunden durch. :-(

Was kann man tun?

Alles E-Mails, die geblockt werden können außer acht gelassen werden. Es bleiben also nur die DENIED_GRAYLISTED übrig, die einer genaueren Betrachtung wert sind.

So verbindet man sich mit MySQL:
Code:
mysql spamdyke --user=spamdyke --password=
Eine Liste der DENIED_GRAYLISTED Einträge, gruppiert nach IP-Adresse, sortiert nach Häufigkeit:
Code:
select * from ( select count(*) as Anzahl, ip, reason, rdns from spamdyke_log_table where spamdyke_log_table.reason = 'DENIED_GRAYLISTED' group by ip order by Anzahl desc ) as select1 where select1.Anzahl > 25;
ergibt bei mir folgendes Ergebnis:
Code:
+--------+-----------------+-------------------+-----------------------------------------------+
| Anzahl | ip              | reason            | rdns                                          |
+--------+-----------------+-------------------+-----------------------------------------------+
|    445 | 77.91.63.139    | DENIED_GRAYLISTED | h11.wshe.pl                                   | 
|     85 | 91.122.214.120  | DENIED_GRAYLISTED | ip-120-214-122-091.pools.atnet.ru             | 
|     76 | 88.198.21.85    | DENIED_GRAYLISTED | tismx2.tdg.de                                 | 
|     74 | 24.232.9.78     | DENIED_GRAYLISTED | ol78-9.fibertel.com.ar                        | 
|     74 | 79.191.212.125  | DENIED_GRAYLISTED | aese125.neoplus.adsl.tpnet.pl                 | 
|     41 | 189.15.68.26    | DENIED_GRAYLISTED | 189-015-68-026.xd-dynamic.ctbcnetsuper.com.br | 
|     38 | 81.169.146.162  | DENIED_GRAYLISTED | mo-p00-ob.rzone.de                            | 
|     38 | 213.6.191.218   | DENIED_GRAYLISTED | a191-218.adsl.paltel.net                      | 
|     36 | 118.11.208.8    | DENIED_GRAYLISTED | p6008-ipbfp301miyazaki.miyazaki.ocn.ne.jp     | 
|     34 | 193.37.159.25   | DENIED_GRAYLISTED | mail1.wicor.ch                                | 
|     32 | 213.165.64.20   | DENIED_GRAYLISTED | mail.gmx.net                                  | 
|     29 | 217.72.192.221  | DENIED_GRAYLISTED | fmmailgate01.web.de                           | 
|     28 | 65.55.116.91    | DENIED_GRAYLISTED | blu0-omc3-s16.blu0.hotmail.com                | 
|     28 | 65.55.116.94    | DENIED_GRAYLISTED | blu0-omc3-s19.blu0.hotmail.com                | 
|     27 | 85.72.189.61    | DENIED_GRAYLISTED | athedsl-341407.home.otenet.gr                 | 
|     27 | 79.163.32.30    | DENIED_GRAYLISTED | public8222.xdsl.centertel.pl                  | 
|     27 | 196.208.48.111  | DENIED_GRAYLISTED | c1-111-1.blm.dial-up.net                      | 
|     27 | 217.164.150.129 | DENIED_GRAYLISTED | auh-as14861.alshamil.net.ae                   | 
+--------+-----------------+-------------------+-----------------------------------------------+
Dabei fällt auf, dass die ersten paar Einträge offensichtlich Spammer sind. Diese IP-Adressen könnte man nun per Cronjob an iptables hängen und generell droppen. Das würde noch ein paar Spams herausfiltern.

Oder was meint ihr?

Grüße,
Ulrich
 
Hallo Ullrich,

ich lasse mit Hilfe von fail2ban auch IPs blocken, die zu oft auffallen. Allerdings nicht im Greylisting-Bereich, weil da wird schwierig zu differenzieren.

Die Frage, die ich mir stelle, ist, wie kann ich sicher unterscheiden zwischen einem legitimen Server - wie bei dir z.B. gmx und web - und einem, der nur spammt.

An der Zahl alleine kann man das ja schwerlich festmachen. Was hast du denn da für eine Idee?

Grüße,

Jan
 
select * from ( select count(*) as Anzahl, ip, reason, rdns from spamdyke_log_table where spamdyke_log_table.reason = 'DENIED_GRAYLISTED' group by ip order by Anzahl desc ) as select1 where select1.Anzahl > 25;
Nur so Nebenbei: Subselects sollte man aus Performance-Gründen meistens meiden.
Alternativer Select:
Code:
select count(*) as Anzahl, ip, reason, rdns
from spamdyke_log_table
where reason = 'DENIED_GRAYLISTED'
group by ip
having Anzahl > 25
order by Anzahl desc;

Zur eigentlichen Frage schließe ich mich JanJ an. Wer gerade einen größeren Schwung an GMX-Mails erhält, sperrt mit einer solchen Aktion direkt alle GMX-User aus.

huschi.
 
Hi,

hatte eine ähnliche Idee und Probiere schon ein weilchen verzweifelt es umzusetzten. Ich möchte halt nur nicht wie Ulrich die GREYLISTED blockieren, sondern die die häufig versuchen und abgewiesen werden
Code:
"select count(*) as Anzahl, ip, reason 
from spamdyke_log_table
where (reason != 'DENIED_GRAYLISTED' AND reason != 'ALLOWED' AND reason != 'TIMEOUT')
group by ip
having Anzahl > 3
order by Anzahl desc;"
ich habe einfach keine Lust meine "teuren" Resourcen für "unverbesserliche Wiederholungstäter" zu verschwenden und will diese deshalb für 48h per Iptables blocken und ganz aufällige 1 Monat.

OK soviel zum Hintergrund und jetzt zu meinem Problem:

ich kann zwar Abfragen per console machen aber ich habe keine Ahnung wie ich die in meinem Script auswerten und verarbeiten kann
beispiel auszug der abfrage said:
+--------+-----------------+----------------------+
| Anzahl | ip | reason |
+--------+-----------------+----------------------+
| 26 | 12.9.194.180 | DENIED_RBL_MATCH |
| 18 | 222.253.79.252 | DENIED_RDNS_RESOLVE |
| 17 | 125.161.188.36 | DENIED_IP_IN_CC_RDNS |
| 15 | 72.51.221.234 | DENIED_RBL_MATCH |
| 14 | 210.175.253.105 | DENIED_IP_IN_CC_RDNS |
| 13 | 24.62.139.225 | DENIED_RBL_MATCH |
| 13 | 61.134.43.24 | DENIED_RDNS_MISSING |
| 11 | 71.249.141.54 | DENIED_RBL_MATCH |
| 11 | 71.125.230.125 | DENIED_RBL_MATCH |
| 11 | 78.38.244.2 | DENIED_RDNS_MISSING |
| 10 | 94.23.9.166 | DENIED_OTHER |

Kann mir das jemand erklären?
 
Last edited by a moderator:
Sorry, dass meine Antwort so lange gedauert hat.

Die IP-Adressen kann man mit einem Befehl in eine Datei bzw. in eine _for_ Schleife einfügen. Beispiel:

Code:
for a in `mysql spamdyke --user=spamdyke --password=.... --execute="select ip from spamdyke_log_table where .... ;" --silent --silent`; do; echo $a; done;
Anstatt die IP-Adresse per _echo_ auszugeben, kann man nun mit _iptables --append blabla -s $a -j DROP_ die IP-Adresse sperren.

Wichtig ist, dass die IP-Adresse irgendwann mal wieder freigegeben wird, denn ansonsten wird die Liste der zu überprüfenden Ports sehr lang und die Firewall wird immer langsamer, da sie so viele Tests machen muss.

Grüße,
Ulrich
 
Back
Top