Фильтрация трафика зеркального порта с использованием iptables
Я получаю трафик с зеркального порта и хочу отправить его в NFQUEUE для обработки. Из-за зеркального порта MAC-адреса назначения пакетов не являются MAC-адресами моего хоста. Поэтому трафик никогда не достигает моего NFQUEUE. (если я беру один пакет и использую Scapy для ручной замены MAC-адреса назначения на мой MAC-адрес хоста, это работает)
Он не работает с зеркальным портом даже при наличии правил iptable, которые применяются как можно скорее в конвейере фильтрации:
iptables -A PREROUTING -t raw -j NFQUEUE --queue-num 1
Как уже упоминалось в некоторых других потоках, я пытался создать мост на своем интерфейсе и фильтровать трафик, используя следующие команды.
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
Но даже это решение не решает мою проблему. Трафик не проходит через мост из-за директивы bridge-nf-call-iptables. Однако я не могу получить пакеты в моей очереди.
Кстати, у меня версия ядра 3.13.0-32.
Я ищу любое решение, которое позволяет поместить полученный пакет со случайным MAC-адресом в мою NFQUEUE.
Спасибо за вашу помощь, Жюльен
1 ответ
Ваше ядро игнорирует пакеты, которые не адресованы локальным сетевым интерфейсам. Вы должны изменить eth0 на случайный режим:
ip link set dev eth0 promisc on
Вы можете сделать это постоянным с помощью конфигурации сети:
Debian
auto eth0
iface eth0 inet manual
up ifconfig eth0 promisc up
down ifconfig eth0 promisc down
Красная шляпа
BOOTPROTO=static
DEVICE=eth0
TYPE=Ethernet
PROMISC=yes
...