帮助中心

iptables 的实时流量监控 打印

  • 0
  • watch, iptables

watch 结合 iptables 可以实时监控网络流量,主要通过观察 iptables 规则的计数器变化来实现。以下是具体步骤和示例:


1. 创建监控流量的 iptables 规则

首先添加一条自定义规则,用于捕获特定流量并统计其数据包数量和字节数。

示例:监控所有流量(谨慎使用)

bash
复制
# 添加规则到 INPUT 和 OUTPUT 链
sudo iptables -A INPUT -j ACCEPT
sudo iptables -A OUTPUT -j ACCEPT

示例:监控特定端口(如 HTTP 80)

bash
复制
# 监控入站 HTTP 流量
sudo iptables -A INPUT -p tcp --dport 80
# 监控出站 HTTP 流量
sudo iptables -A OUTPUT -p tcp --sport 80

示例:监控特定 IP 的流量

bash
复制
# 监控来自 192.168.1.100 的流量
sudo iptables -A INPUT -s 192.168.1.100
# 监控发往 192.168.1.100 的流量
sudo iptables -A OUTPUT -d 192.168.1.100

2. 使用 watch 实时查看计数器

通过 watch 定期刷新 iptables 规则的计数器。

基本命令

bash
复制
# 每 1 秒刷新一次,查看所有规则
sudo watch -n 1 "iptables -nvL"

# 查看指定链(如 INPUT)
sudo watch -n 1 "iptables -nvL INPUT"

筛选特定规则

若规则较多,可通过 grep 过滤:

bash
复制
sudo watch -n 1 "iptables -nvL INPUT | grep 'dpt:80'"

3. 高级用法:动态监控流量趋势

创建专用监控链

  1. 新建链

    bash
    复制
    sudo iptables -N TRAFFIC_MONITOR
    sudo iptables -A INPUT -j TRAFFIC_MONITOR
    sudo iptables -A OUTPUT -j TRAFFIC_MONITOR
  2. 添加规则到监控链

    bash
    复制
    # 监控 SSH 流量(端口 22)
    sudo iptables -A TRAFFIC_MONITOR -p tcp --dport 22
  3. 实时查看

    bash
    复制
    sudo watch -n 1 "iptables -nvL TRAFFIC_MONITOR"

4. 清除监控规则

监控结束后,删除规则以避免干扰正常防火墙功能:

bash
复制
# 删除自定义链
sudo iptables -D INPUT -j TRAFFIC_MONITOR
sudo iptables -D OUTPUT -j TRAFFIC_MONITOR
sudo iptables -F TRAFFIC_MONITOR  # 清空链
sudo iptables -X TRAFFIC_MONITOR  # 删除链

# 重置所有计数器
sudo iptables -Z

5. 结合其他工具增强监控

  • 可视化工具:将 iptables 计数器的输出重定向到文件,然后用 iftopnload 或 vnstat 进行可视化。

  • 日志记录:通过 iptables LOG 目标记录流量详情:

    bash
    复制
    sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP Traffic: "

    日志默认保存在 /var/log/syslog 或 /var/log/messages


注意事项

  1. 性能影响:频繁更新规则或监控高流量时,可能增加系统负载。

  2. 规则优先级:确保监控规则不会覆盖关键防火墙策略。

  3. 临时使用:长期监控建议使用专用工具(如 nethogsiftop)。

通过这种方法,你可以快速实现基于 iptables 的实时流量监控,适合临时诊断或简单场景。

这篇文章有帮助吗?
« 返回