在云服务器(无论是阿里云、腾讯云还是华为云等主流厂商)上部署 Ubuntu 后,默认的“裸机”状态是极其脆弱的。很多新手直接 sudo apt update 就开始装服务,这是大忌。
以下是我在生产环境中坚持执行的最小化基础安全配置清单。不需要搞得太复杂,但每一步都要踩实。
1. 创建非 root 用户并赋予 sudo 权限
永远不要直接用 root 登录服务器进行日常操作。Root 权限太大,一旦误操作或遭入侵,后果是毁灭性的。
# 1. 创建新用户 (例如叫 admin)
adduser admin
# 2. 将用户加入 sudo 组
usermod -aG sudo admin
# 3. 切换到新用户测试权限
su - admin
sudo whoami # 应该输出 root,说明权限配置成功
2. 配置 SSH 密钥认证,禁用密码登录
密码爆破是互联网上最常见的攻击手段。SSH 默认允许密码登录,必须关闭。
-
本地生成密钥对(在你的电脑终端执行):
ssh-keygen -t ed25519 -C "your_email@example.com" # 一路回车即可,或者加个 passphrase -
上传公钥到服务器:
ssh-copy-id admin@<你的服务器IP> -
修改 SSH 配置文件:
编辑/etc/ssh/sshd_config:PasswordAuthentication no # 禁用密码登录 PermitRootLogin no # 禁用 root 远程登录 PubkeyAuthentication yes # 启用公钥认证 X11Forwarding no # 禁用 X11 转发(减少攻击面) -
重启 SSH 服务:
sudo systemctl restart sshd注意:修改前请确保你能通过密钥登录,否则把自己锁在外面会很麻烦。建议保留一个临时会话窗口,直到确认新配置生效。
3. 安装并配置 UFW 防火墙
Ubuntu 自带 ufw (Uncomplicated Firewall),比 iptables 简单好用。默认策略应该是“拒绝所有入站,允许所有出站”。
# 1. 安装 ufw (通常已预装)
sudo apt install ufw
# 2. 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. 允许 SSH 连接 (非常重要!否则你刚配完密钥可能连不上)
sudo ufw allow ssh
# 4. 如果你需要 Web 服务,开放 80 和 443
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 5. 启用防火墙
sudo ufw enable
提示:如果使用的是云厂商的安全组(Security Group),UFW 可以作为第二道防线。但在某些场景下,仅靠安全组管理更便捷。建议两者配合使用,UFW 负责主机层面的精细控制。
4. 自动安全更新
保持系统内核和关键软件包的最新状态,是防御已知漏洞最有效的手段。
# 安装 unattended-upgrades
sudo apt install unattended-upgrades
# 启用自动更新
sudo dpkg-reconfigure unattended-upgrades
# 选择 Yes
# 查看日志确认是否工作
tail -f /var/log/unattended-upgrades/unattended-upgrades.log
5. 安装 Fail2Ban 防止暴力破解
即使禁用了密码登录,SSH 端口依然暴露在公网。Fail2Ban 可以监控日志,对频繁尝试登录的 IP 进行封禁。
# 1. 安装
sudo apt install fail2ban
# 2. 复制默认配置并修改
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 3. 编辑 jail.local,针对 SSH 做强化
sudo nano /etc/fail2ban/jail.local
在文件中添加或修改以下内容:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 # 失败3次就封禁
bantime = 3600 # 封禁1小时
findtime = 600 # 600秒内触发
注意:如果你的 SSH 端口改成了非标准端口(如 2222),需要在 [sshd] 部分指定 port = 2222,并在 jail.local 中调整。
# 4. 重启服务
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
6. 其他重要细节
-
修改 SSH 默认端口(可选但推荐):
将Port 22改为其他高位端口(如 2222),可以大幅减少自动化扫描脚本的噪音。但记得同步更新 UFW 规则和安全组规则。 -
禁用 IPv6(如果不使用):
很多老旧应用对 IPv6 支持不好,且会增加攻击面。如果确定不用,可以在/etc/sysctl.conf中禁用。 -
定期审计:
养成习惯,偶尔运行一下:lastb # 查看登录失败记录 sudo tail -f /var/log/auth.log # 实时监控认证日志
总结
这套配置的核心逻辑是:最小权限原则 + 纵深防御。
- 非 root 用户 -> 限制破坏范围
- 密钥登录+禁用密码 -> 消除弱口令风险
- UFW 防火墙 -> 网络层隔离
- 自动更新 -> 修补已知漏洞
- Fail2Ban -> 应对暴力破解
完成这些步骤后,你的 Ubuntu 服务器就已经具备了抵御绝大多数自动化攻击的基础能力。后续再根据具体业务需求(如 Nginx, Docker, MySQL 等)进行应用层的安全加固。
云技术博客