跳转至

09 - 基础安全加固(fail2ban、unattended-upgrades) 🛡️

前提条件 ✅

  • 已完成 Debian 12 Bookworm 基础安装、网络配置、SSH 端口改为 2222 并启用公钥认证
  • ops 用户已配置好 sudo 权限并可通过密钥登录
  • SSH 服务正常运行在 2222 端口(PermitRootLogin no、PasswordAuthentication no)
  • 虚拟机环境:VMware Workstation Pro

详细步骤 🛠️

  1. 启用 unattended-upgrades(自动安全更新)
    安装并配置自动安装安全更新(生产强烈推荐):
sudo apt update
sudo apt install -y unattended-upgrades apt-listchanges

运行配置向导(或直接编辑配置文件):

sudo dpkg-reconfigure --priority=low unattended-upgrades
# 选择 Yes → 启用自动更新

编辑主要配置文件:

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

确保以下部分已启用(取消注释或添加):

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    // "${distro_id}:${distro_codename}-updates";
    // "${distro_id}:${distro_codename}-backports";
};

Unattended-Upgrade::Mail "root";
Unattended-Upgrade::MailOnlyOnError "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";          // 生产建议 false

启用自动更新定时任务:

sudo systemctl enable --now unattended-upgrades.timer
sudo systemctl status unattended-upgrades.timer

  1. 安装并配置 fail2ban(防暴力破解)
    sudo apt install -y fail2ban
    

创建本地自定义配置文件(不要直接改 jail.conf):

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

在文件末尾添加/修改以下 jail(针对 SSH):

[sshd]
enabled = true
port    = 2222
filter  = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime  = 3600           ; 封禁 1 小时
findtime = 600            ; 10 分钟内
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24   ; 白名单你的管理网段

[sshd-ddos]
enabled  = true
port     = 2222
filter   = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 86400          ; 封禁 24 小时

重启服务:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

  1. 验证 fail2ban 运行状态

    sudo fail2ban-client status
    sudo fail2ban-client status sshd
    sudo fail2ban-client status sshd-ddos
    
    # 查看封禁记录
    sudo fail2ban-client log
    

  2. 基础防火墙预备(ufw 简单启用)
    (第 13 章会详细配置,这里只做最小化开启)

    sudo apt install -y ufw
    sudo ufw allow 2222/tcp comment 'SSH custom port'
    sudo ufw --force enable
    sudo ufw status verbose
    

  3. 其他快速安全检查

    # 确认 root 密码登录已禁
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    sudo grep PasswordAuthentication /etc/ssh/sshd_config
    
    # 检查开放端口
    sudo ss -tuln
    

实践任务 🎯

  1. 启用 unattended-upgrades 并配置只自动安装 security 更新
  2. 安装 fail2ban,配置 sshd jail 使用 2222 端口,maxretry=5
  3. 用另一台机器/工具故意尝试错误密码登录 SSH 5 次以上,观察 fail2ban 是否封禁
  4. 查看 sudo fail2ban-client status sshd/var/log/fail2ban.log 确认封禁记录

自测问题 ❓

  1. unattended-upgrades 默认会自动重启系统吗?如何关闭?
  2. fail2ban 中 bantimefindtime 参数分别代表什么?
  3. 为什么要在 jail.local 而不是 jail.conf 中做自定义配置?
  4. 如何临时解除某个 IP 的 fail2ban 封禁?

总结 📌

完成了基础安全加固的两大核心组件:
- unattended-upgrades → 保持系统安全补丁最新
- fail2ban → 有效防御 SSH 暴力破解
结合前面的 SSH 端口变更、公钥认证、禁止 root 登录,形成 Debian 服务器初始安全基线。后续章节的 nftables/ufw 将进一步收紧网络边界。