该设置能让一些流量计费模式的服务器被恶意攻击时提供流量流出过量保护
安装 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

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

标签: 服务器, 流量

添加新评论