Res de fail2ban no descarta cap paquet per si sol: crida una acció, i aquesta acció és la que anomena un protocol i un port. Quan la jail informa d'un ban mentre el dimoni continua acceptant connexions, el ban sol ser real i més estret del que implica el registre. Un client que es reconnecta per l'altre transport mai no troba la regla que es va instal·lar. Compareu què ha instal·lat l'acció amb què escolta el dimoni abans de canviar res, perquè la prova és a la cadena de tallafocs que va escriure l'acció, no a la llista de la jail.

Llegiu la cadena, no el resum de la jail

fail2ban insereix la seva pròpia cadena davant de la cadena del servei, així que un llistat de comptadors mostra exactament què existeix. Una cadena amb el nom de la jail, que té una sola regla la columna de protocol de la qual diu udp, és una explicació completa de les connexions TCP que continuen arribant. Només es rebutgen els paquets UDP de l'origen bloquejat. El servei té un escoltador TCP, i res d'aquella cadena no el toca.

Vigileu també l'efecte de la jail veïna. Un amfitrió pot semblar perfectament configurat només perquè una altra jail aporta la meitat que falta, i la mateixa compilació no fa res allà on aquesta jail no és instal·lada.

L'acció anomena un sol protocol, i és aquí on es trenca

Cada banaction és una plantilla de comanda de tallafocs, i el protocol se situa en un dels seus marcadors. L'estretor és intencionada, ja que una jail web i una jail DNS no tenen cap motiu per bloquejar ports idèntics. Es converteix en un parany quan el servei escolta més d'un transport, cosa que els dimonis VPN fan habitualment. El filtre pot vigilar les connexions fallides dels dos transports mentre l'acció en cobreix un.

Els desplegaments de SoftEther i OpenVPN solen escoltar en UDP i TCP alhora, i com que la línia del registre sembla igual en tots dos casos, el filtre vigila tots dos. L'asimetria no apareix mai a l'informe de la mateixa jail. fail2ban va comptar correctament les fallades i després va instal·lar una regla que s'aplica a la meitat del trànsit pel qual havien arribat aquelles fallades.

Feu que el ban cobreixi els dos transports

Arregleu-ho a la definició de la jail; les regles escrites a mà es remenaran en la propera recàrrega. Especifiqueu dues accions, una per a cada protocol:

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"]

No proveu d'escurçar-ho amb protocol = all. La banaction per defecte és una acció multiport, i s'expandeix a -p <protocol> -m multiport --dports <port>; sense protocol L4 no hi ha res perquè la concordança de port comprovi, així que iptables rebutja la regla mentre la jail encara informa d'un ban correcte. Una acció de tots els ports com iptables-allports o nftables-allports sí que accepta una sola entrada, però bloqueja tots els ports d'aquell origen, cosa que és una decisió diferent i necessita la seva pròpia justificació. Deixeu protocol a tcp o udp i accepteu les dues entrades.

Demostreu que la regla existeix en lloc de confiar en el paràmetre, perquè un paràmetre descriu una intenció fins que una cadena el sosté:

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

Cada cadena hauria de llistar una regla, amb -p tcp a la primera i -p udp a la segona, totes dues amb l'adreça bloquejada. Després confirmeu que la mateixa adreça es refusa en els dos transports. Un ban que no heu vist a la cadena és una esperança, i el proper informe del mateix símptoma tornarà a costar la mateixa hora.

Què encara deixa escapar un ban, i el proper cas

El que fa l'acció és rebutjar un sol origen, i només als ports que hi figuren. No fa res contra un atacant que rota adreces, i no pot separar una màquina hostil d'una sortida NAT de nivell operador compartida per centenars d'usuaris, on un sol ban deixa fora persones que no han fet res. Assegureu-vos que el filtre llegeix l'adreça que el client té realment, no una capçalera reenviada ni una adreça de servidor intermediari. Mantingueu la finestra prou curta perquè un error caduqui sol.

Res d'això no defensa saltar-se l'arranjament del protocol; defensa sostenir dues idees alhora. El ban és més estret del que suggereix el resum de la jail, i fins i tot un ban complet és més estret que l'amenaça. Poseu la cadena de tallafocs al costat de la llista d'escoltadors del dimoni i compareu protocol per protocol, perquè aquestes dues llistes decideixen si un ban pot arribar al servei.

Guardeu la comanda de recàrrega i el llistat de cadenes al runbook, al costat de la jail. La propera persona necessitarà totes dues, i el resum de la jail no li dirà cap de les dues.

Articles relacionats