用 SSH 密钥和防火墙加固你的 Linux 服务器安全

November, 5th 2025 4 min read
Linux 服务器安全:SSH 密钥和防火墙配置指南

用 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 爆破。

安全不是一次性动作,而是持续习惯。定期更新系统、备份密钥、检查日志,才是真正稳健的运维方式。