努力
加油

云服务器安装Ubuntu后需要做哪些基础安全配置?

在云服务器(无论是阿里云、腾讯云还是华为云等主流厂商)上部署 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 # 实时监控认证日志

总结

这套配置的核心逻辑是:最小权限原则 + 纵深防御。

  1. 非 root 用户 -> 限制破坏范围
  2. 密钥登录+禁用密码 -> 消除弱口令风险
  3. UFW 防火墙 -> 网络层隔离
  4. 自动更新 -> 修补已知漏洞
  5. Fail2Ban -> 应对暴力破解

完成这些步骤后,你的 Ubuntu 服务器就已经具备了抵御绝大多数自动化攻击的基础能力。后续再根据具体业务需求(如 Nginx, Docker, MySQL 等)进行应用层的安全加固。