修改默认 SSH 端口只能过滤部分自动化扫描,无法阻止全端口探测或定向攻击。彻底防护需同时禁用密码登录、强制密钥认证、禁用 root 远程登录并部署 fail2ban 自动封禁异常 IP。
先说结论:仅修改端口无法彻底防御暴力破解,必须组合使用密钥认证、禁用 root 登录和自动封禁策略。
- 先判断:确认当前是否已开启密码登录且允许 root 远程访问,这是被爆破的核心风险点。
- 优先做:配置 SSH 密钥认证并禁用密码登录,同时安装 fail2ban 监控登录失败日志。
- 再验证:保留一个已登录会话测试新配置,确认无误后再关闭原连接,避免锁死服务器。
命令速用版
以下命令基于 CentOS/RHEL 系统,Ubuntu/Debian 请将服务名 sshd 改为 ssh,包管理器 yum 改为 apt。
1. 修改端口并禁用 root 及密码登录:
编辑配置文件 vim /etc/ssh/sshd_config,确保包含以下行:
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
2. 放行防火墙新端口:
sudo firewall-cmd `--permanent` `--add-port`=22222/tcp
sudo firewall-cmd `--reload`
3. 安装并启用 fail2ban:
sudo yum install fail2ban -y
sudo systemctl enable `--now` fail2ban
4. 重启 SSH 服务:
sudo systemctl restart sshd
为什么会这样
修改端口能避开默认扫描,但无法阻止全端口探测,密码登录才是暴力破解成功的根本原因。
攻击脚本默认扫描 22 端口,改成高位端口能大幅减少无效连接和日志噪音,但主流扫描器会全端口探测。若保留密码登录,攻击者仍可通过字典爆破尝试登录。禁用密码登录并强制密钥认证后,暴力破解失去意义,因为攻击者无法穷举私钥。配合 fail2ban 自动封禁频繁失败 IP,可进一步增加攻击成本。
分步处理
第 1 步:备份配置文件
修改前务必备份,防止配置错误导致无法恢复:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
第 2 步:修改 SSH 核心配置
编辑 /etc/ssh/sshd_config,修改或添加以下项。注意不要注释掉关键行:
- Port 22222(建议使用 1024-65535 之间的闲置端口)
- PermitRootLogin no(禁用 root 直接登录)
- PasswordAuthentication no(禁用密码登录)
- PubkeyAuthentication yes(启用密钥认证)
第 3 步:配置防火墙与 SELinux
若防火墙未放行新端口,连接会直接超时。若启用 SELinux,需标注新端口类型:
sudo firewall-cmd `--permanent` `--add-port`=22222/tcp
sudo firewall-cmd `--reload`
sudo semanage port -a -t ssh_port_t -p tcp 22222
第 4 步:部署 fail2ban 自动封禁
复制配置模板并启用 sshd 过滤器,设置失败次数阈值:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
在 jail.local 中设置 [sshd] 段:enabled = true, maxretry = 3, bantime = 3600
第 5 步:生成并部署密钥
在客户端生成密钥对,将公钥写入服务器 ~/.ssh/authorized_keys,权限设为 600。确保测试新密钥登录成功后,再重启 SSH 服务。
怎么验证是否生效
通过端口监听状态、登录测试和封禁日志确认配置已应用且无锁定风险。
- 检查端口监听:运行
ss -tlnp | grep 22222,出现监听记录即为成功。 - 测试新连接:新开一个终端窗口,使用
ssh -p 22222 user@ip测试密钥登录,成功后再关闭旧会话。 - 验证 fail2ban 状态:运行
fail2ban-client status sshd,查看当前封禁 IP 列表。 - 检查防火墙规则:运行
iptables -nL INPUT | grep DROP,确认有针对异常 IP 的封禁规则。
常见坑
配置过程中容易因防火墙拦截、SELinux 限制或客户端未更新端口导致无法连接。
- 防火墙未放行:修改端口后必须在系统防火墙及云厂商安全组中同步放行,否则系统防火墙会直接丢包。
- SELinux 拦截:若服务器启用 SELinux,需运行 semanage 命令允许新端口,否则 sshd 启动会失败。
- 客户端配置未更新:Xshell 等客户端连接时必须手动修改端口号,不能只靠记忆。
- 把自己锁在外面:禁用密码登录前务必确保密钥可用,重启服务前务必保留一个已登录会话用于应急。
常见问题
只修改 SSH 端口能彻底防止暴力破解吗?
不能,修改端口只能过滤部分自动化扫描,无法阻止全端口探测。
配置错误导致无法登录怎么恢复?
通过云厂商控制台的 VNC 或串行控制台登录服务器,还原备份的 sshd_config 文件并重启服务。
fail2ban 和宝塔面板防爆破插件哪个更好?
fail2ban 兼容性更好,宝塔插件可能因日志路径不对或被第三方安全软件接管防火墙而失效。
禁用密码登录后忘记带密钥怎么办?
必须通过云厂商控制台的 VNC 或串行控制台登录,重新配置密钥或临时开启密码登录。
参考来源
- Linux 防止暴力破解_SSH 安全防护
- LinuxSSH 被暴力破解防护_安全防御方案
- 宝塔面板频繁遭到 SSH 暴力破解怎么防范_修改默认 22 端口与启用面板防爆破插件
- SSH 安全加固:保护云服务器不被暴力破解的 6 个步骤
- 服务器被暴力破解?8 步 SSH 安全加固方案,从端口到日志全方位防护
- Linux 如何防止 SSH 暴力破解
- 防止暴力破解 SSH 的四种方法!附实例手把手讲解
- Linux 服务器 SSHD 登录加固指南:全面防御暴力破解
- 如何预防账户暴力破解攻击?_账户暴力破解_常见问题_企业主机安全 HSS-华为云
- 服务器总被暴力破解?如何有效防范 SSH 攻击?