Baka
Menu

In der letzten Zeit haben Brute Force Attacken auf SSH-Dienste meiner Router und Server sehr stark zugenommen.
In der Liste der IP-Adressen, die fail2ban-client status ssh liefert, hat man Dutzende IPs bewundern können,
die aus den gleichen (nach whois meist chinesichen) Netzbereichen stammen.

Ich habe mich nach Listen solcher komischer Netze und Möglichkeiten diese per Fail2Ban präventiv auszusperren,
umgeschaut und fündig geworden: blocklist.de

In der Liste http://lists.blocklist.de/lists/ssh.txt habe ich "meine Angreifer" wiedergefunden.
Diese Liste beinhaltet die in den letzten 48 Stunden gemeldete Angreifer-IPs und wird alle 30 Minuten aktualisiert.

 

Rezept:

Fail2Ban mit IP-Adressen von blocklist.de füttern.

Zutaten:
1. Ein Bash-Script um mit lynx die IP-Adressen zu importiren, in /16 Netze umzuwandeln und damit Fail2Ban zu füttern.
    Das Script unter /usr/local/bin/blocklist.sh abspeichern und mit chmod +x ausführbar machen:

#!/bin/bash

# blocklist.sh
# Fetch ssh-blocklist from blocklist.de,
# convert to networks and import to fail2ban. 

SSH_TXT=$(lynx -dump http://lists.blocklist.de/lists/ssh.txt)
if [ "${SSH_TXT}" = "" ]
then
 echo "Error fetching http://lists.blocklist.de/lists/ssh.txt"
 exit 0
fi

declare -i COUNT=1
NL=$'\n'

for IP in ${SSH_TXT}
do
 IP="${IP%.*}"
 NET="${IP%.*}.0.0/16"
 NET_LIST+="${NET}${NL}"
done
NET_LIST=$(echo "${NET_LIST}" | sort -u -V | grep -v "^$" | grep -v ":")

for NET in ${NET_LIST}
do
 echo -n "${COUNT} "
 fail2ban-client set blocklist banip ${NET}
 ((COUNT++))
 if [ ${COUNT} -gt 10 ]
 then
  # after each 10 imports flush IPs to iptables
  touch /var/log/blocklist.log
  COUNT=1
 fi
done
touch /var/log/blocklist.log

2. Konfiguration eines jail "blocklist".
    Folgende Zeilen in die Datei /etc/fail2ban/jail.local hinzufügen:

[blocklist]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/blocklist.log
maxretry = 1
banaction = iptables
bantime = 86400

3. Cron-job für regelmäsige Aktualisierung.

MAILTO=""
35 * * * * root /usr/local/bin/blocklist.sh

Danach:
 - die Logatei mit touch /var/log/blocklist.log anlegen. Diese ist für Fail2Ban notwendig.
 - service fail2ban restart

Das Ergebnis kann man mit
 fail2ban-client status blocklist und iptables -L -n konrollieren.

Das Script kann man als root auch manuell starten.