新服务上线前安全配置 checklist(Ubuntu 22.04)

2026-05-24

以下是个人生产环境新服务器上线前必须做的安全加固步骤,按顺序执行,建议全部完成后再部署需要的 Docker 服务。

第一阶段:基础系统加固

  1. 更新系统并安装必要工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git ufw fail2ban unattended-upgrades apt-listbugs apt-listchanges
sudo apt autoremove -y
  1. 创建普通管理用户(强烈推荐,不要直接用 root)
# 创建用户(把 zen 改成你的用户名)
sudo adduser zen

# 加入 sudo 组
sudo usermod -aG sudo zen

# 可选:加入 docker 组(如果已安装 Docker)
sudo usermod -aG docker zen
  1. 配置 SSH 密钥登录
# 在本地电脑生成密钥(如果还没有)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 把公钥传到服务器
ssh-copy-id zen@你的服务器IP
  1. 禁止 Root 用户 SSH 登录
# 1. 只修改 Root 登录禁止
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# 2. 如果配置了 密钥登录,则可以禁止密码登录
sudo sed -i 's/#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config

# 没配置密钥, 不能执行上一步命令。都则登录不上服务器。
# 确保密码登录是开启的。
sudo sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

# 3. 重启 SSH
sudo systemctl restart ssh

# 4. 检查当前配置
sudo grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config

第二阶段:防火墙与访问控制

  1. 配置 UFW 防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许 SSH(推荐改端口)
sudo ufw allow 22/tcp          # 先用22,后面可改
# sudo ufw allow 2222/tcp      # 推荐改成非标准端口

# 如果部署 Web 服务,开放对应端口
sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 443/tcp

sudo ufw --force enable
sudo ufw status verbose
  1. 安装并配置 Fail2Ban(防暴力破解)
# 1. 安装 fail2ban
sudo apt update
sudo apt install fail2ban -y

# 2. 安装完成后启用并启动
sudo systemctl enable --now fail2ban

# 3. 检查状态
sudo systemctl status fail2ban

# 4. sudo systemctl enable --now fail2ban

# 5:自定义 SSH 保护规则 复制默认配置
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

在 [sshd] 段落中设置:

注意: 先查下是否存在 sshd配置

sudo grep -n "\[sshd\]" /etc/fail2ban/jail.local
# ====================== 自定义配置 ======================
[sshd]
enabled = true
port = 2222          # ← 如果你用2222端口,这里必须改成2222
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1

eg: /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 2222          # ← 改成你当前 SSH 端口
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
#port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

检查配置是否成功

sudo fail2ban-client -t
OK: configuration test is successful

保存后重启 fail2ban

sudo systemctl restart fail2ban

查看fail2ban状态

sudo systemctl status fail2ban

第三阶段:自动安全更新

  1. 配置自动安全更新
sudo dpkg-reconfigure --priority=low unattended-upgrades

编辑配置文件:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

取消注释以下内容:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}:${distro_codename}-updates";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

第四阶段:Docker 安全配置(非常重要)

  1. Docker 安全最佳实践

安装完docker执行这一步。安装脚本可以查看 https://github.com/mazezen/scripts/tree/master/env/Ubuntu22.0.4

# 1. 使用非 root 用户运行容器(推荐)
# 2. 限制容器资源
# 3. 不使用 --privileged 模式

# 创建 docker 专用安全配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "icc": false,
  "no-new-privileges": true,
  "userland-proxy": false
}
EOF

sudo systemctl restart docker
  1. 使用 Docker Rootless(更高安全,可选,较复杂)

如果服务对安全性要求极高,建议研究 Docker Rootless 模式。

第五阶段:其他重要安全措施

  1. 额外加固
# 禁用不必要的服务
sudo systemctl disable --now bluetooth 2>/dev/null || true

# 设置时区
sudo timedatectl set-timezone Asia/Singapore

# 安装 Lynis 安全审计工具(检查)
sudo apt install lynis -y

# 以 root 权限运行完整审计(最常用方式)
sudo lynis audit system
命令,说明

sudo lynis audit system,完整系统安全审计(推荐)

sudo lynis audit system --quick,快速审计(跳过部分耗时项目)

sudo lynis show options,显示所有可用选项

sudo lynis update info,检查 Lynis 是否有新版本

sudo lynis audit system --profile default,使用默认安全策略


# 1. 更新 Lynis 到最新版
sudo lynis update info

# 2. 运行完整审计并保存报告
sudo lynis audit system | tee lynis-report-$(date +%Y%m%d).txt

# 3. 只看高危和建议项(更清晰)
sudo lynis audit system --quiet | grep -E "WARNING| SUGGESTION|Action"
  1. 设置服务器监控(推荐)

安装 htop, iotop, netdata 或 prometheus + grafana