sábado, 16 de marzo de 2024

IPTables 101 - superviencia (reglas in/out )

 


IPTables 101 - superviencia  (reglas in/out )


Estoy escribiendo un artículo para una configuración de #MeshVPN con #Wireguard (en LATAM-ES para expandir la tecnología y los casos de uso para proyectos de bajo presupuesto o soluciones SOHO.)

Puedes usar los peers wireguard de site2site para tener servicios de clúster de recuperación automática ejecutándose en un túnel de alta velocidad)

Hay un servidor Debian en cada uno de los pares, así que tuve la oportunidad de hacer una nueva regla en #iptables, debido a que tenía muchas IP públicas en un servidor determinado, y la oportunidad de hacer las cosas correctamente estaba ahí, específicamente en el POSTROUTING cadena, y explicando lo que se le hizo a un tipo, surgió esta breve hoja de trucos de iptables.

Dos tipos de ejemplos se van a ver:

  • POSTROUTING (outbound to SNAT, source NAT el trafico por nuestra IP designada)

  • PREROUTING (inbound, trafico de entrada)

POSTROUTING  trafico por gateway segun Source IP

Es posible elegir por qué IP queremos que salga el tráfico a Internet. Según el caso de uso de este laboratorio/escenario:

IP 1- Una de esas IP es un pfSense con todas mis VLAN. El correo también sale de esta IP, por lo que es importante tenerlo limpio con otros proveedores de correo y con la lista negra de DNS.

IP 2- Otros servicios de infraestructura en otra VLAN fuera de las redes cerradas de pfSense, esto está directamente encima de Debian y no está virtualizado porque allí se ejecutan otros servicios no públicos, y la IP que se elige debe incluirse en la lista blanca según se desee en los otros extremos.

IP 3- Este es un jumpbox rdp/shell, una máquina Windows utilizada para navegar por la red, la IP puede registrarse, marcarse, está bien elegir la IP que podría estar sujeta a ataques y demás.

#IP 1
iptables -t nat -A POSTROUTING -o vmbr0 -s '10.100.0.10/32' -j SNAT --to x.x.x.1
#IP 2
iptables -t nat -A POSTROUTING -o vmbr0 -s '10.100.0.15/32' -j SNAT --to x.x.x.0
#IP 3
iptables -t nat -A POSTROUTING -o vmbr0 -s '10.100.0.16/32' -j SNAT --to x.x.x.2

Explicacion

  • iptables.... el command duh!.

  • -t nat, tipo nateo

  • -A , agregar

  • POSTROUTING , la cadena donde queremos que se procese esto (es para salida, sí, la necesitamos en la parte posterior del proceso de enrutamiento)

  • -o, interfaz de salida, en este caso, el puente predeterminado con la IP pública

  • -s, source, que es la IP del servidor que envía el tráfico. (aviso /32, que es para servidores/puertas de enlace individuales) PREROUTING  del tráfico que llega a nuestra puerta de enlace según criterios mixtos. Es posible elegir a qué IP queremos que vaya el tráfico y a qué socket en función de muchas cosas.

Aquí hay un par de reglas que se pueden modificar, incluso fusionar con las líneas POSTROUTING.
  • Port filtering con diferente criteria

iptables -t nat -A PREROUTING -i vmbr0 -d 298.10.139.0 -p tcp --dport 22 -j DNAT --to-destination 10.100.0.15:22  

- i , interface receiving traffico

-p protocol tcp

--dport, dest port

-j action , DNAT destination nat a la IP:puerto deseada in our internal net


  • Port filtering con criterio de IP origen, destino.

iptables -t nat -A PREROUTING -i vmbr0 -d 298.51.139.1 -p tcp --dport 443 -j DNAT --to 10.100.0.12:443  
iptables -t nat -A PREROUTING -i vmbr0 -s 193.147.11.112 -p tcp --d
 port 8933 -j DNAT --to 10.100.0.16:3389  

en ambos ejemplos el modificador es,

- d destination IP que venia en el header del request que recibimos

-s source IP que viene en el header del request que recibimos


  • Port Ranges (rangos de puertos)con tcp and udp

iptables -t nat -A PREROUTING -i vmbr0 -d 298.51.139.0 -p tcp --dport 6800:7300 -j DNAT --to-destination 10.100.0.15:6800-7300

iptables -t nat -A PREROUTING -i vmbr0 -p udp --dport 49152:65535 -j 
DNAT --to 10.100.0.12:49152-65535

Estos ejemplos tienen la diferencia de que utilizan rangos de puertos en lugar de un solo socket.

-p, protocol, puede ser TCP or UDP (en minuscula)

--dport port_start:port_end

--to-destination IPADDRESS:port_start:port_end


No hay comentarios:

Publicar un comentario