一聚教程网:一个值得你收藏的教程网站

热门教程

Linux 如何使用 iptables 限制广播包和多播包的洪泛

时间:2026-08-10 16:29:49 编辑:袖梨 来源:一聚教程网

核心是分层拦截:先用-m pkttype在链路层精准识别广播/组播帧,再结合limit限速丢弃异常流量,同步封禁IP层广播地址、停用Avahi等主动广播服务,并启用icmp_echo_ignore_broadcasts和rp_filter内核防护。

限制广播包和多播包洪泛,核心是分层拦截:先在链路层识别真实广播/组播帧,再结合速率控制丢弃异常流量,同时关闭系统级响应和主动广播服务。不能只靠单一规则,需四层协同。

用 -m pkttype 精准识别二层广播与组播帧

iptables 的 -m pkttype 模块专用于匹配以太网帧类型,工作在 INPUT 链(不适用于 FORWARD),能准确区分:

  1. --pkt-type broadcast:匹配目的 MAC 为 ff:ff:ff:ff:ff:ff 的帧(如 ARP 请求、DHCP Discover)
  2. --pkt-type multicast:匹配目的 MAC 以 01:00:5e(IPv4 组播)或 33:33(IPv6 组播、LLMNR、mDNS)开头的帧

注意:它不看 IP 地址,所以不会误判发往 255.255.255.255224.0.0.1 的单播包;也不适用于转发流——交换机本身不跨网段转发二层广播,所以无需在 FORWARD 链设此规则。

对识别出的包做速率限制再丢弃

单纯匹配后直接 DROP 容易误伤合法协议(如正常 IGMP 加入),应先限速再拦截超限流量:

  1. 广播限速示例(防 ARP/DHCP 泛洪):

    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

  2. 组播限速示例(控 mDNS/LLMNR 频次):

    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 决定了初始允许突发量,设得太小会导致合法组播(如首次服务发现)被拦,建议按实际协议行为微调。

同步封禁 IP 层广播地址和停用主动广播服务

pkttype 只管链路层,IP 层广播(如发往子网广播地址)需额外处理:

  1. 丢弃全局受限广播:iptables -A INPUT -d 255.255.255.255 -j DROP
  2. 丢弃本子网广播(替换为实际值,如 192.168.1.255):iptables -A INPUT -d 192.168.1.255 -j DROP
  3. 停用 Avahi(mDNS):systemctl stop avahi-daemon && systemctl disable avahi-daemon
  4. 禁用 Samba NetBIOS:echo "disable netbios = yes" >> /etc/samba/smb.conf,然后重启服务

执行 ss -ulpn | grep ':137|:5353' 确认 UDP 137(NetBIOS)、5353(mDNS)端口不再监听。

加固内核参数防反射与伪造

防止本机被用作 Smurf 攻击反射点或接收伪造源地址广播:

  1. 禁用 ICMP 广播响应:sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1,并写入 /etc/sysctl.conf
  2. 启用反向路径过滤:sysctl -w net.ipv4.conf.all.rp_filter=1,或按接口设置(如 net.ipv4.conf.eth0.rp_filter=1

rp_filter 能自动丢弃源 IP 不属于入向接口直连网段的包,大幅减少无效广播抵达协议栈的机会。

热门栏目