Pokud používáte Fail2Ban na deb-based systémech, možná se vám, stejně jako mě, už někdy stalo, že Fail2Ban nesprávně nastavil iptables pravidla tak, že některá nebyla referencována nebo úplně chyběla. Poradím vám jak tento neduh odstranit.
Paralelní zpracování
Fail2Ban při startu odpálí sérii příkazů, kterými nastaví iptables. Ale na víceprocesorových systémech (tedy v současnosti téměř na všech) se často stane, že spustí dva procesy paralelně a to se iptables nelíbí. V logu Fail2Ban se pak objeví třeba
2011-10-17 11:59:54,211 fail2ban.actions.action: ERROR iptables -N fail2ban-sasl
iptables -A fail2ban-sasl -j RETURN
iptables -I INPUT -p tcp -m multiport --dports smtp,pop3,pop3s,imap2,imaps -j fail2ban-sasl returned 400
A v iptables pak
root@debian:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-dovecot tcp -- anywhere anywhere multiport dports pop3,pop3s,imap2,imaps
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
...
Chain fail2ban-dovecot (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-postfix (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-sasl (0 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Jail pro SASL tedy existuje, ale pravidlo, které do něj nevychované IP strká, už ne.
Spěchejte pomalu
Bude asi ještě nějakou chvíli trvat, než tvůrce aplikace problém vyřeší a fix se dostane do oficiálních repozitářů a tak zatím tento neduh léčím workaroundem, který sice také zahrnuje čekání, avšak o mnoho kratší
--- fail2ban-client.old 2011-10-17 12:56:23.000000000 +0200
+++ fail2ban-client 2011-10-17 12:57:00.000000000 +0200
@@ -142,6 +142,7 @@
def __processCmd(self, cmd, showRet = True):
beautifier = Beautifier()
for c in cmd:
+ time.sleep(0.1)
beautifier.setInputCmd(c)
try:
client = CSocket(self.__conf["socket"])
100ms je dostatečně dlouho na to, aby iptables příkaz provedly a nezasukovaly se. Při vyšším počtu pravidel Fail2Banu je jeho start nepatrně delší, ale pokud server nerestartujete pětkrát do hodiny, myslím, že to ničemu nevadí.