我从镜像端口接收流量,我想将其发送到 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
但即使这个解决方案也不能解决我的问题。交通无法通过这座桥,因为网桥-nf-调用-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
...