温馨提示×

Ubuntu Sniffer如何进行网络流量控制

小樊
39
2025-12-19 21:37:01
栏目: 智能运维

Ubuntu 下 Sniffer 与流量控制的定位与组合

在 Linux 语境中,Sniffer通常指用于抓取与分析网络流量的工具(如 tcpdump),其职责是“观测”而非“限速/整形”。若要进行网络流量控制(限速、延迟、优先级、丢弃等),应使用内核的 tc(Traffic Control) 框架;若需要按规则阻断/放行或限流,可配合 iptables/nftables 使用。典型分工如下:

  • 观测:tcpdump、Wireshark(抓包与分析)
  • 控制:tc(队列/整形/调度)
  • 过滤/限流:iptables/nftables(匹配与动作)
  • 观测带宽与进程:iftop、nethogs、vnstat(辅助定位与验证) 上述工具在 Ubuntu 均可直接安装使用。

使用 tc 进行流量整形与限速

  • 典型目标与命令组合
    • 对整个接口做限速(HTB 分层令牌桶)
      sudo tc qdisc add dev eth0 root handle 1: htb default 30
      sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
      sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20mbit ceil 50mbit
      sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 10mbit ceil 30mbit
      sudo tc class add dev eth0 parent 1:1 classid 1:30 htb rate 5mbit ceil 5mbit
      sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
      sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 443 0xffff flowid 1:20
      
      说明:将接口总带宽设为 100mbit,把 80/443 分别放入 20/10mbit 的保证带宽(上限 50/30mbit),其余流量进入 5mbit 的默认类。
    • 模拟延迟与抖动(netem)
      sudo tc qdisc add dev eth0 root handle 1: prio
      sudo tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 100ms 20ms
      sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:1
      
      说明:对 22 端口之外的流量增加 100ms ± 20ms 延迟,便于测试弱网场景。
    • 清理规则
      sudo tc qdisc del dev eth0 root
      
  • 常用查看命令
    tc qdisc show dev eth0
    tc class show dev eth0
    tc filter show dev eth0
    

以上命令展示了在 Ubuntu 上使用 tc 实现接口限速、按端口分流、延迟注入与规则清理的常用做法。

按规则丢弃或限流的防火墙手段

  • 使用 iptables 限速(连接速率限制)
    sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 200 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 80 -j DROP
    
    说明:对访问 80 端口的新连接进行速率限制,超过阈值将被丢弃(常用于缓解 DoS/暴力扫描)。
  • 使用 nftables(现代替代方案,Ubuntu 20.04+ 可用)
    sudo nft add table ip filter
    sudo nft add chain ip filter input { type filter hook input priority 0 \; }
    sudo nft add rule ip filter input tcp dport 80 limit rate 25/minute burst 200 accept
    sudo nft add rule ip filter input tcp dport 80 drop
    
  • 规则持久化
    • iptables:
      sudo iptables-save > /etc/iptables/rules.v4
      
    • nftables:
      sudo nft list ruleset > /etc/nftables.conf
      

以上示例展示了如何用 iptables/nftables 按规则对特定端口进行速率限制与丢弃,并提供了持久化方法。

用抓包工具验证与定位

  • 实时抓包观察限速/丢包效果
    sudo tcpdump -i eth0 -nn -ttt port 80 or port 443
    
  • 按条件过滤与导出
    sudo tcpdump -i eth0 -w http_only.pcap tcp port 80
    
  • 带宽与进程观测(辅助判断控制是否生效)
    sudo iftop -i eth0
    sudo nethogs eth0
    vnstat -i eth0
    

上述工具可帮助你在应用 tc/iptables 前后对比延迟、丢包、吞吐与占用,快速验证策略是否生效。

合规与安全提示

  • 抓包与流量控制可能触及隐私与业务连续性,务必在取得明确授权的网络与主机上操作,先在测试环境验证,再推广到生产。
  • 对线上接口做限速/丢弃前,设置监控告警回滚方案,避免误伤关键业务。

0