资讯文章 资讯 · NEWS
服务器那层一直没人管:目录站的 SSH、fail2ban 和自动更新
2026-10-24 约 1,504 字 预计阅读 4 分钟 yiyunkj
服
目录站的安全文章多数停在应用层和后台权限。再往下那一层——你怎么登录这台机器——很少有人写,因为大家默认它已经好了。
实际上一台 22 端口对外开放的机器,上线几小时内就会开始被自动化扫描。这些扫描干的事很原始:猜密码。所以第一件事也很原始。

图片来源:网络,版权归原作者所有,侵权请联系删除
让密码变得无关紧要
密钥登录取代密码登录,是把暴力破解这整类威胁一次性抹掉,不是让它变难。配的时候写三行:
PasswordAuthentication no——禁止密码登录,这是核心那一条。KbdInteractiveAuthentication no——顺手关掉键盘交互认证,否则密码提示会从另一条路回来。PermitRootLogin no——管理员用自己的账号登录再提权,谁做过什么留得下来。
再补几个收窄攻击面的:用 AllowUsers 或 AllowGroups 列白名单,其他人直接拒绝;MaxAuthTries 3 限制单次连接的尝试次数;LoginGraceTime 给个几十秒的登录窗口;X11 转发、代理转发、TCP 转发没有明确用途的一律关掉,它们在没有需要的时候只是横向移动的工具。
改配置的两个动作不能省
第一个动作是先验证密钥登录能用,再改配置。从另一个终端重新连一次,确认成功后才动文件。顺序反了,密码一关、密钥又不生效,就只能去控制台救。
第二个动作是保持当前会话不关,开一个新终端验证新配置生效,再关旧的。这是服务器加固里最值钱的一个习惯,成本是三十秒。
改之前用 sshd -t 检查语法,改之后用 sshd -T 看生效值。后面这个命令很重要:如果用发行版推荐的 drop-in 目录,sshd 读的是第一个匹配到的值,很多云镜像自带的 50-cloud-init.conf 里写着 PasswordAuthentication yes,文件名排序在你前面,你的 99-hardening.conf 会被静默覆盖。不看 sshd -T 的输出,你永远不会知道。
fail2ban 的三个参数
禁了密码之后暴力破解已经没用了,但连接洪水还在浪费资源、污染日志。fail2ban 的作用是按日志自动封 IP。
| 参数 | 含义 | 常用取值 |
|---|---|---|
| maxretry | 允许失败几次 | 3 到 5 次 |
| findtime | 在多长时间窗口内计数 | 10 分钟 |
| bantime | 封多久 | 1 小时起,repeat offender 递增 |
配置写在 jail.local 或者 jail.d/ 下的文件里,不要直接改 jail.conf,那个文件会被包升级覆盖。日志路径按发行版来,Debian 系是 /var/log/auth.log,RHEL 系是 /var/log/secure。
还有一条:ignoreip 里加上你的固定出口 IP。本地测密码输错几次把自己封在门外,是最常见的一种自伤。真封了也有解药,fail2ban-client set sshd unbanip 地址。
换端口不是安全措施
把 22 改成别的端口,能显著减少日志里的扫描噪声,让真正有用的信息看得见。但它不是安全边界,挡不住任何针对性的尝试,别把它当成加固成果写进汇报。
真正的收敛是让 22 端口只对管理网段或者 VPN 开放。能做到这一步的话,前面那一堆配置的风险都降了一个量级。
不打补丁的加固是空话
门再结实,锁芯过期了也白搭。开自动安全更新, Debian 系是 unattended-upgrades,装完跑一遍 reconfigure 让它在后台生效。这条的性价比高于本文其他所有内容加起来。
最后留一条兜底:确认服务商的控制台(串口或者 VNC)能用,并且在需要之前就试过一次。所有登录方式都失效的那天,这是唯一入口。
服务器加固没有一步登天的招,都是十几分钟能做完的小事。它们的价值在于被一起做完,而不是挑几条做。