a879494fe1
避免瞬时尖峰/部署窗口误报(此前 sing-box 部署期 activating 触发了一次误报)。 - 采集间隔 5min → 1min(MONITOR_INTERVAL_MIN=1) - 新增 MONITOR_BREACH_RUNS=5:连续 5 次采样都异常才告警一次(状态存 /var/lib/pangolin-monitor/breach_count);恢复后发一条恢复通知并清零 - 去掉 MONITOR_SEND_OK_PULSE(被去抖逻辑取代) - 已在 racknerd 验证:连 4 次异常不报、恢复清零 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
节点初始化(bootstrap)
全新 Debian 12 机器的幂等一键初始化。后续每台新机器照同样流程跑即可。 覆盖四块:① 系统加固 ② Pangolin 运行环境 ③ Telegram 监控 ④ 网络安全。
一、目标机上跑(本地)
cp bootstrap.env.example bootstrap.env
vi bootstrap.env # 按需改;要监控就填 TELEGRAM_BOT_TOKEN / CHAT_ID
sudo bash init.sh
二、从本机远程跑(已配 ssh 免密别名,推荐)
# 前提:已 ssh-copy-id,~/.ssh/config 里有该机别名(如 racknerd)
rsync -az deploy/bootstrap/ racknerd:/root/bootstrap/
ssh racknerd 'cd /root/bootstrap && bash init.sh'
init.sh 幂等,可反复跑(改了 bootstrap.env 后重跑即生效)。
init.sh 做了什么
| 步 | 内容 |
|---|---|
| ① 系统 | apt upgrade + 基础包(ufw/fail2ban/chrony/curl/jq…);时区;swap(不足则建 /swapfile 补到 SWAP_SIZE_MB);sysctl(BBR/fq/文件句柄/连接队列) |
| ② 环境 | 建 pangolin 非特权系统用户(/var/lib/pangolin, nologin) |
| ④ 防火墙 | ufw 默认拒入站;放行 SSH + 443/tcp(REALITY)+ 443/udp(Hy2);其余拒绝 |
| ④ 暴破 | fail2ban sshd jail |
| ① SSH | drop-in 加固:root 仅密钥、MaxAuthTries、可选禁密码登录 |
| ③ 监控 | 装 pangolin-monitor + systemd timer,定期经 Telegram 上报 |
🔒 防锁死红线
禁用密码登录(DISABLE_PASSWORD_AUTH=true)仅当 /root/.ssh/authorized_keys 非空时才生效;
否则自动保留密码登录并告警。所以先 ssh-copy-id 再跑,或确保公钥已装。
监控(③ 的细节)
-
节点侧
pangolin-monitor(本机 systemd timer,每MONITOR_INTERVAL_MIN分钟): 采 CPU/内存/磁盘、受监控 systemd 单元存活(MONITOR_UNITS)、出网连通; 越界/掉线/断网 → 🔴 必报;正常 → 🟢(心跳是否推送由MONITOR_SEND_OK_PULSE控制)。 -
死信(不上报/宕机):节点宕了自己报不了,需在任意一台常在线主机(另一台节点 / 家里服务器 / 监控机)跑
deadman-watch.sh主动探活补这层:# 在那台常在线主机上 sudo install -m 755 deploy/bootstrap/monitor/deadman-watch.sh /usr/local/bin/deadman-watch sudo cp deploy/bootstrap/deadman.env.example /etc/pangolin-deadman.env && sudo vi /etc/pangolin-deadman.env # 每 3 分钟探一次(用户 cron 即可,无需 root) ( crontab -l 2>/dev/null; echo '*/3 * * * * /usr/local/bin/deadman-watch >/dev/null 2>&1' ) | crontab -节点端口连续失败到阈值 → 🔴 告警;恢复 → 🟢 通知。
文件
| 文件 | 说明 |
|---|---|
init.sh |
主初始化(幂等) |
bootstrap.env.example |
配置模板(SSH/swap/防火墙/Telegram) |
monitor/pangolin-monitor.sh |
节点自监控上报 |
monitor/pangolin-monitor.{service,timer} |
systemd(timer 的 __INTERVAL__ 由 init.sh 渲染) |
monitor/deadman-watch.sh |
EC2 侧死信探活 |
deadman.env.example |
死信守望配置模板 |
密钥类(bootstrap.env、/etc/pangolin-monitor.env、/etc/pangolin-deadman.env)不入 git。