Ништа у fail2ban-у само по себи не одбацује пакет: оно позива акцију, а управо та акција именује протокол и порт. Када jail пријави ban док демон наставља да прихвата пријаве, ban је обично стваран и ужи него што лог имплицира. Клијент који се поново повеже преко другог транспорта никада не наилази на инсталирано правило. Упоредите шта је акција инсталирала са оним што демон слуша пре него што било шта промените, јер доказ лежи у firewall ланцу који је акција написала, а не у листи jail-а.

Читајте ланац, а не сажетак jail-а

fail2ban убацује свој ланац испред ланца услуге, па листа бројача показује тачно шта постоји. Ланац назван по jail-у, који држи једно правило чија колона протокола гласи udp, потпуно објашњава TCP пријаве које стално пристижу. Одбијају се само UDP пакети са блокираног извора. Услуга има TCP слушаоца и ништа у том ланцу га не дира.

Обратите пажњу и на ефекат суседног jail-а. Један домаћин може изгледати савршено конфигурисан само зато што други jail даје половину која недостаје, а иста градња не ради ништа тамо где тај jail није инсталиран.

Акција именује један протокол и ту се ломи

Сваки banaction је шаблон firewall команде, а протокол стоји у једном од његових резервисаних места. Ускост је намерна, јер веб jail и DNS jail немају шта да траже у блокирању идентичних портова. То постаје замка када услуга слуша на више од једног транспорта, што VPN демони рутински раде. Филтер може пратити неуспеле пријаве са оба транспорта док акција покрива један.

Инсталације SoftEther и OpenVPN обично слушају на UDP и TCP истовремено, а пошто лог линија изгледа исто у оба случаја, филтер прати оба. Асиметрија се никада не показује у извештају самог jail-а. fail2ban је тачно избројао неуспехе и затим инсталирао правило које се примењује на половину саобраћаја на ком су ти неуспеси стигли.

Нека ban покрије оба транспорта

Поправите то у дефиницији jail-а; ручно написана правила ће следеће поновно учитавање промешати. Наведите две акције, по једну за сваки протокол:

action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
         %(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]

Не покушавајте то да скратите са protocol = all. Подразумевани banaction је multiport акција и проширује се на -p <protocol> -m multiport --dports <port>; без L4 протокола нема шта да провери подударање порта, па iptables одбија правило док jail и даље пријављује успешан ban. Акција за све портове као што је iptables-allports или nftables-allports прихвата један унос, али блокира сваки порт на том извору, што је другачија одлука и тражи сопствено образложење. Оставите protocol на tcp или udp и прихватите два уноса.

Докажите да правило постоји уместо да верујете поставци, јер поставка описује намеру док је ланац не задржи:

iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp

Сваки ланац треба да наведе једно правило, са -p tcp у првом и -p udp у другом, и оба именују блокирану адресу. Затим потврдите да се иста адреса одбија на оба транспорта. Ban који нисте видели у ланцу је нада, а следећи извештај о истом симптому поново ће коштати исти сат.

Шта ban још пропушта, и следећи случај

Оно што акција ради је да одбије један извор, и то само на портовима наведеним у њој. Не чини ништа против нападача који ротира адресе, и не може да одвоји непријатељску машину од carrier-grade NAT излаза који дели стотине корисника, где један ban искључује људе који нису ништа учинили. Уверите се да филтер чита адресу коју клијент заиста има, а не прослеђено заглавље или адресу проксија. Држите прозор довољно кратким да грешка сама истекне.

Ништа од овога не заговара прескакање поправке протокола; то заговара држање две идеје истовремено. Ban је ужи него што сажетак jail-а сугерише, а и потпун ban је ужи од претње. Ставите firewall ланац поред листе слушалаца демона и упоредите протокол по протокол, јер те две листе одлучују да ли ban уопште може да стигне до услуге.

Држите команду за поновно учитавање и листу ланаца у runbook-у поред jail-а. Следећој особи ће требати обоје, а сажетак jail-а јој неће рећи ни једно.

Повезани чланци