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访问。