Usando iptables TPROXY em vez de REDIRECT

Usando iptables TPROXY em vez de REDIRECT

Estou correndo Debian 8. Estou tentando interceptar todos os pacotes e atualmente estou usando iptablespara isso:

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

Isso parece funcionar, mas elimina a possibilidade de obter a porta de destino original do pacote.

Eu li TPROXYque deveria ser o caminho a seguir, pois não está usando NAT.

Eu tentei substituir REDIRECTpor isso:

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

Mas não estou interceptando nenhum pacote no meu serviço ao fazer isso...

Responder1

Documentation/networking/tproxy.txt na árvore do kernel menciona o seguinte:

O alvo 'TPROXY' fornece funcionalidade semelhante sem depender de NAT. Basta adicionar regras como esta ao conjunto de regras do iptables acima:

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

Observe que para que isso funcione você terá que modificar o proxy para habilitar (SOL_IP, IP_TRANSPARENT) para o soquete de escuta.

Você configurou as opções mencionadas acima no soquete de escuta em seu aplicativo?

Observe também que o documento acima menciona a necessidade de adicionar regras e tabelas de roteamento IP apropriadas para que os pacotes sejam entregues localmente.

informação relacionada