一台云服务器开机后,如果直接就把服务裸奔在公网上,用不了多久就会在日志里看到 密密麻麻的 SSH 暴力破解尝试。下面是我每次拿到新机器都会过一遍的加固清单,都是 基础项,但性价比极高。

1. SSH:关掉密码登录

这是最重要的一条。配置好密钥登录后,禁用密码认证和 root 直接登录:

# /etc/ssh/sshd_config.d/10-hardening.conf
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no

改完用 sshd -t 校验,再 systemctl restart ssh。重启前务必保留一个已登录 的会话,新开一个终端确认密钥能登录,避免把自己锁在外面。

2. 防火墙:默认拒绝

用 UFW 设定白名单,默认拒绝入站,只放行需要的端口:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp      # SSH
ufw allow 80/tcp      # HTTP(证书验证)
ufw allow 443/tcp     # HTTPS
ufw enable

原则是:只对公网开必要的端口,管理后台、数据库这类一律绑 127.0.0.1,通过 隧道或组网访问。

3. fail2ban:挡住暴力破解

即便禁了密码登录,也建议装上 fail2ban, 让反复尝试的 IP 自动进黑名单:

# /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
banaction = ufw
backend = systemd

记得把自己常用的组网网段加进 ignoreip,免得把自己 ban 掉。

4. 自动安全更新

apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

让安全补丁自动装,重启类更新再手动安排窗口。

5. 几个内核网络参数

在 /etc/sysctl.d/ 下放一个加固配置,常见项包括:

net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.send_redirects = 0
kernel.randomize_va_space = 2

sysctl --system 生效。

6. 服务暴露面自查

最后用一条命令确认"这台机器到底在公网上听了哪些端口":

ss -tlnp

逐个核对:哪些是必须对公网开放的?哪些应该绑回环、却误绑了 0.0.0.0? 很多"被入侵"的源头,就是某个服务默认监听了所有网卡。


这套清单不复杂,十几分钟能做完,但能挡掉绝大多数自动化扫描和暴力破解。安全没有 银弹,不过把基础项做扎实,门槛就已经比大部分公网主机高得多了。