
Estou correndo Debian 8
. Estou tentando interceptar todos os pacotes e atualmente estou usando iptables
para 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 TPROXY
que deveria ser o caminho a seguir, pois não está usando NAT
.
Eu tentei substituir REDIRECT
por 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.