如何配置服务器在出站流量超标时自动关机
该设置能让一些流量计费模式的服务器被恶意攻击时提供流量流出过量保护
安装 vnstat和jq
sudo apt install vnstat -y
sudo apt install jq -y 初始化(假设网卡名为 eth0)
sudo vnstat -i eth0 #名字自己用ip a命令查询启用服务
sudo systemctl enable vnstat
sudo systemctl start vnstat验证 vnstat 是否正常工作
vnstat -i 网卡名 -m # 查看统计
创建脚本
/usr/local/bin/check_tx_limit.sh
写入以下代码
#!/bin/bash
if [ ! -f /run/tx_monitor_enabled ]; then
exit 0
fi
INTERFACE="eth0" # 网卡名
THRESHOLD_MB=20000 # 阈值 单位:MB
LOGFILE="/var/log/tx_monitor.log"
TX_BYTES=$(vnstat -i "$INTERFACE" --json | jq -r '.interfaces[0].traffic.month[0].tx' 2>/dev/null)
if [ -z "$TX_BYTES" ] || ! [[ "$TX_BYTES" =~ ^[0-9]+$ ]]; then
echo "$(date): [WARN] Failed to get valid TX data for $INTERFACE (got: '$TX_BYTES')" >> "$LOGFILE"
exit 0
fi
TX_MB=$(( TX_BYTES / 1000000 ))
echo "$(date): Current TX this month = ${TX_MB} MB (threshold: ${THRESHOLD_MB} MB)" >> "$LOGFILE"
if [ "$TX_MB" -ge "$THRESHOLD_MB" ]; then
echo "$(date): TX limit exceeded! Shutting down..." >> "$LOGFILE"
/sbin/shutdown -h now "Monthly upload limit reached on $INTERFACE."
fi
(只统计流出流量)
授权
sudo chmod +x /usr/local/bin/check_tx_limit.sh设置每10分钟执行(root cron)
sudo crontab -e写入以下规则
*/10 * * * * /usr/local/bin/check_tx_limit.sh >/dev/null 2>&1
顺序为 分 时 日 月 星期nano指令:ctrl+o保存(回车确认) ctrl+x退出
手动运行脚本测试
sudo /usr/local/bin/check_tx_limit.sh查看日志
tail -f /var/log/tx_monitor.log在脚本中加了一个启用标志文件,只有该文件存在时才检查流量并关机,防止开机就关机
启用监控时,手动创建标志文件(需 root)
sudo touch /run/tx_monitor_enabled系统重启后/run/tx_monitor_enabled 会自动消失
自动消失 → 脚本不再生效 → 不会因流量关机
如需再次启用,必须手动重新创建标志文件
来源:文章转载来源:ECVE
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

