
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.64
se procesará primero en el reenvío. Primero coincidirá con la -j TEST
regla. 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