背景

服务器在公网上,每天都会遇到各种扫描和暴力破解尝试。手动检查既不现实,也容易漏掉,所以我把日常运维做成了几个自动任务,让服务器自己盯着自己。

三个核心任务

1. 每日安全巡检(03:00)

检查系统更新、登录审计、账号密钥、监听端口、计划任务、SUID 特权文件、资源占用、磁盘和服务健康,汇总成一份中文报告推送到手机。发现异常会标注风险等级和修复建议。

2. 每日系统更新(03:30)

排在巡检之后自动执行。没有待更新包时静默;有更新且不需要重启就自动升级并报告升级了哪些包;如果涉及内核等需要重启的更新,则暂停并提醒人工确认——避免半夜自动重启打乱线上服务。

3. 封禁统计汇总(12:00 / 20:00)

统计 fail2ban 在这两个时间段封禁的 IP,输出 IP、归属地、被攻击端口、攻击次数和封禁原因,便于判断攻击趋势。

防护加固

光有巡检还不够,拦截要放在前面:

  • SSH 禁用密码登录,root 只允许密钥
  • fail2ban 开启 aggressive 模式,把"认证阶段静默断连"也计入失败(此前这类扫描器完全不会被封)
  • 新增连接洪水 jail:同一 IP 十分钟内连接超过阈值直接封禁
  • 22 端口按需开关:不用的时候直接关掉,扫描噪音归零

效果

改造前每天有两万多次连接尝试、八百多个来源 IP,现在端口关闭期间这个数字直接归零;系统保持最新,更新有记录、异常有告警,人只需要偶尔看一眼报告。