• 在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。