V současné době používám iptables na novém serveru Debianu, na kterém běží Asterisk.
Každý den jsem kontroloval auth.log pro IP adresy a ručně prováděl iptables -A INPUT -s IPA.DRE.SS.0/24 -j DROP
Původně jsem dělal pouze IP adresy, ale mnoho požadavků přicházelo z podobných IP adres, takže /24 funguje lépe, použil jsem /16 několikrát.
Už mám stovky položek iptables a tohle se vymyká kontrole! Vím, že musí existovat jednodušší způsob, jak to udělat.
Byl mi doporučen fail2ban, ale zdá se, že blokuje IP pouze dočasně po určitém počtu pokusů.
Dva hlavní pokusy o narušení, které vidím, využívají falešná uživatelská jména a náhodné porty.
Je možné v případě pokusu o přihlášení pomocí libovolného uživatelského jména, které momentálně nepoužívám, automaticky trvale zablokovat IP adresu? Totéž s porty, které se nepoužívají?
Také to vidím hodně takto:
Did not receive identification string from (malicious IP) port 48334
Rád bych zakázal i ty IP.
Nebudu automaticky blokovat nesprávné pokusy o přihlášení, jako kdybych oklepal heslo, které by mě mohlo uzamknout. Ale snad bude stačit trvalý zákaz IP po 3 pokusech.
Mohu to udělat s iptables? Nenašel jsem nic o „trvalých zákazech“, které by takto fungovaly, zdá se, že to momentálně funguje víc.
Víceméně bych rád dosáhl toho, co jsem dělal ručně; trvalé blokování rozsahů IP po jediném nesprávném přihlášení uživatelského jména, připojení jednoho špatného portu nebo 3 nesprávných pokusech o přihlášení (se správným uživatelským jménem). Doufám, že to zabrání spamu auth.log.
Přijatá odpověď:
fail2ban
lze nakonfigurovat na trvalé zákazy nastavením bantine
na -1
V jail.conf
bantime = -1
Ty se při restartu ztratí, ale to nemusí být nutně špatné, protože tolik pokusů bude přechodných ze zadržených domácích strojů v botnetu…
Pokud chcete vytrvalost, pak https://arno0x0x.wordpress.com/2015/12/30/fail2ban-permanent-persistent-bans/ může poskytnout určité vodítko.
V podstatě úprava fail2ban
config vytvořit trvalý konfigurační soubor všech zakázaných IP a nechat iptables načíst tento seznam při restartu...
Pokud tedy zkontrolujete výchozí jail.conf
můžete zjistit, že výchozí akce je iptables-multiport
. To odpovídá konfiguračnímu souboru /etc/fail2ban/ction.d/iptables-multiport.conf
Můžeme přidat následující položky:
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
cat /etc/fail2ban/persistent.bans | awk '/^fail2ban-<name>/ {print $2}' \
| while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j <blocktype>; done
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name>
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck = iptables -n -L <chain> | grep -q 'fail2ban-<name>[ \t]'
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
echo "fail2ban-<name> <ip>" >> /etc/fail2ban/persistent.bans
Nyní, když fail2ban
označí záznam, přidá řádek do /etc/fail2ban/persistent.bans
(prostřednictvím actionban
konfigurace). Když fail2ban
po spuštění volá actionstart
který přečte tento soubor a vytvoří iptables
nezbytná pravidla.
Samozřejmě fail2ban
potřebuje restartovat po změně některého z konfiguračních souborů.
Všechna čest „arno0x0x“ a jeho wordpress webu za tento recept.