Portál AbcLinuxu, 2. května 2025 04:44
#!/bin/bash iptables -N sshblock 2>/dev/null iptables -F sshblock 2>/dev/null for addr in ` ( cat /var/log/secure gzip -d -c /var/log/secure.1.gz gzip -d -c /var/log/secure.2.gz ) | grep 'Failed password for illegal user' |\ sed 's/.*from \([^ ]*\).*/\1/' |\ sort | uniq -c |\ sort -n -r | grep -v '^[^0-9]*[0-9][^0-9]' |\ sed 's/^[^0-9]*[0-9]*[^0-9]\(.*\)/\1/'` ; do if ! [ "$addr" == "12.34.56.78" ] ; then iptables -A sshblock -s $addr -j MIRROR fi; done;A pak uz staci jen na prihodnem miste zaradit ten chain nekam do firewallu... Radek
uniq -c
) za jednotku casu (to uz zavani datumovou aritmetikou). A taky musel vyresit opetovne odblokovani po urcite dobe (v primitvni podobne by stacil jednou dene flush ipt chainu). Dal pokud pouzivate vice IP protokolu, musel byste rozlisovat IPv4 a IPv6 (iptables a ip6tables jsou oddeleny).
A vymyslet kolo nema smysl. Proto existuje PAM modul, ktery muzete nasadil na libovolnou sluzbu.
uniq -c
) a vyhazi vsechny, ktere maji pocet chybnych pokusu 0-9. Takze k zablokovani dochazi az po 10 spatnych pokusech.
Co se casoveho meritka tyce, tak to je vyreseno tim, ze se zdrojove logy rotuji, takze casem (typicky po 7 dnech) IP adresa ze seznamu odstrani (pri kazdem zavolani na zacatku ten chain Flushnu a znova cely vytvorim). Pripadne by se to dalo vyresit tim, ze bych tam dal nejaky tail -n 2000
a bral treba jen poslednich 2000 radku z logu (pak bych asi jeste musel upravit jejich poradi). Uznavam, ze jsou to fuj-fuj berlicky, ale lepsi nez dratem do oka, ne?
Ipv6 zatim nepouzivam a pokud vubec nekdy budu, tak toho budu muset resit vyrazne vic :)
Samozrejme, ze bych radsi pouzil uz udelany kolo, ale kdyz mi nejde nasadit na moje auto. A nez do nej busit kladivem, aby sedlo a pak mi nekde upadlo.... :)
Doporucujem nechat otvorenu aspon jednu sesnu. :D
...Vypadalo to tak jednoducho, :) bohuzial neviem cim to je ale nefunguje...
No nic aspom mam dovod sa poprechadzat na opacnu stranu Prahy. :D
PS: Bezpecnost ssh zabespecena. :D
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.