Hawkes Blog
Windows reboot | Linux be root
Hawkes Blog

Exim smtp auth Brute-Force-Attacken

Dieser Artikel ist obsolet. Part2 ist der Aktuelle.


Ich hatte in letzter Zeit massive Brute-Force-Attacken im exim Logfile, wie z.B..

login authenticator failed for (EAGLEWIN2003) [209.198.109.234]:9761I=[62.75.155.49]:25: 535 Incorrect authentication data (set_id=info)

Dagegen habe ich mir 2 kleine exim ACLs gebaut.

Zum ersten eine auth acl die nur 1x auth pro Mail zulässt und nach dem 2. Versuch erst einmal

30sec wartet, bis es die entsprechende Meldung an den einliefernden Server zurückgibt.

Damit werden hauptsächlich die Scripte ausgebremst, die viele auth Requests pro connect durchführen.

acl_smtp_auth:
                drop    message = authentication is allowed only once per message
                        set acl_m_auth = ${eval10:0$acl_m_auth+1}
                        condition = ${if >{$acl_m_auth}{2}}
                        delay = 30s
                accept

Für die Restlichen Scripte die ein wenig "intelligenter" sind, ist ein wenige mehr Arbeit fällig.

Diese Scripte bauene mehrere Connects gleichzeitig auf und schicken auch immer nur 1 auth pro Mail.

Dagegen hilft das folgende kleine Bash-Script

#!/bin/bash
BL="/etc/exim4/lists/blacklist"
LOG="/var/log/exim4/main.log"
grep 'Incorrect authentication data' $LOG | awk '{print $9}' | cut -d "[" -f2 | cut -d "]" -f1 | sort | uniq -c | while read token
do
    count=`echo $token | awk '{print $1}'`
    ip=`echo $token | awk '{print $2}'`
    if [ $count -ge 3 ]
    then
        if ! grep -q $ip $BL
        then
        echo "added $ip to exim bl"
        host $ip
        echo $ip >> $BL
       fi
    fi
done

das Script läuft jede Minute per Cron und grept nach fehlerhaften auth-Requests und falls es mehr als 3 Einträge für eine IP findet wandert diese auf die Exim Blacklist, falls diese noch nicht vorhanden ist.

Das entsprechende Cron-File in /etc/cron.d/

MAILTO=<<myMail>>
*/1 * * * * root if [ -x /etc/exim4/scripts/autoblacklist.sh ]; then /etc/exim4/scripts/autoblacklist.sh; fi

Falls das Script etwas finden sollte, schickt mir Cron die entsprechende Ausgabe des Scripts per Mail.

Wie z.B.

added 209.198.109.234 to exim bl
234.109.198.209.in-addr.arpa is an alias for 234.232.109.198.209.in-addr.arpa.
234.232.109.198.209.in-addr.arpa domain name pointer host2.eppllc.cust.sover.net.

Dazu die passende ACL, die die Blacklist beim smtp-connect auswertet und ggf. die Verbindung verbietet.

REJECTHOSTS=/etc/exim4/lists/blacklist

<<snipp

acl_smtp_connect:
                deny    condition = ${lookup {$sender_host_address} \
                                              lsearch{REJECTHOSTS} \
                                             {yes}{no} }
                        message = Blacklisted Host
                        log_message = sender blocked: $sender_host_address
                accept

Es vielleicht nicht die schnellste oder schönste Variante, aber es musste schnell gehen und es funktioniert. :)

Muhgatus wird es wahrscheinlich in 2 Zeilen hacken oder komplett mit awk abbilden. :D

Inspired by Exim Mailinglist