人人都会AI编程

修改默认端口、限制登录 IP、登录失败锁定

更新时间:2026-07-12

SSH 是远程管理 Linux 服务器最常用的服务,也往往是攻击者首先试探的目标。调整下面三项配置,可以在不增加额外软件的情况下,大幅降低被自动扫描和暴力破解的风险。

1. 修改默认端口

SSH 默认监听 22 端口,几乎所有的自动化攻击脚本都会优先扫描这个端口。将端口改为一个不常用的数值,能有效过滤掉大量无差别的扫探行为。

操作步骤
用编辑器打开 SSH 配置文件:

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,去掉注释符号并修改数值,例如:

Port 2266

完成后保存文件。重启 SSH 服务使配置生效:

sudo systemctl restart sshd

验证:在本机另开一个终端,用新端口尝试连接:

ssh -p 2266 user@your_server_ip

确认可以正常登录后,再关闭原来的连接。

注意

  • 端口号应选择 1024 到 65535 之间的值,避免与知名端口冲突。尽量不要使用 2222、22222 这类“常见变体”,因为它们也经常被扫描。
  • 如果你的服务器有防火墙(如 iptables、ufw、云服务商安全组),记得先放行新端口,再测试。
  • 修改端口只是“隐蔽式安全”,不能替代密码强度和密钥认证等核心措施,但可以作为第一层低成本过滤。

2. 限制登录 IP

如果你的服务器只允许从公司办公网络、家庭固定 IP 或跳板机进行远程管理,直接限制来源 IP 是最有效的保护手段之一。这可以通过系统防火墙实现,也可以结合 TCP Wrappers 或 SSH 自身的配置。

方法一:使用防火墙(以 ufw 为例)
先确保 UFW 已启用并默认禁止入站连接:

sudo ufw enable
sudo ufw default deny incoming

然后仅允许来自特定 IP 或网段的 SSH 端口(假设改为 2266):

sudo ufw allow from 203.0.113.50 to any port 2266 proto tcp
sudo ufw allow from 10.0.0.0/8 to any port 2266 proto tcp

查看规则确认无误:

sudo ufw status numbered

方法二:SSH 自身配置
/etc/ssh/sshd_config 中也可直接进行来源限制,但这个功能依赖 SSH 手册中的 AllowUsersMatch 指令。更简单的方式是使用 AllowUsers 配合 IP 写法:

AllowUsers admin@192.168.1.100 admin@10.0.0.*

这样只有从指定 IP 登录 admin 用户才会被允许。修改后重启 sshd 即可。

防护效果:不在白名单内的任何 IP 都将被直接拒绝,连接请求在 TCP 握手阶段或 SSH 协议协商阶段就会被丢弃。攻击者甚至看不到登录提示。

3. 登录失败锁定

暴力破解尝试通过反复猜测用户名和密码来获取访问权限。登录失败锁定机制可以在连续多次认证失败后,暂时禁止该 IP 或用户继续尝试,从而极大增加破解的时间成本。

Linux 下最常用工具是 fail2ban。它通过监控 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)等认证日志,当发现某个 IP 在短时间内登录失败达到设定阈值后,自动在防火墙中添加规则将其屏蔽一段时间。

安装与基础配置

sudo apt update && sudo apt install fail2ban   # Debian/Ubuntu
sudo yum install epel-release && sudo yum install fail2ban   # RHEL/CentOS

复制默认配置文件,创建一个本地规则文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 jail.local,关注 [sshd] 部分。一个实用的示例配置:

[sshd]
enabled   = true
port      = 2266              # 如果修改了SSH端口,这里必须对应
filter    = sshd
logpath   = /var/log/auth.log  # 根据发行版调整
maxretry  = 3                  # 失败3次即触发
bantime   = 3600               # 封禁1小时(单位秒)
findtime  = 600                # 10分钟内的失败次数累计

保存后启动 fail2ban 并设置开机自启:

sudo systemctl enable fail2ban --now

查看状态与手动操作

  • 查看被屏蔽的 IP:sudo fail2ban-client status sshd
  • 手动解除某 IP 的屏蔽:sudo fail2ban-client set sshd unbanip 192.168.1.99

备用方案:PAM 模块
如果暂时不想安装 fail2ban,也可以使用 PAM(Pluggable Authentication Modules)中的 pam_tally2pam_faillock 来锁定用户账号本身。例如在 /etc/pam.d/sshd 中添加:

auth required pam_faillock.so preauth silent deny=5 unlock_time=600
auth required pam_faillock.so authfail deny=5 unlock_time=600

这意味着用户在 5 次密码错误后锁定 10 分钟。锁定是针对用户账户的,而非 IP,可以防止针对特定用户名的破解,但无法应对分布式密码尝试。一般建议与 fail2ban 配合使用。

防护思路总结

  • 修改默认端口:过滤无差别扫描,减少噪音;
  • 限制登录 IP:仅允许可信来源,从网络边界杜绝非授权连接;
  • 登录失败锁定:让暴力破解在时效上变得不可行。

三者结合起来,形成了从“隐藏”、“收窄入口”到“主动反制”的防御纵深,是在生产环境中快速提升 SSH 安全性的标准做法。