TPROXY para redirecionar o UDP em portas arbitrárias

2

Eu quero interceptar todo o tráfego UDP, deixando tap1. E possivelmente responder a, e. Solicitações de DNS. Para conseguir isso eu escrevi alguns códigos Python ouvindo o localhost e use iptables com um conjunto de regras como este:

Chain PREROUTING (policy ACCEPT 2 packets, 333 bytes)
 pkts bytes target     prot opt in     out     source               destination   

    0     0 DIVERT     udp  --  tap1   any     anywhere             anywhere             socket
    0     0 TPROXY     udp  --  tap1   any     anywhere             anywhere             TPROXY redirect 127.0.0.1:5001 mark 0x1/0x1


Chain DIVERT (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MARK       udp  --  any    any     anywhere             anywhere             MARK set 0x1
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere

O encaminhamento de políticas é feito com:

ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

Esta configuração foi adaptada do Documentation / networking / tproxy.txt do kernel. Isso funciona perfeitamente para um soquete TCP aberto com a opção IP_TRANSPARENT.

Infelizmente, os soquetes UDP não parecem conseguir manipular conexões. Por exemplo, se eu fizer um ncat -u localhost 1234 , o soquete receberá dados, mas não poderá enviar nada de volta. O Wireshark mostrará exatamente três pacotes para:

  1. o pacote ncat recebido (para localhost: 1234)
  2. o pacote de saída do meu software (para: 5001)
  3. uma porta ICMP inacessível (é claro)

Para que portas arbitrárias funcionem, acho que não é viável configurar regras NAT (S) apropriadas.

Então, qual é a configuração necessária para que isso funcione para portas de entrada arbitrárias ?

    
por ThomasP 11.06.2013 / 01:53

0 respostas

Tags