运维圈子里有个共识:服务器上线第一天,攻击可能已经在路上了。不是危言耸听——默认配置的Ubuntu服务器,root密码被暴力破解的平均时间,短到让人意外。

这篇文章整理了一份可直接落地的检查清单。没有废话,每一步都对应真实攻击场景。

打开网易新闻 查看精彩图片

一、先修漏洞,再谈防御

系统更新是安全基线,不是可选项。攻击者每天都在扫描公开的CVE漏洞,你的补丁延迟就是他们的机会窗口。执行两条命令完成更新和清理:

apt update && apt upgrade -y

apt autoremove -y

第二条清理废弃包,减少攻击面。很多入侵利用的正是那些"用不上但也没删"的老旧组件。

二、root账号:能不用就不用

直接以root登录是运维大忌。一旦凭证泄露,攻击者拿到的是整台机器的完全控制权,没有审计痕迹,没有权限边界。标准做法是创建普通用户并赋予提权权限:

adduser adminuser

usermod -aG sudo adminuser

日常操作用这个账号,需要特权时临时提权。这样至少留下操作日志,出事能追溯。

三、SSH加固:三道防线

SSH是服务器暴露最广的入口,也是攻击最集中的地方。三道防线依次收紧。

第一道:禁root登录。编辑 /etc/ssh/sshd_config,找到 PermitRootLogin yes 改为 no,重启SSH服务。

第二道:改默认端口。把22换成高位端口如2222,能过滤掉90%的自动化扫描脚本——它们只扫标准端口。改完后记得防火墙放行新端口。

第三道:密钥替代密码。本地生成密钥对 ssh-keygen,公钥推送到服务器 ssh-copy-id user@server-ip,然后配置文件里关掉密码认证 PasswordAuthentication no。三道防线全部生效后,暴力破解基本失去意义。

四、防火墙:UFW极简配置

Ubuntu自带的UFW(Uncomplicated Firewall)足够大多数场景。原则是默认拒绝,按需放行。示例:SSH改到2222端口后,只开放2222、80、443。

ufw allow 2222/tcp

ufw allow 80/tcp

ufw allow 443/tcp

ufw enable

启用前用 ufw status 确认规则无误。防火墙配错导致把自己锁在门外,是新手常见事故。

五、Fail2Ban:自动封禁暴力破解

即使改了SSH端口、用了密钥,日志里还是会看到大量试探连接。Fail2Ban的作用就是监控这些失败尝试,超过阈值自动封IP。安装启用命令如下:

apt install fail2ban -y

systemctl enable fail2ban

systemctl start fail2ban

查看封禁状态:fail2ban-client status。默认配置对SSH防护已经够用,生产环境建议根据日志调整封禁时长和阈值。

六、Docker容器:别给攻击者跳板

如果跑Docker,容器安全是另一层防线。几个硬性要求:容器内禁止root运行;镜像只从可信源拉取,定期更新;暴露端口最小化;上线前用Trivy等工具扫描漏洞。Docker本身也要保持更新:

apt update

apt install docker-ce docker-ce-cli containerd.io

容器被攻破后,如果配置得当,攻击者只能困在容器里;配置不当,就是整台宿主机沦陷。

七、自动更新:最后一道保险

手动更新总有遗漏。安装unattended-upgrades,让系统自动安装安全补丁:

apt install unattended-upgrades -y

dpkg-reconfigure --priority=low unattended-upgrades

这样即使忙忘了,关键漏洞也能及时补上。

八、审计与监控:别等出事了才看日志

前面七步是防御,这一步是兜底。安装auditd记录关键文件变更:

apt install auditd -y

配置监控 /etc/passwd 等敏感文件,日志集中收集到外部系统。很多入侵是事后几周才发现,因为根本没人看日志。

安全加固没有完成时,只有进行时。这份清单覆盖最常见攻击向量,但生产环境还需根据业务场景调整。建议每季度复盘一次配置,攻击手法在变,防御策略也要跟上。