在OpenWrt中使用iptables过滤特定字符串

当前的需求如下:需要选择性地过滤掉远程客户端向NAT下的服务器发送的特定请求。
网络拓扑:Client—Internet—WAN–OpenWrt Router–LAN–Server

经过实践,方法如下:

# 安装iptables-mod-filter
opkg update
opkg install iptables-mod-filter

# 丢弃包含 abcd 字符串的数据包
iptables -I FORWARD 1 -p tcp -m string --string "abcd" --algo bm -j DROP
iptables -I FORWARD 1 -p udp -m string --string "abcd" --algo bm -j DROP

# 恢复正常
iptables -L --line-numbers
iptables -D FORWARD 1   # 这个1是刚才输出的对应序号

在执行命令后,在LAN抓包,发现对应的数据包果然不见了,证明命令生效。再执行后续的命令,在LAN抓包,又可恢复正常的不丢包状态。

对于其他网络拓扑,可把FORWARD链改为INPUT或OUTPUT。


发表评论