Reduzca las reglas de firewall a la mitad: una regla de iptables para tcp y udp

12

Tengo una serie de reglas de iptables en mi firewall que se ven así:

iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT

¿Existe un acceso directo para tener dos reglas, una para tcp y otra para udp, para cada dirección? Quiero decir, ¿puedo hacer algo como esto?

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
Big McLargeHuge
fuente

Respuestas:

22

Cree una nueva cadena que acepte cualquier paquete TCP y UDP, y salte a esa cadena desde las reglas permisivas de IP / puerto individuales:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

Esto agrega la sobrecarga de algunas líneas adicionales, pero reduce a la mitad el número de reglas TCP / UDP.

Yo no omitir el -pargumento, ya que no sólo va a abrir el cortafuegos para ICMP, sino también cualquier otro protocolo. Desde la página de manual de iptables en -p:

El protocolo especificado puede ser uno de tcp, udp, icmp o todos, o puede ser un valor numérico, que representa uno de estos protocolos o uno diferente. También se permite un nombre de protocolo de / etc / protocol.

Es posible que no esté escuchando ningún protocolo, excepto TCP, UDP e ICMP en este momento , pero quién sabe qué deparará el futuro. Sería una mala práctica dejar el firewall abierto innecesariamente.

Descargo de responsabilidad: los comandos de iptables están fuera de mi cabeza; No tengo acceso a una casilla en la que probarlos en el cajero automático.

s.co.tt
fuente
Esta es una solución muy elegante que no deja el firewall abierto innecesariamente.
Big McLargeHuge
44
Pero este método de crear una nueva cadena fallará si el filtrado se realiza a través del número de puerto de destino. ¿Alguien puede sugerir cómo superar el problema mencionado anteriormente?
Amor
@Amor En este ejemplo, si utilizó -p alltodas las --dportreglas de la zone_lan_forwardcadena, eso podría lograr lo que está buscando. Por supuesto, estoy asumiendo que no hay otra forma de acceder a esa cadena con un protocolo que no sea TCP / UDP debido a la ACCEPT_TCP_UDPcadena. Obviamente, esta es una estrategia arriesgada si varias personas tienen acceso para modificar las reglas y alguien aparece y edita sus reglas sin comprender esta sutileza.
Samuel Harmer
Ooops No noté el orden de las cadenas. En este ejemplo, también debería cambiar el orden de las cadenas para que lo que acabo de decir funcione correctamente. Entonces ACCEPT_TCP_UDPsalta a lo zone_lan_forwardque luego salta a ACCEPT.
Samuel Harmer
2

Si realmente no le importa el tráfico ICMP (que de todos modos puede bloquear globalmente con una regla), puede omitir el indicador -p y cubrirá todos los protocolos.

Nathan C
fuente
¿Debería preocuparme el tráfico ICMP? Me preocupa principalmente el acceso HTTP.
Big McLargeHuge
Realmente no. Puede bloquear ICMP (ping) si lo desea, pero de todos modos no sirve de mucho.
Nathan C
@NathanC, creo que el consejo de abrir TODOS los puertos cuando el OP pregunta cómo reducir a la mitad sus reglas puede generar problemas, ahora o en el futuro.
Jed Daniels
@JedDaniels el conmutador -p especifica los protocolos y no los puertos. La respuesta a continuación tiene una alternativa si les importa bloquear cualquier cosa que no sea tcp y udp.
Nathan C
@NathanC Sí, y eliminar el -p significa "abrir todos los protocolos, no solo tcp o udp", lo cual es imprudente si no peligroso.
Jed Daniels