服务器安全是运维的底线,但很多开发者只停留在「装个防火墙」的浅层认知。事实上,真正的服务器加固需要从 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 监控面板)实时告警异常登录行为。安全无小事,每一次加固都是对生产环境的负责。🔒




