Mis reglas de iptables

por | 19 junio, 2024

Hoy he decidido meter mano a mi iptables, como mi pc es de escritorio ha costado buscar alguna pagina para usar de guía así que fui sacando  ideas de varias páginas

Primero que nada quiero compartir esta imagen donde explica como es el proceso de las cadenas y tablas en iptables

Vamos a trabajar principalmente con la tabla mangle yo de forma personal cree una nueva cadena ya que todas las reglas se aplican a TCP y no UDP o ICMP.

Destacar que estamos trabajando con la tabla mangle, por lo que si hacemos un

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             icmp echo-request reject-with icmp-net-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

No veremos casi ninguna regla de las que aplicaremos a continuación, para verlas debemos indicar que queremos ver específicamente la tabla mangle

# iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
TCP        tcp  --  anywhere             anywhere            

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain TCP (1 references)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN/FIN,SYN
DROP       tcp  --  anywhere             anywhere             tcp flags:SYN,RST/SYN,RST
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN/FIN,SYN
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,RST/FIN,RST
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,ACK/FIN
DROP       tcp  --  anywhere             anywhere             tcp flags:ACK,URG/URG
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,ACK/FIN
DROP       tcp  --  anywhere             anywhere             tcp flags:PSH,ACK/PSH
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,PSH,URG
DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG
DROP       tcp  --  anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN ctstate NEW
DROP       tcp  --  anywhere             anywhere             ctstate NEW tcpmss match !536:65535

Estas reglas analizan principalmente los flags TCP de las conexiones, descartando inmediatamente todas aquellas que parezcan sospechosas, evitando que sean leídas por las capas superiores del modelo OSI

iptables -t mangle -N TCP
iptables -t mangle -A PREROUTING -p tcp -j TCP
iptables -t mangle -A TCP -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ALL ALL -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A TCP -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -t mangle -A TCP -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
iptables -t mangle -iptables -t mangle -A TCP -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

En mi caso me gusta personalizar una respuesta al ping (icmp-echo-reply), de esta forma puedo saber que mi host esta arriba dejando la duda a los sistemas automatizados

iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-net-unreachable

Para permitir el descubrimiento que hace Dropbox a nivel de lan agregamos (en mi caso la política por defecto es DROP)

iptables -A INPUT -p tcp --dport=17500 -j ACCEPT

Lamentablemente perdí el link donde se explicaba cada uno de estos comandos en mayor detalle.

fuente imagen:

https://es.m.wikipedia.org/wiki/Archivo:Netfilter-packet-flow.svg

2 pensamientos en “Mis reglas de iptables

  1. Panzer

    Iptables tiene un bug si se realiza un barrido de puertos desde una máquina openbsd con una IP fuera del rango europeo que permite acceder a um socket del scheduler del kernel.

    Responder
    1. Yikoru Autor

      uy no conocía ese, de igual forma desde que cree originalmente ese post a la fecha han salido varias vulnerabilidades que afectan precisamente a iptables, por eso la importancia de mantener el software actualizado.
      Igualmente a día de hoy nftables de a poco ha ido entrando en reemplazo de iptables, en muchas distribuciones tienen desplegadas capas de compatibilidad que permiten seguir utilizando la sintaxis de iptables pero por abajo utiliza nftables.
      De igual forma agradezco tu comentario ya que como comenté no tenía ese conocimiento

      Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *