Possível para a ponte linux interceptar o tráfego?

4

Eu tenho uma configuração da máquina Linux como uma ponte entre um cliente e um servidor;

brctl addbr0
brctl addif br0 eth1
brctl addif br0 eth2
ifconfig eth1 0.0.0.0
ifconfig eth2 0.0.0.0
ip link set br0 up

Eu também tenho um aplicativo escutando na porta 8080 desta máquina. É possível que o tráfego destinado à porta 80 seja passado para o meu aplicativo? Eu fiz algumas pesquisas e parece que isso poderia ser feito usando ebtables e iptables .

Aqui está o resto da minha configuração:

//set the ebtables to pass this traffic up to ip for processing; DROP on the broute table should do this
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP

//set iptables to forward this traffic to my app listening on port 8080
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 8080 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1/1

//once the flows are marked, have them delivered locally via loopback interface
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

//enable ip packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

No entanto, nada está entrando em meu aplicativo. Estou faltando alguma coisa? Meu entendimento é que o DROP alvo na broute BROUTING cadeia irá empurrá-lo para ser processado pelo iptables.

Em segundo lugar, existem outras alternativas que eu deveria investigar?

Edit: IPtables pega no PREROUTING nat, mas parece que cai depois disso; a cadeia INPUT (no mangle ou no filtro) não vê o pacote.

    
por A G 22.08.2012 / 16:16

1 resposta

0

Eu decidi manter o comportamento de ligação. Usarei ebtables para bloquear o tráfego que quero interceptar e fazer com que meu aplicativo use sockets raw para interceptar esses pacotes. Parece um pouco de um kludge, mas parece funcionar.

    
por 06.09.2012 / 15:21