Ништо во fail2ban не фрла пакет само по себе: тој повикува дејство, и токму тоа дејство го именува протоколот и портата. Кога jail пријавува ban додека демонот продолжува да прифаќа најави, ban-от обично е вистински и потесен отколку што навестува логот. Клиент што повторно се поврзува преку другиот транспорт никогаш не ја сретнува инсталираната регула. Пред да промените нешто, споредете што инсталирало дејството со она што демонот го слуша, зашто доказот е во синџирот на огнениот ѕид што го напишало дејството, а не во списокот на jail.

Читајте го синџирот, не резимето на jail

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

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

Дејството именува еден протокол, и токму таму се крши

Секој banaction е шаблон за команда на огнен ѕид, а протоколот стои во еден од неговите заменски места. Тесноста е намерна, бидејќи веб-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 уште пропушта, и следниот случај

Она што дејството го прави е да одбие еден извор, и тоа само на портите наведени во него. Не прави ништо против напаѓач што ги менува адресите, и не може да ја оддели непријателската машина од излезот на NAT на ниво на оператор што го делат стотици корисници, каде еден ban ги исклучува луѓето што не направиле ништо. Проверете дека филтерот ја чита адресата што клиентот навистина ја има, а не проследено заглавие или адреса на посредник. Држете го прозорецот доволно краток за грешката сама да истече.

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

Чувајте ја командата за вчитување и списокот на синџири во runbook до jail. Следниот човек ќе ги треба двете, а резимето на jail нема да му каже ниту едно.

Поврзани статии