SSH 22端口暴力破解根治:从封禁IP到密钥登录加固清单 核心要点图解,立即用Fail2ban自动封禁暴力破解IP,降低风险。;禁用密码登录并强制密钥认证,彻底阻断爆破。;修改默认SSH端口并限制访问来源,减少攻击面。;定期审计日志与更新补丁,维持防护有效性。
SSH 22端口暴力破解根治:从封禁IP到密钥登录加固清单 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 立即用Fail2ban自动封禁暴力破解IP,降低风险。
  • 禁用密码登录并强制密钥认证,彻底阻断爆破。
  • 修改默认SSH端口并限制访问来源,减少攻击面。
  • 定期审计日志与更新补丁,维持防护有效性。

痛点引入:SSH 22端口为何总被盯上?

如果你管理过公网Linux服务器,大概率在/var/log/auth.log里见过成片的Failed password for root。SSH 22端口是互联网上被扫描最频繁的端口之一,自动化爆破工具每秒可尝试数十个密码。一旦弱口令被攻破,服务器将沦为挖矿肉鸡或数据泄露源头。本文提供一套从紧急封禁IP到彻底启用密钥登录的完整加固清单,每步附带可执行命令,帮你快速止血并建立长效防护。

第一步:紧急封禁恶意IP,阻断持续爆破

发现爆破后,先封禁高频攻击IP,缓解日志膨胀和资源消耗。

1. 统计攻击IP并手动封禁

使用以下命令提取失败次数最多的IP(Debian/Ubuntu):

grep 'Failed password' /var/log/auth.log | awk '{print }' | sort | uniq -c | sort -nr | head -20

CentOS/RHEL系统日志路径为/var/log/secure。得到IP列表后,用iptables或firewalld封禁:

iptables -I INPUT -s 1.2.3.4 -j DROP
# 或
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'

注意:手动封禁仅治标,攻击IP会不断变化。

2. 部署Fail2ban自动封禁

安装Fail2ban并配置SSH规则:

apt install fail2ban -y  # Debian/Ubuntu
yum install fail2ban -y  # CentOS

创建/etc/fail2ban/jail.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600

重启服务并查看状态:

systemctl restart fail2ban
fail2ban-client status sshd

Fail2ban会自动监控日志,多次失败的IP将被封禁24小时。这是阻断SSH暴力破解的第一道自动化防线。

第二步:修改默认端口与限制访问来源

降低攻击面,减少被扫描概率。

1. 更改SSH监听端口

编辑/etc/ssh/sshd_config,找到#Port 22改为Port 2222(选1024以上非知名端口)。同时更新防火墙规则:

firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

重启SSH前,保持当前会话活跃,用新端口测试连接:

ssh -p 2222 user@host

确认成功后再关闭22端口。

2. 限制来源IP访问

如果服务器仅对特定IP开放,可在sshd_config中添加:

AllowUsers user@192.168.1.*
# 或使用防火墙
iptables -A INPUT -p tcp --dport 2222 -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j DROP

此步骤能大幅减少暴露面,但需确保管理IP固定。

第三步:彻底禁用密码登录,强制密钥认证

密钥登录是抵御暴力破解的根本手段。

1. 生成并部署密钥对

本地生成密钥(推荐ed25519):

ssh-keygen -t ed25519 -C "admin@server"

将公钥上传至服务器:

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host

测试密钥登录成功后再继续。

2. 修改SSH配置禁用密码

编辑/etc/ssh/sshd_config:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes
AuthenticationMethods publickey

重启SSH服务:

systemctl restart sshd

关键:重启前保留一个活跃会话,另开终端测试密钥登录,防止被锁。

3. 可选:启用双因素认证

安装libpam-google-authenticator,配置PAM和SSH,实现密钥+动态码双因素,进一步提升安全性。

第四步:加固SSH服务配置与权限

细节配置减少潜在风险。

1. 禁用root直接登录

在sshd_config中设置:

PermitRootLogin no

使用普通用户登录后sudo提权。

2. 设置登录失败延迟与次数限制

MaxAuthTries 3
LoginGraceTime 30

减少每次连接的尝试机会。

3. 文件权限检查

确保~/.ssh权限为700,authorized_keys为600:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

避免权限过宽导致密钥失效或泄露。

第五步:持续监控与审计

加固后需建立监控机制,及时发现异常。

1. 日志实时监控

使用journalctl -u ssh -f或tail -f /var/log/auth.log观察登录事件。配置日志告警,如通过logwatch或fail2ban的邮件通知。

2. 定期检查失败登录

每周运行一次统计脚本:

grep 'Failed password' /var/log/auth.log | awk '{print }' | sort | uniq -c | sort -nr | head

关注新增高频IP,及时加入黑名单。

3. 更新与补丁

保持SSH服务端和系统更新:

apt update && apt upgrade openssh-server -y  # Debian/Ubuntu
yum update openssh-server -y  # CentOS

及时修复已知漏洞。

行动建议:立即执行加固清单

按照以下优先级行动:1)部署Fail2ban自动封禁;2)更改SSH端口并限制来源IP;3)配置密钥登录并禁用密码认证;4)调整SSH配置与权限;5)建立监控与更新机制。每完成一步,测试连接确保未被锁。对于需要更高级防护的场景,可考虑集成AegisX的实时入侵检测与自动响应能力,实现 SSH 暴力破解的秒级封禁与告警。安全是持续过程,定期复查配置与日志,让服务器远离爆破威胁。

常见问题(FAQ)

如何快速查看SSH暴力破解尝试?

使用命令 `grep 'Failed password' /var/log/auth.log | awk '{print }' | sort | uniq -c | sort -nr` 可统计失败登录的IP及次数。对于CentOS等系统,日志路径可能为/var/log/secure。定期分析日志有助于识别攻击模式。

Fail2ban如何配置自动封禁SSH爆破IP?

安装Fail2ban后,创建/etc/fail2ban/jail.local文件,启用[sshd]并设置maxretry=3、bantime=86400。重启服务后,Fail2ban会自动监控日志并封禁多次失败的IP。可通过`fail2ban-client status sshd`查看状态。

禁用密码登录后如何避免自己被锁?

在禁用密码登录前,务必先配置好SSH密钥登录并测试成功。修改sshd_config时保留一个活跃会话,用新终端测试密钥登录。确认无误后再重启sshd服务,并保留root权限的备用访问方式(如控制台)。

除了改端口和密钥登录,还有哪些加固措施?

可限制SSH访问来源IP(通过防火墙或sshd_config的AllowUsers),启用双因素认证,定期更新SSH服务端软件,使用Port Knocking技术隐藏SSH端口,以及部署入侵检测系统监控异常行为。

如何验证SSH加固是否生效?

使用`ssh -o PreferredAuthentications=password user@host`尝试密码登录,应被拒绝。检查Fail2ban日志确认封禁动作,使用`ss -tlnp | grep sshd`查看监听端口是否更改,并审查auth.log确认无暴力破解成功记录。