在服务器运维中,保障SSH服务的安全是至关重要的首要任务之一,默认情况下,SSH服务会监听所有网络接口,这意味着任何知道服务器IP和有效账户(或试图暴力破解)的人都可以尝试连接,为了显著提升服务器的安全性,限制特定网段或IP地址访问SSH服务是一项基础且有效的安全策略,本文将详细介绍在CentOS系统中实现这一目标的两种主流方法。

利用 TCP Wrappers 进行访问控制
TCP Wrappers 是一个基于主机的网络访问控制列表系统,它通过 /etc/hosts.allow 和 /etc/hosts.deny 两个文件来定义访问规则,其工作原理是,当有外部请求访问由TCP Wrappers管理的服务(如sshd)时,系统会先检查这两个文件,以决定是否允许该连接。
配置步骤:
此文件用于定义明确允许访问的规则,其基本格式为:服务列表: 客户端列表,要允许来自168.1.0/24网段和0.0.5这个特定IP的SSH连接,可以添加以下内容:# /etc/hosts.allow sshd: 192.168.1.0/24, 10.0.0.5编辑
/etc/hosts.deny文件:
此文件用于定义拒绝访问的规则,为了实现“默认拒绝,只允许白名单”的策略,我们需要在此文件中拒绝所有其他IP对SSH的访问。# /etc/hosts.deny sshd: ALL
规则匹配逻辑:
系统会首先检查 /etc/hosts.allow,如果找到匹配的允许规则,则直接放行,如果未找到,则继续检查 /etc/hosts.deny,如果找到匹配的拒绝规则,则拒绝连接,如果两个文件中都没有匹配的规则,则默认允许连接,上述配置组合实现了精确的访问控制。
使用 firewalld 防火墙(推荐)
对于CentOS 7及更高版本,firewalld 是默认的动态防火墙管理工具,它提供了比TCP Wrappers更强大、更灵活的网络层过滤功能,是现代Linux系统推荐的安全实践。
配置步骤:

检查 firewalld 状态:
确保firewalld服务正在运行。sudo systemctl status firewalld
如果未运行,请启动并设置为开机自启:
sudo systemctl start firewalld sudo systemctl enable firewalld
添加富规则:
firewalld的“富规则”允许我们创建非常复杂的防火墙规则,我们可以使用它来限制SSH服务的源地址。# 允许来自 192.168.1.0/24 网段的SSH访问 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' # 允许来自 10.0.0.5 这个IP的SSH访问 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" service name="ssh" accept'
移除默认的SSH服务规则:
在添加了特定的允许规则后,必须移除默认放行所有IP访问SSH的规则,否则限制将不会生效。sudo firewall-cmd --permanent --remove-service=ssh
重载防火墙配置:
使上述所有永久性规则立即生效。sudo firewall-cmd --reload
验证规则:
查看当前生效的富规则,确认配置无误。sudo firewall-cmd --list-rich-rules
方法对比与选择
为了帮助您选择合适的方法,下表对两种方式进行了简要对比:

| 特性 | TCP Wrappers | firewalld |
|---|---|---|
| 易用性 | 配置简单,适合快速实现 | 命令稍复杂,但逻辑清晰 |
| 灵活性 | 较低,仅支持部分服务 | 极高,支持端口、协议、ICMP等多种过滤 |
| 工作层面 | 应用层 | 网络层 |
| 推荐度 | 适用于旧系统或作为辅助层 | 强烈推荐,现代CentOS系统的标准实践 |
虽然 TCP Wrappers 简单易用,但其功能和安全性已无法满足现代复杂网络环境的需求。firewalld 作为网络层的防火墙,提供了更精细、更可靠的控制,是保障CentOS服务器SSH安全的首选方案,在生产环境中,建议优先采用 firewalld 进行配置。
相关问答 (FAQs)
问题1:如果我配置错误,把自己锁在服务器外面了怎么办?
解答: 这是在进行远程访问控制时必须警惕的风险,如果发生这种情况,您需要有服务器的物理访问权限或通过其他管理方式(如KVM、iDRAC、iLO等远程控制卡,或虚拟化管理平台的控制台)直接连接到服务器,登录后,您可以通过命令行修正配置文件(如 /etc/hosts.allow 或使用 firewall-cmd 命令)来恢复访问,在应用新规则前,一个稳妥的做法是设置一个定时任务,例如在5分钟后重启防火墙或恢复配置文件,以防万一。
问题2:我可以同时使用 TCP Wrappers 和 firewalld 来限制SSH吗?
解答: 可以,但这通常不是必要的,且可能使配置变得复杂和难以排查,两者工作在不同的层级(应用层 vs 网络层),firewalld 的规则会先于 TCP Wrappers 生效,如果一个连接在 firewalld 层被拒绝,它根本不会到达 SSH 服务,TCP Wrappers 也就没有机会去判断,最佳实践是选择其中一种方法并坚持使用,如果您追求最高级别的安全,可以在 firewalld 中设置严格的网络层规则,同时保留 TCP Wrappers 作为应用层的第二道防线,但这需要非常清晰的文档记录。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复