防止ssh暴力破解需修改默认端口、禁用密码登录并强制密钥认证、限制登录用户与ip、禁用root远程登录、启用fail2ban自动封禁。

防止SSH暴力破解的核心是减少攻击面、增加攻击成本、及时发现异常。关键不在于完全杜绝尝试,而在于让攻击者无法持续、无法成功、无法隐蔽。
修改默认SSH端口
22端口是所有扫描器的首要目标,改用高位端口(如2222、33891)能过滤掉大量自动化扫描流量。修改后需同步调整防火墙规则,并确保SELinux允许新端口(若启用):
- 编辑/etc/ssh/sshd_config,取消Port行注释并修改数值
- 执行sudo semanage port -a -t ssh_port_t -p tcp 2222(RHEL/CentOS系)
- 更新firewalld:sudo firewall-cmd --permanent --add-port=2222/tcp,再重载
- 重启sshd:sudo systemctl restart sshd
禁用密码登录,强制密钥认证
密码易被爆破,而私钥+口令(passphrase)组合安全性高得多。启用后,仅持有对应私钥且知晓口令的用户才能登录:
- 在/etc/ssh/sshd_config中设PasswordAuthentication no和PubkeyAuthentication yes
- 确保用户~/.ssh/authorized_keys中已写入合法公钥(权限应为600)
- 测试新连接前,务必保留一个已登录的root或sudo会话,避免锁死
限制登录来源与用户范围
并非所有IP都需要SSH访问权限,也并非所有系统账户都该开放远程登录:
- 用AllowUsers或AllowGroups明确放行账号(如AllowUsers alice@192.168.1.* bob@203.0.113.5)
- 结合firewalld或iptables限制源IP:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="2222" protocol="tcp" accept'
- 禁用root远程登录:PermitRootLogin no
启用自动封禁:fail2ban
fail2ban实时分析SSH日志,对短时间多次失败的IP自动添加iptables或firewalld规则封禁(默认10分钟),大幅降低暴力成功率:
- 安装后启用服务:sudo yum install fail2ban(CentOS)或sudo apt install fail2ban(Debian/Ubuntu)
- 复制配置模板:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 在jail.local中设置[sshd]段:enabled = true,可调maxretry = 3、bantime = 3600
- 启动并设开机自启:sudo systemctl enable --now fail2ban










