Usando iptables TPROXY en lugar de REDIRECT

Usando iptables TPROXY en lugar de REDIRECT

Estoy corriendo Debian 8. Estoy intentando interceptar todos los paquetes y actualmente estoy usando iptablespara esto:

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 5000

Esto parece funcionar, pero elimina la posibilidad de obtener el puerto de destino original en el paquete.

He leído TPROXYque debería ser el camino a seguir, ya que no se utiliza NAT.

Intenté reemplazar REDIRECTcon esto:

iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 5000

Pero no estoy interceptando ningún paquete en mi servicio al hacerlo...

Respuesta1

Documentation/networking/tproxy.txt en el árbol del kernel menciona lo siguiente:

El objetivo 'TPROXY' proporciona una funcionalidad similar sin depender de NAT. Simplemente agregue reglas como esta al conjunto de reglas de iptables anterior:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
  --tproxy-mark 0x1/0x1 --on-port 50080

Tenga en cuenta que para que esto funcione tendrá que modificar el proxy para habilitar (SOL_IP, IP_TRANSPARENT) para el socket de escucha.

¿Configuraste las opciones mencionadas anteriormente en el conector de escucha en tu aplicación?

Tenga en cuenta también que el documento anterior menciona la necesidad de agregar una regla y tabla de enrutamiento IP apropiadas para que los paquetes se entreguen localmente.

información relacionada