¿Crear una cadena IPTABLES, cuyas reglas se ignoran, a menos que el paquete provenga de un puerto determinado?

¿Crear una cadena IPTABLES, cuyas reglas se ignoran, a menos que el paquete provenga de un puerto determinado?

Quiero confirmar lo siguiente. Si creo una cadena cuya primera regla es:

iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name

¿Eso significa que no se verifican otras reglas especificadas en la cadena, a menos que el paquete provenga de esos puertos?

Estoy usando fail2bany creé un filtro con una regla de prohibición que especifica el puerto 25, 465, usando -m multiport --dports 25,465. Pero este filtro terminó creando una cantidad de reglas lo suficientemente grande como para que ocasionalmente el ksoftirqdproceso usara mucha CPU y la red se volviera lenta. Noté que esto ocurría cuando el servidor tenía muchas E/S en otros puertos.

Supongo que cada paquete analizaba todas las reglas de mi cadena. Espero poder evitar esto agregando la primera regla vista arriba, de modo que los paquetes que no estén en los puertos 25 y 465 no se molesten en verificar el resto de las reglas en esa cadena. Si esto no soluciona eso, agradecería conocer cualquier otra posible solución.

Respuesta1

No "de" sino "hacia". --dportslizadestinopuertos. La regla tal como la escribió significa: "si el paquete se envió a mi servicio escuchando en el puerto TCP 25 o 465, procéselo en la cadena name". La forma en que se procesará depende del contenido de esa cadena. Si no coincide con ningunoacción final( ACCEPT, REJECT, DROP) regla en esa cadena, o si coincide con una regla con la RETURNacción, su procesamiento continuará en la cadena que llama ( INPUT) con la regla siguiente a esta.

De forma predeterminada, fail2bancrea una cadena y una regla que invoca la cadena solo para paquetes destinados a cierto puerto (a menos que esté usando ...-allportsuna acción, que no es la predeterminada). A esa cadena agrega una regla DROP para cada IP prohibida. Así, por ejemplo, los paquetes del servidor web no se enviarán para su procesamiento a la cadena creada para sshdla cárcel suministrada. Por lo tanto, "excluir" deliberadamente ciertos puertos del procesamiento de fail2ban de la manera que usted sugiere no es productivo; ya funciona así.

Para evitar crear cadenas con demasiadas reglas con fail2ban, investigaipset-acciones relacionadas. En lugar de crear una cadena, f2b-jailnamecrea unaconjunto de direcciones IPy una única regla que coincide se refiere al ipset. Cada IP prohibida se agrega al ipset, en lugar de crear una regla separada en la cadena. El ipset tiene la característica de complejidad O(1), lo que significa que su velocidad de procesamiento no depende de la cantidad de elementos que contiene; puede contener hasta 65536 elementos.

Para usarlo, en resumen, debe anular el valor predeterminado banaction = iptablespara banaction = iptables-ipsetsus cárceles. Nunca debe modificar los archivos de configuración proporcionados por la distribución; en su lugar, cree /etc/fail2ban/jail.localun archivo donde agregue sus anulaciones:

[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset

(Esto utilizará el postfixfiltro de correo proporcionado y reaccionará en todo smtpdtipo de servicios. Si utiliza otro servidor de correo, ajústelo en consecuencia).

Otra forma de lograr una mejor eficiencia del firewall es comenzar a usarnftablesmarco en lugar de iptables. Tiene características de conjuntos de IP.integrado, y puedes usarlo con fail2ban usando el archivo banaction = nftables. La ganancia de eficiencia para aparatos grandes será aproximadamente la misma.

información relacionada