核心是分层拦截:先用-m pkttype在链路层精准识别广播/组播帧,再结合limit限速丢弃异常流量,同步封禁IP层广播地址、停用Avahi等主动广播服务,并启用icmp_echo_ignore_broadcasts和rp_filter内核防护。
限制广播包和多播包洪泛,核心是分层拦截:先在链路层识别真实广播/组播帧,再结合速率控制丢弃异常流量,同时关闭系统级响应和主动广播服务。不能只靠单一规则,需四层协同。
iptables 的 -m pkttype 模块专用于匹配以太网帧类型,工作在 INPUT 链(不适用于 FORWARD),能准确区分:
ff:ff:ff:ff:ff:ff 的帧(如 ARP 请求、DHCP Discover)01:00:5e(IPv4 组播)或 33:33(IPv6 组播、LLMNR、mDNS)开头的帧注意:它不看 IP 地址,所以不会误判发往 255.255.255.255 或 224.0.0.1 的单播包;也不适用于转发流——交换机本身不跨网段转发二层广播,所以无需在 FORWARD 链设此规则。
单纯匹配后直接 DROP 容易误伤合法协议(如正常 IGMP 加入),应先限速再拦截超限流量:
iptables -A INPUT -m pkttype --pkt-type broadcast -m limit --limit 30/min --limit-burst 30 -j ACCEPT
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
iptables -A INPUT -m pkttype --pkt-type multicast -m limit --limit 5/sec --limit-burst 10 -j ACCEPT
iptables -A INPUT -m pkttype --pkt-type multicast -j DROP
limit 模块的 --limit-burst 决定了初始允许突发量,设得太小会导致合法组播(如首次服务发现)被拦,建议按实际协议行为微调。
pkttype 只管链路层,IP 层广播(如发往子网广播地址)需额外处理:
iptables -A INPUT -d 255.255.255.255 -j DROP
192.168.1.255):iptables -A INPUT -d 192.168.1.255 -j DROP
systemctl stop avahi-daemon && systemctl disable avahi-daemon
echo "disable netbios = yes" >> /etc/samba/smb.conf,然后重启服务执行 ss -ulpn | grep ':137|:5353' 确认 UDP 137(NetBIOS)、5353(mDNS)端口不再监听。
防止本机被用作 Smurf 攻击反射点或接收伪造源地址广播:
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1,并写入 /etc/sysctl.conf
sysctl -w net.ipv4.conf.all.rp_filter=1,或按接口设置(如 net.ipv4.conf.eth0.rp_filter=1)rp_filter 能自动丢弃源 IP 不属于入向接口直连网段的包,大幅减少无效广播抵达协议栈的机会。