一台全新的VPS在上线几分钟内就会被扫描和探测。好消息是:按顺序花一个小时加固,就能阻止绝大多数机会主义攻击。以下是一份按重要性排序的清单,适用于注重隐私的新服务器。
1. 首先锁定SSH
创建一个拥有sudo权限的非root用户,添加您的公钥,然后在sshd_config中禁用密码认证和root登录(PasswordAuthentication no、PermitRootLogin no)。仅凭"仅密钥"SSH,就能击败构成您服务器上大部分噪音的密码猜测攻击。重启SSH后,请先确认新会话可以正常登录,再关闭当前会话。

2. 在前面架设防火墙
入站流量默认拒绝,只放行您需要的部分。以ufw为例:拒绝入站、允许出站,然后只放行您的SSH端口和您实际运行的具体服务端口。防火墙能把"每个开放端口都是攻击目标"变成"只存在您选择开放的入口",从而大幅缩小攻击面。
3. 加装fail2ban
安装fail2ban来监视认证日志,并临时封禁反复登录失败的IP。即便已经启用了仅密钥SSH,它仍能减少日志噪音,并削弱针对您所暴露的任何服务的暴力破解尝试。默认设置已经相当合理;启用sshd jail以及您所运行服务对应的其他jail即可。
4. 开启自动安全更新
在Debian/Ubuntu上启用unattended-upgrades,让安全补丁在您不用记挂的情况下自动安装。服务器被攻陷最常见的原因,就是某个已有补丁可用的已知漏洞——自动化更新能在您休息时也堵住这个窗口期。
5. 缩减攻击面
卸载您不使用的服务,将仅供本地使用的守护进程绑定到127.0.0.1,并用ss -tlnp检查当前有哪些端口在监听。每一个正在监听的服务都是潜在的入侵点;您运行和暴露的服务越少,可被攻击的地方就越少。然后设置异地备份,这样即便被攻陷也是可恢复的事故,而非灾难。
这一小时,总结一下
仅密钥SSH、默认拒绝的防火墙、fail2ban、自动更新,以及最小化的监听面。这些做法都不算高深,而且都能快速完成;合在一起,就能阻止几乎构成所有真实入侵事件的自动化攻击。请在部署任何重要内容之前先完成这些工作。