Seit ein paar Tagen bin ich in irgend einer Liste für XML-RPC Brute Force Attacken gelandet und die müllen meine limitierten Apache Slots zu. Lösung:
#!/bin/bash
# script: block xmlrpc attacks
# author: Steffen Wirth <s.wirth@itbert.de>
LOGFILE="/var/log/apache2/access.log"
LASTLINES="20"
MAXCOUNT="5"
LIST=$(tail -n$LASTLINES $LOGFILE |grep "xmlrpc.php" | awk '{print $1}' | sort -n | uniq -c)
if [ -n "$LIST" ]; then
while read -r count ip ; do
if [ $count -ge $MAXCOUNT ]; then
iptables -A INPUT -s $ip -j DROP
logger -t "XMLRPC" "blocked ip $ip"
fi
done <<< "$LIST"
fi
wie immer auch im gist.github.com
Wie Sebastian korrekt darauf hinwies, wenn man fail2ban installiert hat ist es viel einfacher:
# grep -v "^#" /etc/fail2ban/filter.d/apache-xmlrpc.conf
[INCLUDES]
before = apache-common.conf
[Definition]
failregex = ^ .*POST .*xmlrpc\.php.*
ignoreregex =
# grep apache-xmlrpc /etc/fail2ban/jail.conf -A3
[apache-xmlrpc]
enabled = true
port = http,https
filter = apache-xmlrpc
logpath = /var/log/apache*/*access.log
maxretry = 5
Hi,
maxretry ist viel zu hoch mit Fail2ban. Da es Botnetze mit tausenden von *unterschiedlichen* IP-Adressen sind, ist es sinnvoller maxretry = 1 zu setzen. Oder wer gibt 5x einen POST auf die Datei innerhalb von 10min (findtime = 600) ab?
Die sind mittlerweile so geschickt, dass von einer IP nur noch eine POST-Anfrage losgejagt wird. Damit greift dein Filter gar nicht bei Botnetzen. Fail2ban kennen die Bösen auch… ;)