Éin banaction, to transportar: reparere ein fail2ban-VPN-jail
Ein ban er berre så brei som protokollen i handlinga si. Samanlikn teljarane i kjeda med lyttarane, og dekk deretter begge transportane i sjølve jailen.
Ingenting i fail2ban slepp eit pakke av seg sjølv: det kallar på ei handling, og det er handlinga som namngir protokoll og port. Når jailen rapporterer ein ban medan daemonen held fram med å godta påloggingar, er banen som regel ekte og smalare enn loggen antydar. Ein klient som koplar til på nytt over den andre transporten, møter aldri regelen som vart installert. Samanlikn det handlinga installerte med det daemonen lyttar på før du endrar noko, fordi provet ligg i brannmur-kjeda handlinga skreiv, ikkje i lista til jailen.
Les kjeda, ikkje samandraget til jailen
fail2ban set inn si eiga kjede framfor tenestekjeda, så ei teljarliste viser nøyaktig kva som finst. Ei kjede kalla opp etter jailen, som held éin regel der protokollkolonnen les udp, er ei fullstendig forklaring på TCP-påloggingar som held fram med å kome inn. Berre UDP-pakkar frå den blokkerte kjelda vert avviste. Tenesta har ein TCP-lyttar, og ingenting i den kjeda rører han.
Sjå også etter nabo-jail-effekten. Ein vert kan sjå perfekt konfigurert ut berre fordi ein annan jail leverer den halvdelen som manglar, og same bygg gjer ingenting der den jailen ikkje er installert.
Handlinga namngir éin protokoll, og det er der det knekk
Kvar banaction er ein mal for ein brannmurkommando, og protokollen sit i ein av plasshaldarane. Det tronge omfanget er med vilje, sidan ein web-jail og ein DNS-jail ikkje har noko med å blokkere identiske portar å gjere. Det vert ei felle når tenesta lyttar på meir enn éin transport, noko VPN-daemonar rutinemessig gjer. Filteret kan overvake mislukka påloggingar frå begge transportane medan handlinga dekkjer éin.
SoftEther- og OpenVPN-utrullingar lyttar vanlegvis på UDP og TCP samtidig, og fordi logglinja ser lik ut i begge tilfelle, overvaker filteret begge. Asymmetrien viser seg aldri i rapporten til jailen sjølv. fail2ban talde feila riktig og installerte deretter ein regel som gjeld for halvparten av trafikken feila kom inn på.
La banen dekkje begge transportane
Rett det i jaildefinisjonen i staden; handskrivne reglar vert stokka om ved neste omlasting. Skriv ut to handlingar, éi for kvar protokoll:
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"]
Ikkje prøv å forkorte det med protocol = all. Standard-banaction er ei multiport-handling, og ho vert utvida til -p <protocol> -m multiport --dports <port>; utan L4-protokoll er det ingenting for porttreffet å teste, så iptables avviser regelen medan jailen framleis rapporterer ein vellukka ban. Ei handling for alle portar som iptables-allports eller nftables-allports godtek éin oppføring, men blokkerer kvar port på den kjelda, noko som er ei anna avgjerd og treng si eiga grunngjeving. La protocol stå på tcp eller udp og godta dei to oppføringane.
Prov at regelen finst i staden for å stole på innstillinga, fordi ei innstilling skildrar ein intensjon til ei kjede held han:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
Kvar kjede bør liste éin regel, med -p tcp i den første og -p udp i den andre, og begge namngir den blokkerte adressa. Stadfest deretter at same adresse vert avvist på begge transportane. Ein ban du ikkje har sett i kjeda, er eit håp, og neste rapport om same symptom vil koste den same timen igjen.
Kva ein ban framleis går glipp av, og neste tilfelle
Det handlinga gjer, er å avvise éi kjelde, og berre på portane som er lista i ho. Ho gjer ingenting mot ein angripar som roterer adresser, og ho kan ikkje skilje ein fiendtleg maskin frå ein carrier-grade NAT-utgang som hundrevis av brukarar deler, der éin ban stenger ute folk som ikkje har gjort noko. Sørg for at filteret les adressa klienten faktisk har, ikkje ein videresend header eller ei proxyadresse. Hald vindauget kort nok til at ein feil går ut av seg sjølv.
Ingenting av dette talar for å hoppe over protokollrettinga; det talar for å halde to idear samtidig. Banen er smalare enn samandraget til jailen antydar, og sjølv ein fullstendig ban er smalare enn trugselen. Set brannmur-kjeda ved sida av lyttarlista til daemonen og samanlikn protokoll for protokoll, fordi dei to listene avgjer om ein ban i det heile kan nå tenesta.
Hald omlastingskommandoen og kjeldelista i runbooken ved sida av jailen. Den neste personen treng begge, og samandraget til jailen vil ikkje fortelje han nokon av dei.