一、密钥认证:彻底消除密码泄露风险
1.1 传统密码登录的隐患
密码认证存在两大致命缺陷:
- 弱密码易被暴力破解:即使设置复杂密码,仍可能被字典攻击或GPU加速破解。
- 密钥泄露风险:密码可能通过钓鱼邮件、键盘记录器等方式泄露。
1.2 密钥认证原理
密钥对由公钥(Public Key)和私钥(Private Key)组成,公钥存储在服务器,私钥由用户保管。认证时,服务器通过公钥加密随机数,用户需用私钥解密并返回哈希值验证身份。整个过程无需传输密码,且私钥泄露风险远低于密码。
1.3 实战步骤
步骤1:生成密钥对
bash
ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐使用ED25519算法 |
生成的文件默认位于~/.ssh/id_ed25519
(私钥)和~/.ssh/id_ed25519.pub
(公钥)。
步骤2:将公钥上传至服务器
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip # 自动添加到~/.ssh/authorized_keys |
或手动追加公钥内容至服务器~/.ssh/authorized_keys
文件。
步骤3:禁用密码认证
编辑服务器SSH配置文件/etc/ssh/sshd_config
:
ini
PasswordAuthentication no # 禁用密码登录 |
ChallengeResponseAuthentication no # 禁用键盘交互认证 |
PubkeyAuthentication yes # 启用公钥认证 |
重启SSH服务:
bash
systemctl restart sshd # 或 service ssh restart |
1.4 高级防护措施
- 私钥加密:使用
ssh-keygen -p
为私钥设置密码,即使私钥文件泄露也无法直接使用。 - 限制密钥权限:确保
~/.ssh
目录权限为700,私钥文件为600:bashchmod 700 ~/.ssh && chmod 600 ~/.ssh/*
二、Fail2ban:动态防御暴力破解
2.1 Fail2ban的作用
Fail2ban通过监控系统日志(如/var/log/auth.log
),识别异常登录行为(如多次失败尝试),并自动封禁攻击者IP。与静态防火墙规则相比,其优势在于实时响应和自适应防护。
2.2 安装与配置
步骤1:安装Fail2ban
bash
# Debian/Ubuntu |
apt install fail2ban |
# CentOS/RHEL |
yum install fail2ban |
步骤2:创建SSH专用配置
复制默认配置文件并修改:
bash
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
编辑jail.local
,启用SSH防护:
ini
[sshd] |
enabled = true |
port = ssh # 或指定端口如2222 |
filter = sshd |
logpath = /var/log/auth.log # 根据系统调整(CentOS为/var/log/secure) |
maxretry = 3 # 允许3次失败尝试 |
bantime = 86400 # 封禁24小时(单位:秒) |
findtime = 600 # 在10分钟内检测 |
步骤3:启动服务
bash
systemctl enable --now fail2ban |
2.3 高级优化技巧
- 自定义白名单:避免误封合法IP,在
jail.local
中添加:ini[DEFAULT] ignoreip = 192.168.1.0/24 127.0.0.1 # 允许内网和本地IP - 邮件告警:通过
action
配置发送封禁通知(需安装sendmail
或postfix
)。 - 动态调整策略:针对持续攻击的IP,可修改
bantime
为指数增长(如首次24小时,第二次1周)。
三、综合加固:多层次防御体系
3.1 端口修改与访问限制
- 修改SSH默认端口(如2222),减少自动化扫描风险。
- 使用
tcpwrapper
限制访问IP:
编辑/etc/hosts.allow
和/etc/hosts.deny
,仅允许特定IP访问SSH端口。
3.2 日志审计与定期检查
- 定期分析
/var/log/auth.log
,关注异常登录记录。 - 使用
goaccess
或ELK
搭建日志分析平台,实现可视化监控。
3.3 定期更新与备份
- 保持SSH服务(OpenSSH)和系统补丁最新。
- 备份
~/.ssh/authorized_keys
和Fail2ban配置,避免误操作导致锁定。
结语
通过密钥认证和Fail2ban的组合使用,可构建起事前预防、事中拦截、事后审计的完整SSH安全体系。实际环境中,还需结合防火墙规则、双因素认证(2FA)等手段进一步强化。安全是一个持续优化的过程,建议定期评估服务器暴露面,及时调整防护策略。