侧边栏壁纸
博主头像
欧阳博客

行动起来,活在当下

  • 累计撰写 143 篇文章
  • 累计创建 127 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

如何配置服务器在出站流量超标时自动关机

欧阳
2026-03-07 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

该设置能让一些流量计费模式的服务器被恶意攻击时提供流量流出过量保护
安装 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 会自动消失
自动消失 → 脚本不再生效 → 不会因流量关机
如需再次启用,必须手动重新创建标志文件

0

评论区