在日常的服务器运维工作中,我们时常会遇到需要封闭特定端口的情况,这可能是出于安全加固,防止恶意扫描;也可能是为了停止某项服务,释放系统资源,对于使用CentOS系统的站长和管理员而言,掌握端口管理技能是保障服务器稳定与安全的基本功,本文将详细介绍在CentOS系统中,如何使用系统内置的强大工具来封禁端口。

理解端口与防火墙
在开始操作前,我们有必要简单理解端口的概念,服务器上的端口好比一栋大楼里的各个房门,每个门后对应着一种特定的网络服务(80端口通常对应Web服务,22端口对应SSH远程连接),防火墙则是这栋大楼的安保系统,它严格管控着哪些门可以进出,以及进出需要遵循的规则。
在CentOS 7及以后的版本中,firewalld是默认的动态防火墙管理器,它相比传统的iptables,配置更直观,支持动态更新,无需重启服务,直接使用iptables命令也是一种有效且经典的方法。
使用Firewalld封禁端口
firewalld通过“区域”和“服务”的概念来管理网络流量,对于封禁端口,操作非常直接。
检查防火墙状态 在开始任何操作前,请先确保
firewalld服务正在运行。sudo systemctl status firewalld
如果显示
active (running),则表示服务已启动,若未启动,请使用sudo systemctl start firewalld命令启动它,并使用sudo systemctl enable firewalld设置开机自启。封禁特定端口 假设我们需要封禁TCP协议的8080端口,可以执行以下命令:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="8080" reject'
这条命令的含义是:添加一条永久的富规则,针对IPv4家族,拒绝所有访问TCP 8080端口的流量。
--permanent表示这条规则是永久的,没有这个参数,规则在重启后会失效。封禁端口范围 如果需要封禁一个范围内的端口,例如从10000到10010的TCP端口,命令如下:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="10000-10010" reject'
重新加载防火墙配置 在添加了永久规则后,必须重新加载防火墙才能使新规则立即生效,同时不会中断现有的连接。
sudo firewall-cmd --reload
验证规则 你可以通过以下命令查看当前所有生效的富规则,确认封禁是否成功。
sudo firewall-cmd --list-rich-rules
解除封禁: 如果需要重新开放被封禁的端口,只需将上述添加规则命令中的--add-rich-rule替换为--remove-rich-rule即可,解除对8080端口的封禁:
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" port protocol="tcp" port="8080" reject' sudo firewall-cmd --reload
使用iptables封禁端口
虽然firewalld是默认工具,但许多资深管理员依然习惯于直接使用iptables,它的规则同样高效。
封禁特定端口 封禁TCP协议的8080端口:
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
这条命令解释:
-A INPUT:将规则追加到INPUT链的末尾。-p tcp:指定协议为TCP。--dport 8080:指定目标端口为8080。-j DROP:对匹配的数据包采取“丢弃”动作。
如果需要封禁UDP端口,只需将
-p tcp改为-p udp。封禁端口范围 封禁10000到10010的TCP端口:

sudo iptables -A INPUT -p tcp --dport 10000:10010 -j DROP
保存iptables规则 通过命令添加的
iptables规则在系统重启后会丢失,为了永久生效,需要将当前规则保存。 在CentOS 7中,可以使用以下命令:sudo iptables-save > /etc/sysconfig/iptables
或者安装
iptables-services包并使用systemctl管理:sudo yum install iptables-services sudo systemctl enable iptables sudo service iptables save
解除封禁: 要解除使用iptables添加的规则,需要找到规则的精确位置或用删除命令,最简单的方法是使用带-D参数的相同规则:
sudo iptables -D INPUT -p tcp --dport 8080 -j DROP
然后同样需要执行保存操作,以确保重启后解除生效。
重要注意事项与最佳实践
- 谨慎操作,避免自锁:在封禁端口时,尤其是通过远程SSH(默认端口22)连接服务器时,务必万分小心,错误地封禁了SSH端口会导致你无法再远程登录服务器,建议在服务器的本地控制台进行操作,或者设置一个“逃生舱”规则,确保你的IP地址不会受到新规则影响。
- 明确协议类型:在封禁端口前,要清楚该端口使用的是TCP还是UDP协议,或者两者都需要封禁,某些服务(如DNS)可能同时使用两种协议。
- 优先使用富规则:
firewalld的富规则表达能力更强,可以基于源IP、端口、协议等组合条件进行更精细的控制,只拒绝某个特定IP访问端口,而不是全部拒绝。 - 定期审查规则:定期使用
firewall-cmd --list-all或iptables -L -n查看所有防火墙规则,清理不再需要的旧规则,保持配置的简洁和清晰,这有助于安全和故障排查。
端口管理是服务器安全防御体系中一道简单却至关重要的防线,无论是选择现代化的firewalld还是经典的iptables,核心在于理解其原理并谨慎操作,一个配置得当的防火墙,能有效将大量网络威胁隔绝在外,为你的业务提供一个稳定可靠的基础环境,对于服务器管理者来说,这项技能的价值不容忽视,它直接关系到线上服务的生死存亡。
