fail2ban + ufw nem megy

Hozzászólások

Mondjuk az első tippem az lett volna, hogy UDP-t nem blokkol csak TCP-t. De a szabályban nem ez látszódik...

Az ufw,conf -ban ez van:

[Definition]

actionstart = 

actionstop = 

actioncheck = 

actionban = [ -n "<application>" ] && app="app <application>"
            ufw insert <insertpos> <blocktype> from <ip> to <destination> $app

actionunban = [ -n "<application>" ] && app="app <application>"
              ufw delete <blocktype> from <ip> to <destination> $app

Biztos ez lehet akkor a gond, hogy alapból csak TCP-t blokkol. De miért? :-(

részemről a firejail tűzfal generátorral kombináltam a fail2ban, különböző kombinációkban

a lényeg, hogy nem mindegy, hogy az iptables chain-ek közül melyik sorrendben veszi át, majd adja vissza a "folyamot" a fail2ban

iptables -L -n -el meg kell nézni, hogy a (ufw) tűzfal milyen rule-okat generált, utána a megfelelő sorba "beszúrni" a fail2ban chaineket

a "chain" paraméter a barátod, ami megmondja melyik chain hányadik sorába "insert"-eli a fail2ban az elágazását

kicsi példa:

[sshd]
enabled = true
backend=systemd
chain=in_world 3
maxretry = 2

[recidive]
enabled=true
chain=INPUT
banaction = iptables-allports
blocktype = DROP
logpath  = /var/log/fail2ban.log
bantime  = 2419200  ; 2 weeks
findtime = 1814400   ; 3 weeks
maxretry = 4

itt az sshd nálam az in_world 3.sorába van beszúrva, mert van előtte ami "univerzálisan érvényes", a recidive (ami magát a fail2ban logját vizsgálja ismétlődésekre), simán az INPUT chain legeljére kerül, még az ACCEPT elé, mivel univerzális DROP

Sajnos ez nem nyert. Az "ufw insert" parancsnak nincs olyan beállítása, hogy melyik chain-be szúrja be a szabályt!

Helyette megpróbálom azt, hogy átállítom a fail2ban-t iptables -re, és annak mondom meg a chain-t.

Oké kiderült hogy miért használ DROP helyett REJECT-et. Rossz helyre írtam a paramétert.

Helyesen így néz ki:

banaction=iptables_allports[blocktype=DROP,protocol=all]

Illetve a REJECT változata:

banaction=iptables_allports[blocktype=REJECT --reject-with icmp-port-unreachable"]

Ami még nagyon érdekes, hogy az iptables_allports -nak van egy protocol paramétere, de ha csak azt használod, akkor az nem fog működni. Ha minden protokollt bannolni akarsz, akkor a jail szintjén is be kell állítani, valahogy így:

banaction=iptables_allports[blocktype=DROP,protocol=all]
protocol=all

Ennek az a magyarázata, hogy a jail config egy új iptables chain-t hoz létre, és a banaction ezen belül külön DROP vagy REJECT rule-okat. Ha a jail szinten nem adod meg hogy protocol=all, akkor a chain így jön létre:

# iptables -L INPUT -n -v
Chain INPUT (policy DROP 22 packets, 952 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1371  229K f2b-named-pizzaseo  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           

Bár az igaz, hogy a f2b-named-pizzaseo chain-en belüli szabályok minden protokollra illeszkedni fognak. De maga a chain nem - az csak TCP-re lesz használva. Ha jail szinten is megadod a protocol=all -t, akkor jó lesz:

# iptables -L INPUT -n -v
Chain INPUT (policy DROP 22 packets, 952 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1371  229K f2b-named-pizzaseo  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Nem tudtam róla, hogy kétféle protocol nevű paraméter is van, ezért amikor próbálkoztam, akkor sehogy nem akart összejönni a szűrés. De most már jó. :-)