一、 核心思路:规范化与模块化
为了方便将来“一键搬家”,我们将所有运维脚本统一存放在 /root/scripts/monitor 目录下。
目录结构预览
/root/scripts/monitor/
├── admin_bot.py # Telegram 机器人主程序 (Python)
├── ban_ip.sh # IP 处决脚本 (Shell)
├── rss_watchdog.sh # 实时高频攻击监控 (Shell)
├── server_monitor_env.sh # 环境配置文件 (存储 Token/ID)
├── blacklist.conf # Nginx 核心黑名单 (由脚本自动维护)
└── logs/ # 存放机器人运行日志
二、 Nginx 层:接入“小黑屋”机制
不要直接在 nginx.conf 里乱写 deny。我们采用 include 方式,让主配置保持干净。
1. 准备黑名单本子
touch /usr/local/nginx/conf/vhost/blacklist.conf
2. 修改站点配置 (rss.conf)
在 server { listen 443 ... } 块中加入:
# 引入黑名单文件
include /usr/local/nginx/conf/vhost/blacklist.conf;
# 如果使用 Cloudflare,务必配置真实 IP 获取
real_ip_header CF-Connecting-IP;
set_real_ip_from 103.21.244.0/22; # (此处省略其他 CF IP 段)
三、 脚本实现:保安的“枪”与“眼”
1. 配置文件 (server_monitor_env.sh)
将敏感信息提取出来,方便管理:
export BOT_TOKEN="你的_TG_BOT_TOKEN"
export MY_CHAT_ID="你的_CHAT_ID"
2. 智能处决脚本 (ban_ip.sh)
这个脚本支持“自动抓取最恶劣 IP”或“手动封禁指定 IP”,且绝不重复写入:
#!/bin/bash
source /root/scripts/monitor/server_monitor_env.sh
CONF_FILE="/usr/local/nginx/conf/vhost/blacklist.conf"
# 支持参数输入
IP=${1:-$(tail -n 1000 /data/wwwlogs/rss.access.log | grep " 403 " | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 1 | awk '{print $2}')}
if [ -z "$IP" ]; then echo "NODATA"; exit; fi
if grep -q "$IP" $CONF_FILE; then
echo "EXISTS|$IP"
else
echo "deny $IP;" >> $CONF_FILE
/usr/local/nginx/sbin/nginx -t > /dev/null 2>&1 && service nginx restart > /dev/null 2>&1
echo "SUCCESS|$IP"
fi
四、 Telegram 交互:可视化指挥中心
使用 pyTelegramBotAPI 编写的 admin_bot.py。核心功能:
- /scan:统计今日拦截数,并列出 Top 5 攻击者,附带一键封禁按钮。
- /list:查看当前黑名单“战果”。
- /status:全中文显示 Docker 容器健康状态。
提示: 完整 Python 代码建议在 WordPress 中使用“代码块”插件展示。重点在于使用了InlineKeyboardMarkup实现按钮交互。
五、 Vaultwarden 备份通知:最后的拼图
使用 ttionya/vaultwarden-backup 镜像,在 docker-compose.yml 中配置环境变量实现精美通知:
environment:
- PING_URL_WHEN_SUCCESS=https://api.telegram.org/bot你的TOKEN/sendMessage
- PING_URL_WHEN_SUCCESS_CURL_OPTIONS=-d chat_id=你的ID -d text="📦 *Vaultwarden 备份报告*%0A━━━━━━━━━━━━━━━%0A✅ *状态:* 成功%0A⏰ *完成时间:* %{content}" -d parse_mode=Markdown
(注:%{content} 是项目自带的占位符,会自动替换为上传结果。)
六、 自动化:让系统自己跑起来
最后,通过 crontab -e 设置两个定时任务:
- 每分钟监控:
* * * * * /bin/bash /root/scripts/monitor/rss_watchdog.sh - 机器人自启:建议将
nohup python3 ... &加入开机启动项。
结语
这套体系建立后,你只需在 Telegram 里动动手指,就能完成 90% 的日常运维工作。将来换服务器时,只需:
- 打包
monitor文件夹。 - 在
rss.conf里写上include。 - 重启机器人。
保安系统,瞬间复活!

Comments NOTHING