SSH安全配置完全指南:保护服务器不被入侵的20个关键措施

SSH是服务器管理的核心工具,但默认配置存在安全风险。本文将介绍20个关键措施,帮助你加固SSH服务,防止服务器被入侵。

1. 禁用Root远程登录

# 编辑sshd_config
sudo nano /etc/ssh/sshd_config

# 修改为
PermitRootLogin no

# 重启SSH
sudo systemctl restart sshd

2. 使用SSH密钥认证

# 本地生成密钥对
ssh-keygen -t ed25519 -C "[email protected]"

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

# 测试密钥登录
ssh -i ~/.ssh/id_ed25519 user@server

3. 禁用密码认证

# 在sshd_config中设置
PasswordAuthentication no
ChallengeResponseAuthentication no

4. 修改默认SSH端口

# 在sshd_config中设置
Port 2222  # 选择一个1024-65535之间的端口

# 防火墙放行新端口
sudo ufw allow 2222/tcp

5. 限制登录用户

# 只允许指定用户登录
AllowUsers alice bob
# 或禁止特定用户
DenyUsers root admin

6. 配置防火墙

# UFW配置
sudo ufw allow 2222/tcp  # SSH端口
sudo ufw allow 80/tcp     # HTTP
sudo ufw allow 443/tcp    # HTTPS
sudo ufw enable

7. 启用TCP Wrapper

# /etc/hosts.allow
sshd: 192.168.1.0/24

# /etc/hosts.deny
sshd: ALL

8. 使用Fail2ban防暴力破解

# 安装
sudo apt install fail2ban

# 配置
sudo nano /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

9. 配置入侵检测(AIDE)

# 安装
sudo apt install aide

# 初始化数据库
sudo aideinit

# 定期检查
sudo aide --check

10. 启用SSH审计日志

# 在sshd_config中设置
LogLevel VERBOSE
Subsystem sftp /usr/lib/openssh/sftp-server

11. 使用跳板机

# 本地配置 ~/.ssh/config
Host bastion
    HostName bastion.example.com
    User admin
    Port 2222

Host internal
    HostName 192.168.1.100
    User alice
    ProxyJump bastion

12. 配置SSH代理

# 启动agent
eval $(ssh-agent)

# 添加密钥
ssh-add ~/.ssh/id_ed25519

13. 禁用X11转发

X11Forwarding no

14. 设置登录超时

ClientAliveInterval 300
ClientAliveCountMax 2

15. 禁用空密码

PermitEmptyPasswords no

16. 使用二因素认证

# 安装Google Authenticator
sudo apt install libpam-google-authenticator

# 配置
alice@server:~$ google-authenticator

17. 配置SFTP chroot

# 在sshd_config中设置
Match Group sftpusers
    ChrootDirectory /home/sftp
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

18. 定期轮换密钥

# 定期更换SSH密钥
# 建议每90天更换一次

19. 监控SSH登录

# 查看登录日志
sudo tail -f /var/log/auth.log | grep ssh

# 查看失败尝试
sudo grep "Failed password" /var/log/auth.log

20. 使用证书认证

# 在sshd_config中设置
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

安全加固检查清单

  • [ ] 禁用Root远程登录
  • [ ] 使用SSH密钥认证
  • [ ] 禁用密码认证
  • [ ] 修改默认SSH端口
  • [ ] 配置防火墙
  • [ ] 启用Fail2ban
  • [ ] 定期检查日志
  • [ ] 使用强密码策略
  • [ ] 启用二因素认证
  • [ ] 定期更新SSH软件

总结

SSH安全是服务器安全的第一道防线。遵循以上措施,可以大幅降低服务器被入侵的风险。建议定期进行安全审计,保持系统更新。

📖 进阶安全:学习使用SELinux/AppArmor进行强制访问控制,使用OpenSCAP进行安全合规检查,以及配置VPN(如WireGuard)替代直接SSH访问。

发表评论