Ubuntu服务器运维安全最佳实践

本文面向使用 Ubuntu Server 24 LTS 进行生产环境部署的团队。 目标是帮助你建立系统化、可执行、可审计的服务器安全策略,让入侵更难发生,让故障更容易排查。

目录

  1. 安全原则概述
  2. 基础系统安全
  3. SSH 访问与账户安全
  4. 网络访问控制(UFW / Fail2ban)
  5. 服务与进程安全
  6. 跳板机:运维安全的统一入口
  7. 应用与数据安全
  8. 日志监控与告警
  9. 备份与恢复策略
  10. 一页安全核对清单(Checklist)

一、安全原则概述

在开始具体操作前,需要先理解安全的三大原则:

1. 最小权限原则(Least Privilege)

用户与服务只应该拥有完成任务所需的最小权限。

2. 减少暴露面(Reduce Attack Surface)

关闭不需要的端口、服务和账户。攻击面越小,风险越小。

3. 全量审计(Traceability)

操作可回溯、日志可查询,才能在事故时快速定位问题。

服务器安全不是堆命令,而是一个“最小暴露 + 可控访问 + 可追踪行为”的体系。

二、基础系统安全

1. 保持系统更新(最高优先级)

sudo apt update
sudo apt upgrade -y

开启自动安全更新:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

2. 禁用不必要的软件与服务

列出已启用服务:

systemctl list-unit-files --type=service

关闭:

sudo systemctl disable --now servicename

3. 使用 LTS 版本与官方软件仓库

避免第三方未知源:

sudo add-apt-repository --remove ppa:xxx

第三方源越多,安全风险越大。

三、SSH 访问与账户安全

1. 禁止 root 直接登录

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

设置:

PermitRootLogin no

2. 禁用密码登录(强烈建议)

SSH 改为密钥认证:

PasswordAuthentication no

生成密钥:

ssh-keygen -t ed25519

上传密钥:

ssh-copy-id user@server

3. 管控服务器用户

查看所有用户:

cut -d: -f1 /etc/passwd

删除不再需要的用户:

sudo deluser username

4. sudo 权限最小化

创建普通用户,再赋予 sudo 权限:

sudo usermod -aG sudo devuser

与此同时避免:

sudo su -

这样的 root 长时间工作模式。

5. 使用 SSH 登录速率限制

在 SSH 配置中加入:

MaxAuthTries 3
MaxSessions 5

四、网络访问控制(UFW / Fail2ban)

1. 启用 UFW 防火墙

启用防火墙:

sudo ufw enable

仅开放必要端口:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

默认拒绝其他端口:

sudo ufw default deny

查看状态:

sudo ufw status numbered

2. 防暴力破解:Fail2ban

安装:

sudo apt install fail2ban

启用:

sudo systemctl enable --now fail2ban

查看封禁状态:

sudo fail2ban-client status

Fail2ban 能阻止大量扫描和破解行为,是 SSH 最重要的保护措施之一。

五、服务与进程安全

1. 不要让服务以 root 运行

为服务创建独立用户:

sudo adduser --system --no-create-home webuser

在 systemd 中配置:

User=webuser
Group=webuser

2. 限制服务权限(文件与目录)

例如 Web 目录:

chmod -R 750 /var/www/app
chown -R www-data:www-data /var/www/app

3. 使用 AppArmor 控制服务行为

查看 AppArmor 状态:

sudo aa-status

启用规则:

sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

4. 控制开放端口

查看端口监听:

sudo ss -tulnp

关闭不必要端口能显著减少攻击面。

六、跳板机/堡垒机:运维安全的统一入口

跳板机(Bastion Host / Jump Server)是企业安全体系中的标配。

它的作用包括:

1. 统一入口:减少暴露面

所有服务器 SSH 都关闭公网,只暴露跳板机。

2. 强身份认证

  • 密钥登录
  • MFA
  • LDAP/AD 企业认证

3. 权限精细化控制

谁能访问哪台机器,谁能执行哪些命令一目了然。

4. 全量审计与录像

  • 每条命令
  • 敏感操作告警
  • 可回放运维全过程

5. 推荐方案

  • 开源:Jumpserver(功能最完善的开源堡垒机)
  • 云厂商自带堡垒机(省心,安全合规)

跳板机不是可选项,而是:

安全访问控制体系的核心组件,应在中大型团队中强制使用。

七、应用与数据安全

1. 数据库不要暴露公网端口

例如 MySQL 只监听本地:

bind-address = 127.0.0.1

2. 使用 HTTPS(Let’s Encrypt)

自动颁发证书:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx

3. 严格控制配置与密钥

密钥文件设置权限:

chmod 600 id_rsa

私密配置(如 .env)不应向其他用户开放。

4. 版本控制不要上传敏感文件

Git 忽略:

.env
*.pem
*.key

八、日志监控与告警

1. 查看系统日志(systemd)

journalctl -xe

2. 服务级日志

journalctl -u nginx

3. 登录行为审计

last
lastb

4. 建立实时告警系统

选择其一:

  • Netdata
  • Prometheus + Grafana
  • Zabbix
  • 云监控告警

监控指标:

  • CPU 异常升高
  • 磁盘将满
  • SSH 登录异常
  • 服务 down 后自动告警

九、备份与恢复策略

备份是安全的最后一道防线。

1. 采用 3-2-1 原则

  • 3 份数据
  • 2 种不同介质
  • 1 份异地备份

2. 常用备份方案

  • rsync(简单高效)
  • BorgBackup / Restic(加密备份)
  • 云盘快照(极高恢复速度)

3. 定期演练恢复

没有演练的备份 = 假备份。

十、一页安全核对清单(Checklist)

你可以用它快速检查服务器是否合规。

✔ 系统已更新

✔ 禁用 root 登录

✔ SSH 密钥登录 + MFA

✔ UFW 防火墙启用

✔ Fail2ban 启动

✔ 不必要服务已关闭

✔ 服务不以 root 运行

✔ 数据库未暴露公网

✔ 日志可追踪

✔ 使用跳板机集中管理运维

✔ 有自动备份与恢复演练