Las reglas de iptables cortan la conexión o la dejan abierta

Las reglas de iptables cortan la conexión o la dejan abierta

He estado trabajando para mejorar mis reglas de iptable. Aquí hay algunos antecedentes sobre lo que he hecho hasta ahora y lo que planeo lograr y mis problemas:

Tengo un RPi y tengo un módulo WiFi y le he conectado un módem 3G. Quiero que todo el tráfico de mi WiFi se reenvíe a mi interfaz 3G. Creé estas reglas y funcionan bien y obtengo acceso completo a Internet en la tableta cuando emparejo:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -F
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -F
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    iptables -A FORWARD -i ppp0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i wlan1 -o ppp0 -j ACCEPT

Ahora quiero bloquear todo eso y permitir que solo pase el tráfico que va a dos direcciones IP. Creé una cadena pero las cosas no funcionan tan bien como esperaba:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -F
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -F
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    iptables -N TEST
    iptables -A TEST -d 34.215.23.64 -j RETURN
    iptables -A TEST -d 52.37.29.39 -j RETURN
    iptables -A TEST -j ACCEPT 
    iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
    iptables -A FORWARD -i wlan1 -o ppp0 -j DROP

Cuando ejecuto esto, se bloquea todo el acceso a Internet, incluidas esas dos direcciones IP. Lo intenté ! con el mismo resultado.

¿Alguien puede ayudarme a descubrir qué me falta en esto?

Gracias

Respuesta1

iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN

Su principal problema es que estas reglas no tendrán estado y usted solo las ha manejado en una dirección. Si pretendemos por un momento que no hubo otros problemas, estas reglas solo manejarían el tráfico en una dirección. Pero dado que probablemente necesite comunicación bidireccional, ¿cómo obtendrá respuestas a cualquier cosa que envíe y que tenga el destino '34.215.23.64'? La respuesta será un paquete que tendrá como dirección de origen '34.215.23.64' y el destino será su IP.

Por lo tanto, debería considerar al menos volver a agregar la iptables ... --state RELATED,ESTABLISHED ...regla ().

iptables -N TEST
iptables -A TEST -d  -j RETURN
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
iptables -A TEST -j ACCEPT 
iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
iptables -A FORWARD -i wlan1 -o ppp0 -j DROP

Pero ese no es el único problema. La lógica de tu cadena está rota.

Por lo tanto, un paquete destinado a 34.215.23.64se procesará primero en el reenvío. Primero coincidirá con la -j TESTregla. En la cadena TEST, ese paquete simplemente se envía de regreso a la cadena (-j RETURN), y luego la siguiente regla coincidente es DROP.

De todos modos, prueba algo como esto.

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# permit all established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# chain for wlan -> ppp0 traffic
iptables -N WLAN2PPP
iptables -A WLAN2PPP -d 34.215.23.64 --state NEW -j ACCEPT
iptables -A WLAN2PPP -d 52.37.29.39 --state NEW -j ACCEPT
# everything else from wlan to ppp0 is dropped
iptables -A WLAN2PPP -j DROP
# send wlan1 -> ppp0 traffic to the chain. 
iptables -A FORWARD -i wlan1 -o ppp0 -j WLAN2PPP

información relacionada