Linux (Ubuntu) 的流量监控与限制(月100G)


sudo apt update
sudo apt install iptables iproute2 iptables-persistent -y

iptables

# 创建一个新的iptables链来跟踪流量
sudo iptables -N TRAFFIC_TRACKING

# 将所有流量传送到新链
sudo iptables -A INPUT -j TRAFFIC_TRACKING
sudo iptables -A OUTPUT -j TRAFFIC_TRACKING

# 跟踪下载流量(入站流量)
sudo iptables -A TRAFFIC_TRACKING -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
# 确保SSH流量不被限制
sudo iptables -A TRAFFIC_TRACKING -p tcp --dport 22 -j RETURN  

# 计数流量
sudo iptables -A TRAFFIC_TRACKING -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A TRAFFIC_TRACKING -m conntrack --ctstate ESTABLISHED -j ACCEPT

# 记录流量,104857600000字节等于100GB
sudo iptables -A TRAFFIC_TRACKING -m connbytes --connbytes 0:104857600000 --connbytes-dir both --connbytes-mode bytes -j RETURN

# 如果流量超过100GB,丢弃新的连接
sudo iptables -A TRAFFIC_TRACKING -m connbytes --connbytes 104857600000: --connbytes-dir both --connbytes-mode bytes -j DROP

# 保存并应用iptables规则,确保iptables规则在重启后依然生效
sudo mkdir -p /etc/iptables
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

# 验证流量限制,查看流量统计情况
sudo iptables -L -v -n -t filter
sudo iptables -L TRAFFIC_TRACKING -v -n

# 定时任务设置每月重置流量计数
sudo crontab -e
# 选择1,在文件最后加入一行,CTRL+O保存,Enter确认文件名,CTRL+X退出nano编辑器
0 0 1 * * /sbin/iptables -Z TRAFFIC_TRACKING

netfilter-persistent

# 保存iptables规则
sudo netfilter-persistent save
# 重启服务
sudo systemctl restart netfilter-persistent

# 或者刚启动服务
sudo systemctl start netfilter-persistent
sudo systemctl enable netfilter-persistent

sudo systemctl status netfilter-persistent

监控统计

# 一行命令输出已经用了多少GB
sudo iptables -L TRAFFIC_TRACKING -v -n | awk '/0.0.0.0\/0/ {sum += $2} END {print "Used GB: ", sum / 1073741824}'
# 或者
sudo iptables -L TRAFFIC_TRACKING -v -n | grep '0.0.0.0/0' | awk '{sum += $2} END {print "Used GB: " sum/1073741824}'

# 用了多少MB
sudo iptables -L TRAFFIC_TRACKING -v -n | awk '/0.0.0.0\/0/ {sum += $2} END {print "Used MB: " sum/1048576}'

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录