Filtrar o tráfego da porta espelhada usando iptables

4

Eu recebo tráfego de uma porta espelhada e gostaria de enviá-lo para um NFQUEUE para processamento. Por causa da porta espelhada, os endereços MAC de destino dos pacotes não são o endereço MAC do host. Portanto, o tráfego nunca chega ao meu NFQUEUE. (se eu pegar um pacote e usar o Scapy para substituir manualmente o endereço MAC de destino pelo endereço MAC do meu host, ele funciona)

Ele não funciona com a porta espelhada, mesmo com as regras de iptable aplicáveis o mais rápido possível no pipeline de filtragem:

iptables -A PREROUTING -t raw -j NFQUEUE --queue-num 1

Como mencionado em alguns outros tópicos, tentei criar uma ponte na minha interface e filtrar o tráfego usando os seguintes comandos.

tunctl -u root
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0
brctl setfd br0 0
brctl stp br0 off  
ifconfig br0 up
ifconfig eth0 up 0.0.0.0
ifconfig tap0 up 0.0.0.0
echo 0 > /sys/class/net/br0/bridge/ageing_time
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
iptables -F
iptables -A FORWARD -j NFQUEUE --queue-num 1

Mas mesmo essa solução não resolve meu problema. O tráfego não passa pela bridge por causa da diretiva bridge-nf-call-iptables . No entanto, não consigo obter pacotes na minha fila.

A propósito, minha versão do kernel é 3.13.0-32.

Estou procurando por qualquer solução que permita colocar o pacote recebido com endereço MAC aleatório no meu NFQUEUE.

Obrigado pela sua ajuda Julien

    
por user2319623 23.12.2014 / 12:21

1 resposta

1

Seu kernel ignora os pacotes que não são endereçados às interfaces de rede locais. Você deve mudar a eth0 para o modo promíscuo:

ip link set dev eth0 promisc on

Você pode tornar isso persistente por meio da configuração da rede:

Debian

auto eth0
iface eth0 inet manual
    up ifconfig eth0 promisc up
    down ifconfig eth0 promisc down

Redhat

BOOTPROTO=static
DEVICE=eth0
TYPE=Ethernet
PROMISC=yes
...
    
por 04.03.2015 / 00:50