服务器一上线,几分钟内就会被全网扫描器盯上。上线前把这条基线做完,能挡掉 90% 的常见攻击。
一、安全基线清单
- 只开放必要端口,其余全关
- SSH 用密钥登录,禁 root,禁密码(可选)
- Fail2ban 自动封爆破
- 系统和软件及时更新
- 关键日志有留存、能审计
- 定期自查开放端口
二、SSH 加固
编辑 /etc/ssh/sshd_config:
PermitRootLogin no # 禁 root 直接登录
PasswordAuthentication no # 禁密码登录(先确认密钥能登再开)
AllowUsers ubuntu # 只允许指定用户
MaxAuthTries 3 # 最多 3 次尝试
sudo sshd -t # 语法检查
sudo systemctl reload sshd
⚠️ 改之前先另开一个终端确认密钥能登录,别把自己锁外面。密钥注入见《Linux 服务器初始化》。
三、防火墙 UFW
sudo ufw allow OpenSSH # 只放行 22
sudo ufw allow 80/tcp # 需要网页才放行
sudo ufw enable
sudo ufw status verbose
原则:默认拒绝,白名单放行,用到哪个端口开哪个。
四、Fail2ban 防爆破
sudo apt install -y fail2ban
/etc/fail2ban/jail.local:
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
banaction = ufw
[sshd]
enabled = true
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd # 查看封禁情况
sudo ufw status # 被封 IP 会显示 DENY
maxretry = 3、bantime = 24h:10 分钟内失败 3 次封 24 小时。
五、云安全组 vs 系统防火墙
两层都要管:
| 层 | 位置 | 作用 |
|---|---|---|
| 云安全组 | 云控制台 | 云边界第一道闸,入/出方向放行 |
| UFW | 主机内 | 主机层第二道闸 |
最佳实践:两层都只开必要端口,用"最小暴露"思路,别只依赖一层。
六、日志审计
who # 当前谁在登录
last # 历史登录记录
lastb # 失败登录记录(爆破痕迹)
sudo tail -50 /var/log/auth.log # 认证日志
journalctl -u sshd --since "1 hour ago"
发现可疑:
- 大量来自同一 IP 的失败登录 → 确认是爆破,fail2ban 已在封
- 陌生 IP 成功登录 → 立刻改密码、吊销密钥、排查后门
七、端口自查
ss -tlnp # 本机在监听什么
# 从外部视角扫描(在自己电脑上对服务器执行)
nmap -sS -p 1-65535 <服务器IP>
外部扫描结果和你的预期一致,才算真正"收口"了。
小结
上线前过一遍:密钥登录 + 禁 root + 白名单防火墙 + Fail2ban + 日志审计。这五件事做完,服务器就从一个"裸奔"状态变成了有基本防御的状态。