云服务器SSH安全加固:禁密码登录、改端口、配Fail2ban

为什么要加固SSH?

SSH是云服务器最常用的远程管理方式,也是黑客攻击的主要目标。默认配置下,22端口暴露在公网,每分钟都可能遭受数千次暴力破解尝试。一旦被攻破,服务器将被完全控制。

SSH加固的三步核心操作:使用密钥认证替代密码、修改默认端口、配置Fail2ban封锁恶意IP。

第一步:配置SSH密钥登录

在本地生成密钥对:

# 生成4096位RSA密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 或生成更安全的Ed25519密钥
ssh-keygen -t ed25519 -C "your_email@example.com"

# 密钥默认保存在:
# 私钥:~/.ssh/id_rsa(或 id_ed25519)
# 公钥:~/.ssh/id_rsa.pub(或 id_ed25519.pub)

将公钥上传到服务器:

# 方法1:使用ssh-copy-id(推荐)
ssh-copy-id root@your_server_ip

# 方法2:手动添加
cat ~/.ssh/id_rsa.pub | ssh root@your_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# 确认权限
ssh root@your_server_ip "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

验证密钥登录成功后,禁用密码登录:

sudo nano /etc/ssh/sshd_config

# 修改以下配置项:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password  # 禁止root用密码登录,允许密钥

# 保存后重启SSH服务
sudo systemctl restart sshd

第二步:修改默认SSH端口

sudo nano /etc/ssh/sshd_config

# 修改端口(选一个1024-65535之间的端口,如2222)
Port 2222

# 重启SSH
sudo systemctl restart sshd

# 在云服务器安全组中放行新端口(重要!)
# 同时保留22端口,直到确认新端口可以正常连接

# 测试新端口连接(另开一个终端)
ssh -p 2222 root@your_server_ip

# 确认可以连接后,在安全组中关闭22端口

第三步:配置Fail2ban

Fail2ban监控日志文件,自动封锁多次登录失败的IP。

# 安装
sudo apt install fail2ban   # Ubuntu/Debian
sudo yum install fail2ban   # CentOS

# 创建本地配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

配置SSH防护规则:

[sshd]
enabled = true
port = 2222        # 改成你的SSH端口
maxretry = 5       # 失败5次触发封锁
bantime = 3600     # 封锁1小时(秒)
findtime = 600     # 10分钟内5次失败
ignoreip = 127.0.0.1 你的固定IP  # 白名单
# 启动服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 查看封锁状态
sudo fail2ban-client status sshd

# 手动解封IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

其他加固建议

  • 创建普通用户:避免直接用root登录,创建sudo用户日常使用
  • 限制登录用户:sshd_config中设置 AllowUsers youruser
  • 防火墙配置:只开放必要端口(SSH、80、443)
  • 禁用root登录:PermitRootLogin no(需先配置普通用户sudo权限)
  • 定期更新系统:sudo apt update && sudo apt upgrade

总结

SSH安全加固三步走:密钥替代密码(最重要)→ 修改默认22端口 → 配置Fail2ban自动封IP。完成这三步后,服务器被暴力破解的风险降低99%。记住:修改端口前一定先在安全组开放新端口,修改sshd_config前不要关闭当前SSH会话。