我从镜像端口接收流量,我想将其发送到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.
谢谢你的帮助,
朱利安
解决方法
您的内核会忽略未发送到本地网络接口的软件包.您应该将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 ...