上周看服务器日志,一晚上有两万多次 SSH 爆破尝试,来自全球各地的 IP。虽然密码还算复杂,但天天被人这么扫心里发毛,花了一晚上把 SSH 彻底加固了一遍。下面是可以直接照抄的清单。
1. 密钥登录,禁用密码
# 本地生成密钥对(ed25519 比 rsa 更短更安全)
ssh-keygen -t ed25519 -C "cold@laptop"
# 把公钥传到服务器
ssh-copy-id root@服务器IP
确认密钥能登录、且本地私钥有备份之后,再去改 /etc/ssh/sshd_config:
PermitRootLogin prohibit-key # root 只允许密钥
PasswordAuthentication no # 全局禁用密码登录
血泪提醒:改完先别断开当前会话!另开一个终端测试新配置能登录,确认无误再断。sshd 配置改错把自己锁在门外的事故,每年都有。
2. 改端口,禁 ping 不必要
把 22 改成一个五位数端口(比如 50022),爆破流量直接少 99%,因为脚本小子只扫 22。这算不上真正的安全措施(nmap 一扫就出来),但能极大减少日志噪音,让你能从告警里看到真正的威胁。
3. 只放行必要端口
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=50022/tcp
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
顺手检查一遍监听端口:ss -tlnp,很多数据库(Redis、MySQL)被入侵都是因为绑了 0.0.0.0 还没密码。内网服务一律 127.0.0.1 或内网 IP。
4. fail2ban 兜底
yum install -y epel-release && yum install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 50022
maxretry = 3
bantime = 86400
连续错 3 次,封 24 小时。装完可以故意用错密码试三次(用密码登录已禁用的话它会记到别的维度,测起来略绕),再 fail2ban-client status sshd 看封禁列表。
5. 杂项
AllowUsers cold白名单限定可登录用户ClientAliveInterval 300,闲置连接自动断开- 每个设备独立密钥对,丢了笔记本只废一把钥匙
- 定期
lastb | awk '{print $3}' | sort | uniq -c看看爆破来源,纯属乐趣
做完这些,再看日志,爆破记录归零,世界清净了。安全不是一步到位的事,但这一小时的投入性价比极高。

Comments 4 条评论
一晚上两万次爆破,夸张
改完端口先别断当前会话,血泪
AllowUsers 白名单我也配了
Redis 绑 0.0.0.0 没密码是真危险