在CentOS 7中设置iptables防火墙,核心在于通过yum安装iptables-services服务,并使用systemctl管理规则,同时务必确保SSH端口放行,否则可能导致服务器失联。
许多运维新手在接触CentOS 7时,往往对防火墙的选择感到困惑,虽然firewalld是默认选项,但iptables因其规则透明、配置直观,依然是许多资深工程师的首选,本文将深入解析如何在CentOS 7环境下高效配置iptables,解决常见的端口开放与规则持久化问题。
CentOS 7安装iptables防火墙前的环境准备
在开始配置之前,我们需要明确CentOS 7的系统特性,该系统默认使用firewalld作为动态防火墙管理器,而iptables作为传统的静态防火墙工具,需要单独安装服务包才能启用,这一步骤至关重要,因为如果直接尝试使用iptables命令而不安装对应服务,系统会提示命令不存在或无法生效。
检查当前防火墙状态
通过命令行查看当前系统的防火墙运行状态,输入以下命令:
systemctl status firewalld
如果显示active (running),说明默认防火墙正在运行,我们需要停止并禁用它,以避免与即将安装的iptables产生冲突,业内专家指出,多防火墙服务同时运行可能导致规则冲突,进而引发不可预知的网络中断。
安装iptables服务包
执行安装命令,在CentOS 7中,iptables的功能被封装在iptables-services包中。
yum install iptables-services -y
安装完成后,启用iptables服务并设置开机自启:
systemctl enable iptables systemctl start iptables
至此,iptables服务已就绪,我们可以开始编写具体的安全规则。
iptables基础配置与端口开放实操
配置iptables的核心逻辑是“默认拒绝,按需放行”,这种策略能最大程度地减少攻击面,我们将通过具体场景,演示如何开放常用端口并保存规则。

清理现有规则
在开始新配置前,建议清空现有规则,确保环境干净。
iptables -F iptables -X iptables -Z
放行SSH连接
这是最关键的一步,如果你通过远程SSH连接服务器,必须首先放行22端口,否则配置完成后你将无法登录。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
开放Web服务端口
假设你的服务器运行着Nginx或Apache,需要对外提供HTTP和HTTPS服务。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
允许本地回环接口
许多应用程序依赖本地回环接口(lo)进行通信,如数据库连接或缓存服务,如果不放行,可能导致应用内部通信失败。
iptables -A INPUT -i lo -j ACCEPT
设置默认策略
设置INPUT链的默认策略为DROP,拒绝所有未明确允许的入站流量。
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
iptables规则持久化与故障排查
Linux重启后,内存中的iptables规则会丢失,持久化规则是生产环境部署的必要环节,掌握故障排查方法,能帮助你快速解决“iptables配置后无法访问”等常见问题。
保存当前规则
使用以下命令将当前内存中的规则保存到配置文件中:
service iptables save
或者使用:
iptables-save > /etc/sysconfig/iptables
验证配置文件是否生成:
ls -l /etc/sysconfig/iptables
常见故障排查场景

当配置完成后发现无法访问服务,通常有以下几种原因:
- 规则未保存:重启后规则丢失。
- SSH端口未放行:导致远程连接断开。
- 规则顺序错误:iptables规则从上到下匹配,一旦匹配成功即执行动作,如果DROP规则在ACCEPT规则之前,放行将失效。
检查规则顺序
使用以下命令查看当前规则及其编号:
iptables -L -n --line-numbers
如果发现顺序错误,可以使用-D命令删除特定规则,并重新插入:
iptables -D INPUT 1 iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables与firewalld对比及选择建议
在CentOS 7生态中,iptables与firewalld并存,许多用户纠结于“CentOS 7 iptables和firewalld哪个更好用”,两者各有优劣,选择应基于具体需求。
| 特性 | iptables | firewalld |
|---|---|---|
| 配置方式 | 静态,需重启服务生效 | 动态,即时生效 |
| 规则复杂度 | 适合复杂、细粒度控制 | 适合简单、区域化管理 |
| 性能 | 略高,无额外抽象层 | 略低,基于nftables后端 |
| 学习曲线 | 较陡峭,命令繁琐 | 较平缓,概念直观 |
| 适用场景 | 传统运维、脚本自动化 | 桌面环境、快速部署 |
行业共识认为,对于需要高度定制化安全策略的生产服务器,iptables依然是更可靠的选择,而对于快速搭建的开发测试环境,firewalld更为便捷。
如何平滑迁移
如果你决定从firewalld切换到iptables,请遵循以下步骤:
- 停止并禁用firewalld。
- 安装iptables-services。
- 导入或重新编写iptables规则。
- 启用并启动iptables服务。

CentOS 7 iptables安全加固最佳实践
除了基础端口开放,还有一些高级技巧可以提升服务器安全性。
限制连接频率
防止暴力破解和DDoS攻击,可以限制特定端口的连接频率,限制SSH每分钟最多允许5个新连接:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
记录被拒绝的流量
为了审计和安全分析,可以记录被DROP的流量日志:
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
注意:日志记录会增加系统开销,建议仅在排查问题时临时启用。
定期审查规则
安全不是一劳永逸的,建议每月审查一次iptables规则,移除不再需要的端口,更新过时的策略。
Q&A:CentOS 7 iptables防火墙常见问题解答
CentOS 7 iptables配置后如何查看当前生效规则?
使用iptables -L -n -v命令可以列出所有链的规则,并显示包和字节的计数,添加--line-numbers参数可以显示规则编号,便于后续管理。
如何备份和恢复iptables规则?
备份命令为iptables-save > backup.rules,恢复命令为iptables-restore < backup.rules,这种方式比重启服务更安全,能确保规则一致。
iptables规则不生效的可能原因有哪些?
主要原因包括:规则未保存导致重启失效;规则顺序错误,前置DROP规则拦截了流量;服务未启动或防火墙服务冲突,云服务商的安全组设置也可能覆盖系统防火墙规则,需同时检查云平台控制台设置。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/398074.html
