服务器安全加固:SSH / 防火墙 / Fail2ban 实战指南

服务器安全是运维的底线,但很多开发者只停留在「装个防火墙」的浅层认知。事实上,真正的服务器加固需要从 SSH 配置、防火墙规则、Fail2ban 防暴力破解三个层面系统化建设——缺一不可。本文以 Ubuntu 22.04 为例,手把手带你完成生产级服务器安全加固。

SSH 安全加固:第一道防线

SSH 是服务器暴露面最大的服务,99% 的入侵尝试都通过 SSH 发起。默认配置的 SSH 极其脆弱——允许密码登录、使用 22 端口、root 可直接登录。加固步骤如下:

10.1 禁用密码登录,强制密钥认证

# 1. 在本机生成 SSH 密钥对(如果还没有)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 2. 将公钥复制到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip

# 3. 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config

# 4. 修改以下参数
PermitRootLogin no              # ❌ 禁止 root 直接登录
PasswordAuthentication no       # ❌ 禁用密码登录
PubkeyAuthentication yes        # ✅ 启用密钥认证
ChallengeResponseAuthentication no
UsePAM no

# 5. 重启 SSH 服务
sudo systemctl restart sshd

10.2 更改默认 SSH 端口

将 SSH 端口从 22 改为非标准端口(如 2222),可以大幅减少自动化扫描脚本的攻击面:

# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config

# 添加或修改
Port 2222

# 确保防火墙允许新端口
sudo ufw allow 2222/tcp

# 重启 SSH
sudo systemctl restart sshd

# 测试新端口连接(在断开当前连接前!)
ssh -p 2222 user@your-server-ip

防火墙配置:UFW 最小化暴露

Ubuntu 默认使用 UFW(Uncomplicated Firewall)。原则是:默认拒绝所有入站,只开放必需端口

# 1. 重置并设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 2. 只开放必要端口
sudo ufw allow 2222/tcp     # SSH(已改端口)
sudo ufw allow 80/tcp       # HTTP
sudo ufw allow 443/tcp      # HTTPS
sudo ufw allow 3000/tcp     # 应用端口(按需)

# 3. 启用防火墙
sudo ufw enable

# 4. 查看规则
sudo ufw status verbose

Fail2ban:自动封禁暴力破解

即使改了 SSH 端口,仍会有扫描脚本探测。Fail2ban 通过监控日志自动封禁恶意 IP,是最后一道防线。

# 1. 安装 Fail2ban
sudo apt install fail2ban -y

# 2. 创建自定义配置(覆盖默认配置)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# 封禁时长:10 分钟
bantime = 600
# 容忍失败次数
maxretry = 3
# 检测窗口
findtime = 600

[sshd]
enabled = true
port = 2222        # 对应修改后的 SSH 端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# 3. 启动并设置开机自启
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 4. 查看封禁状态
sudo fail2ban-client status
sudo fail2ban-client status sshd

补充:系统级安全加固清单

加固项命令/配置作用
自动安全更新apt install unattended-upgrades自动安装安全补丁
禁用不必要服务systemctl disable bluetooth减少攻击面
文件系统权限chmod 700 ~/.ssh限制 SSH 目录访问
内核参数加固sysctl -p 配置 /etc/sysctl.conf防止 SYN Flood 等攻击
日志监控配置 /etc/rsyslog.conf集中日志便于审计

服务器安全是一个持续过程,不是一次性配置。建议配合监控工具(如之前讲的 Prometheus + Grafana 监控面板)实时告警异常登录行为。安全无小事,每一次加固都是对生产环境的负责。🔒

上一篇 Docker Compose 多环境配置:dev test prod 分离实战
下一篇 MySQL 主从复制与读写分离:高可用架构实战