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
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.
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