用 SSH 密钥和防火墙加固你的 Linux 服务器安全
服务器上线后,第一件事不是跑业务,而是加固安全。下面是一整套从 SSH 密钥登录、防火墙、到可选的 Fail2ban 方案的实践笔记。
🔐 一、使用 SSH 公钥免密登录
传统密码登录容易被暴力破解。推荐用 SSH 公钥认证,既安全又方便。
1️⃣ 在本地生成密钥
在你的电脑终端执行:
bash
1
ssh-keygen -t ed25519 -C "你的邮箱"
生成后默认存放:
- 私钥:
~/.ssh/id_ed25519 - 公钥:
~/.ssh/id_ed25519.pub
2️⃣ 把公钥放到服务器上
有 ssh-copy-id 命令的话:
bash
1
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@your_server_ip
若没有该命令,则手动复制公钥到服务器:
bash
1234
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
3️⃣ 测试免密登录
回到本地,直接登录:
bash
1
ssh root@your_server_ip
若无需输入密码,即成功。
🚫 二、禁用密码登录(提升安全等级)
编辑 SSH 配置文件:
bash
1
sudo nano /etc/ssh/sshd_config
确保包含以下内容:
bash
1234
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
保存后重启 SSH 服务:
bash
1
sudo systemctl restart ssh
⚠️ 提醒:先确认密钥登录可用再禁用密码,否则可能锁自己在外。
🧱 三、启用防火墙(UFW)
UFW 是 Ubuntu 的默认防火墙工具,简单好用。
启用并仅开放 22、80、443 端口:
bash
12345678
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
输出应类似:
plaintext
123456
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
可选:限制 SSH 来源
如果你的管理 IP 固定,可以限制只允许特定 IP 登录 SSH:
bash
12
sudo ufw allow from 203.0.113.5 to any port 22 proto tcp
sudo ufw delete allow 22/tcp
🧠 四、Fail2ban:可选的额外防护层
即使禁了密码登录,攻击者仍会不断尝试连接。
安装 fail2ban 可以自动识别恶意行为并封禁 IP,保持系统日志清洁。
安装与配置
bash
1234
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
配置示例:
ini
123456
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 3600
findtime = 600
启动并检查:
bash
12
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
🔒 五、安全实践总结
| 项目 | 推荐设置 | 说明 |
|---|---|---|
| SSH 登录 | 仅限密钥 | 避免暴力破解 |
| Root 登录 | prohibit-password | 仅密钥可用 |
| 防火墙 | 仅开放 22/80/443 | 拒绝其他入站 |
| Fail2ban | 可选,推荐 | 阻挡扫描与刷日志 |
| 密钥类型 | ed25519 | 安全且性能好 |
| 私钥保护 | 权限 600,可设 passphrase | 防止被盗用 |
✅ 六、结语
禁用密码登录 + 启用防火墙,是服务器安全的两大基石。
Fail2ban 则是锦上添花,让你的日志更干净、系统更安静。
从此之后,你的 Linux 服务器基本可以放心暴露在公网,不再害怕 SSH 爆破。
安全不是一次性动作,而是持续习惯。定期更新系统、备份密钥、检查日志,才是真正稳健的运维方式。