Böse bleiben draußen

Mein Server ist genervt. Ständig probieren irgend welche Bots aus, Passworte zu erraten und scannen Ports ab. Daher habe ich fail2ban installiert, das notorische Passwort-Ausprobierer ausbremst. Es gibt aber auch Betreiber von Honeypot-Netzwerken, die besonders aggresive IPs sammeln und diese in Listen zur Verfügung stellen. Ich habe mir eine solche Liste von einem Czechischen Anbieter herausgesucht und in einen iptables Filter umgewandelt. Und das geht so:

#!/bin/bash

BLKSRC="https://security.etnetera.cz/feeds/etn_aggressive.txt"
CHAIN="aggressiveips"
IPTBIN="/sbin/iptables"
TDAY=$(date +%d)
YDAY=$(date +%d --date="-1 day")
ADMIN="admin@internet.tld"

# create new chain for today
$IPTBIN -N $CHAIN$TDAY
# insert all IPs from the source into the chain (this takes a while)
for BIP in $(curl $BLKSRC 2>/dev/null | egrep -v "^#|^$|\:"); do
$IPTBIN -A $CHAIN$TDAY -s $BIP -j LOG --log-prefix "[netfilter] $CHAIN$TDAY "
$IPTBIN -A $CHAIN$TDAY -s $BIP -j DROP
done
# add a RETURN policy to allow other chains to be examined
$IPTBIN -A $CHAIN$TDAY -j RETURN
# insert chain into the INPUT chain
$IPTBIN -A INPUT  -j $CHAIN$TDAY
# delete yesterdays chain from INPUT chain
$IPTBIN -D INPUT -j $CHAIN$YDAY
$IPTBIN -F $CHAIN$YDAY
$IPTBIN -X $CHAIN$YDAY
# report
BLKCNT=$($IPTBIN -n -L $CHAIN$TDAY | fgrep DROP | wc -l)
echo "Installed $BLKCNT blocked IPs from $CHAIN - $BLKSRC on $(date)" | mail -s "$CHAIN result" $ADMIN

Das Script lädt als cronjob, der ein Mal nächtlich läuft, die aktuelle Liste herunter, sortiert alle Leerzeilen und Kommentarzeilen sowie IPv6-Adressen (egrep den Doppelpunkt) aus und installiert dann eine iptables chain. Ich nutze den heutigen und gestrigen Tag als Teil der chain, damit beim Neuladen nicht während der Installation der chain der Server von nervenden Anfragen gekitzelt wird.

Und damit ich einfacher für jeden Tag eine Auswertung machen kann. Und da kommt eine ganze Menge zusammen. Das aber ander mal.

Böse bleiben draußen

May the brute-force be with you, Botnet!

Das Internet ist voller böser Jungs und Mädchen. Ich arbeite für eine Firma, die mit ihren Produkten Firmen und Menschen hilft, sich gegen diese Bösewichte zu wehren. Doch auch privat betreibe ich eigene Server und Dienste. Da ich ein wenig zu paranoid bin, nutze ich meinen eigenen Mailserver und keine gmail oder andere „free“-mail adresse.

Nicht jeder kann einen eigenen Server betreiben. Denn wenn man nichts davon versteht, kann man es auch gleich einem Dritten überlassen, der weiß, was er tut. Falls nicht, ist man mit gmail doch besser aufgehoben.

Auf meinem Server befinden sich daher noch andere Benutzer, die gerne freemail-frei emailen wollen. Sie kennen mich alle persönlich und vertrauen mir, dass ich keinen Schindluder mit ihren Daten treibe.

Auf meinem Server läuft das IDS/IPSfail2ban„. Das ist ein System, das brute-force Angriffe auf Passworte erkennt und die Übeltäter automatisch blockiert. Das ist schön und dient als erste Verteidigungslinie. Aber so richtig Sicherheit bringt es nicht.

Ich sehe in den Logs, dass versucht wird, Passworte herauszufinden. Hier ein paar echte Logs aus dem Server, in der ich nur die Domain des potentiellen Opfers geändert habe:

2019-02-03 10:11:26 plain authenticator failed for (127.0.0.1) [191.102.28.34]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 10:11:28 login authenticator failed for (127.0.0.1) [191.102.28.34]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 10:31:16 plain authenticator failed for isp-31-222-13-236.saowifi.net (127.0.0.1) [31.222.13.236]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 10:31:16 login authenticator failed for isp-31-222-13-236.saowifi.net (127.0.0.1) [31.222.13.236]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 11:18:28 plain authenticator failed for (127.0.0.1) [88.81.93.221]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 11:18:29 login authenticator failed for (127.0.0.1) [88.81.93.221]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 11:55:13 plain authenticator failed for (127.0.0.1) [186.148.80.202]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 11:55:15 login authenticator failed for (127.0.0.1) [186.148.80.202]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 12:15:34 plain authenticator failed for (127.0.0.1) [178.219.123.243]: 535 Incorrect authentication data (set_id=info@victim.tld)
2019-02-03 12:15:35 login authenticator failed for (127.0.0.1) [178.219.123.243]: 535 Incorrect authentication data (set_id=info@victim.tld)

Wie man sieht, wird pro IP genau zwei Mal probiert und dann aufgegeben. Das liegt daran, dass man ab da Gefahr läuft, von einem IDS/IPS entdeckt zu werden. Wer aber genügend IPs zur Verfügung hat, wechselt eben von einer IP zur anderen.

Diese IPs bekommt man über Botnetze oder Anonymisierungsdienste. Gegen die kann man sich kaum zur Wehr setzen, ohne echte Benutzer auszusperren.

Es hilft also nur, gute Passworte zu nutzen und für jeden Dienst ein eigenes. Und wann immer es möglich ist, auf eine Zwei-Faktor-Authentifizierung zu setzen.

May the brute-force be with you, Botnet!