Spamschutz für WordPress mit Fail2ban
In meinem Beitrag Spamschutz für Wordress auf Serverebene hatte ich von Kombination zwischen AntispamBee und Fail2ban berichtet. Heute möchte ich euch ein kleines aber feines Detail aus meiner Erfahrung heraus ans Herz legen.
Warum Fail2ban für den Spamschutz von WordPress klasse ist, aber ein wenig „Drumherum“ benötigt
Das größte Problem von Fail2ban ist: wird der Dienst neu gestartet oder neu geladen, sind alle bisher geblockten IP-Adressen verloren, da File2ban beim Restart/Reload alle file2ban-* Iptables Chains flusht. Schade eigentlich!
Aktuell fallen mir zwei Wege ein diesen Mangel zu beheben:
- Einsatz von iptables-save und iptables-restore
- Einsatz der fail2ban-client Funktionalität
Möglichkeit Nummer Eins besitzt den Charme, dass auch alle andern Firewall Regeln gesichert werden können.
Möglichkeit Nummer Zwei kümmert sich nur um die laufenden Fail2ban Jails.
Beide Scripte können als Cronjob (zumindest zum Sichern der Daten) laufen, oder auch an entsprechender Stelle im Fail2ban Init Script eingebunden werden. Je nach Gusto eben.
Für beide Möglichkeiten gibt es jeweils ein triviales Bash Script. Das Script mit der fail2ban-client Funktionalität ist ein von mir erweitertes Script und kommt Original von der offiziellen Fail2ban Community Webseite.
Wie sehen die Scripte um Fail2Ban „zu erweitern“ nun aus?
- Das Script mit iptables-save und iptables-restore:
#!/bin/bash
# Little helper to save and restore blocked (Fail2ban) IPs
# by Martin Wolfert
# https://wp-loft.de
# V.1.0.0
# 2014/08/28
### Some variables ###
IPT_SAVE=`which iptables-save`
IPT_RESTORE=`which iptables-restore`
RUNDIR="/root/fail2ban-adds"
BANNED_IPS="${RUNDIR}/iptables.list"
# Function to save the iptable rules
do_save()
{
if [ -f ${BANNED_IPS} ]; then
rm ${BANNED_IPS}
fi
${IPT_SAVE} >> ${BANNED_IPS}
return 0
}
# Function to restore the iptables stuff
do_restore()
{
if [ ! -f ${BANNED_IPS} ]; then
echo "Hey dude ... first you have to save some fw rules ! :-)"
exit 3
fi
${IPT_RESTORE} ${BANNED_IPS}
return 0
}
# Doing
case "$1" in
save)
do_save
;;
restore)
do_restore
;;
*)
echo "Usage $0 {save|restore}"
exit 3
;;
esac
exit 0
Du kannst das Script hier auf GitHub herunterladen: save-banned-ips_V.1.0.0.sh
2. Das Script mit dem fail2ban-client:
#!/bin/sh
# Bash script to xxtract already fail-banned ips
# by Martin Wolfert
# https://wp-loft.de
# V.1.1.0
# 2014/08/28
# Original from - methurt:
# http://www.fail2ban.org/wiki/index.php/Fail2ban:Community_Portal#Question_about_persistent_IP_address_bans_over_restart
### Some variables ###
GREP=`which grep`
SED=`which sed`
F2BCL=`which fail2ban-client`
CHMOD=`which chmod`
RUNDIR="/root/fail2ban-adds"
BANNED_IPS="${RUNDIR}/fail2ban-manual.list"
# Function to save the fail2ban rules
do_save()
{
if [ -f ${BANNED_IPS} ]; then
rm ${BANNED_IPS}
fi
jails=$(${F2BCL} status | ${GREP} Jail list: | ${SED} 's/.*Jail list:t+//;s/,//g')
for jail in ${jails}; do
for ip in $(${F2BCL} status ${jail}| ${GREP} IP list| ${SED} 's/.*IP list:t//'); do
echo "fail2ban-client set ${jail} banip ${ip} ">> ${BANNED_IPS}
done
done
${CHMOD} 755 ${BANNED_IPS}
return 0
}
# Function to restore the fail2ban rules
do_restore()
{
if [ ! -f ${BANNED_IPS} ]; then
echo "Hey dude ... first you have to save the fail2ban rules ! :-)"
exit 3
fi
${BANNED_IPS} >/dev/null 2>&1
return 0
}
# Doing
case "$1" in
save)
do_save
;;
restore)
do_restore
;;
*)
echo "Usage $0 {save|restore}"
exit 3
;;
esac
exit 0
Du kannst das Script hier auf GitHub herunterladen: extract-banned-ips_V.1.1.0.sh
Beide Scripte erfüllen ihren Zweck komplette Iptables Regelsätze, bzw. Fail2ban Regelsätze zu sichern und wiederherstellen zu können.
Hast du noch weitere Ideen, Scripte oder Lösungen?