在CentOS系统中,限制SSH连接是提升服务器安全性的重要措施,SSH作为远程管理的主要方式,若不加限制,可能成为恶意攻击的入口,通过合理的配置,可以有效控制访问来源、限制登录频率,并降低被暴力破解的风险,以下是几种常见且有效的限制SSH连接的方法,结合实际操作进行说明。

基于IP地址的访问控制
通过防火墙或SSH配置文件限制特定IP地址的访问,是最直接的防护手段,使用iptables或firewalld可以实现精细化控制,在firewalld中,仅允许特定IP段访问SSH端口(默认22):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' firewall-cmd --reload
若需完全禁止某IP访问,可添加拒绝规则:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="恶意IP" service name="ssh" reject'
在SSH配置文件/etc/ssh/sshd_config中,通过AllowUsers或AllowHosts指令指定允许的用户或主机,
AllowUsers admin@192.168.1.100
修改后需重启SSH服务:systemctl restart sshd。
使用TCP Wrappers进行主机访问控制
TCP Wrappers是一种基于主机名的访问控制机制,通过/etc/hosts.allow和/etc/hosts.deny文件管理,在hosts.allow中允许特定主机:
sshd: 192.168.1.0/24
在hosts.deny中拒绝其他所有主机:
sshd: ALL
配置完成后,需确保/etc/xinetd.d/sshd中enabled = yes(若使用xinetd)。

限制SSH登录频率与失败尝试次数
为防止暴力破解,可配置SSH登录失败次数限制,使用fail2ban工具自动封禁可疑IP:
- 安装fail2ban:
yum install fail2ban -y - 创建配置文件
/etc/fail2ban/jail.local:[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600
该配置表示:连续3次登录失败则封禁IP1小时,启动服务:
systemctl enable --now fail2ban。
更改默认SSH端口与禁用root登录
默认SSH端口易被扫描攻击,建议修改为非标准端口(如2222),在sshd_config中设置:
Port 2222
禁用root直接登录:
PermitRootLogin no
修改后重启SSH服务,需注意,客户端连接时需指定新端口:ssh -p 2222 user@ip。
使用SSH密钥认证替代密码
密钥认证比密码更安全,可完全禁用密码登录,在sshd_config中设置:
PasswordAuthentication no
PubkeyAuthentication yes
将客户端生成的公钥(~/.ssh/id_rsa.pub)添加到服务器的~/.ssh/authorized_keys文件中,确保目录权限正确:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。

定期审计SSH日志
通过分析/var/log/secure日志,可发现异常登录行为,使用grep查找失败尝试:
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c
该命令可统计各IP的失败登录次数,帮助定位潜在威胁。
FAQs
-
如何查看当前SSH连接状态?
使用ss -tulpn | grep ssh可查看SSH端口监听状态;who命令可显示当前登录用户及来源IP。 -
误封禁IP后如何解除fail2ban封禁?
执行fail2ban-client set sshd unbanip [IP地址]即可解除指定IP的封禁,或在/etc/fail2ban/jail.local中调整bantime或maxretry参数后重启服务。