应根据系统版本、管理习惯及功能需求选择iptables或firewalld:iptables适用于CentOS 6等旧系统,需手动保存规则;firewalld是CentOS 7+默认工具,支持动态配置与区域管理,二者不可共存。

如果您在Linux系统中需要实施网络访问控制,但面对iptables与firewalld两种主流防火墙工具不知如何选择与配置,则需根据系统版本、管理习惯及功能需求进行差异化操作。以下是针对这两种防火墙的独立配置方法与关键对比说明:
一、iptables防火墙配置方法
iptables是基于netfilter框架的命令行工具,直接操作内核规则链,适用于CentOS 6、Debian旧版等传统系统,规则持久化需手动保存。
1、查看当前所有规则:运行iptables -L -v -n命令,显示filter表各链的匹配计数与详细规则。
2、设置INPUT链默认策略为拒绝:执行iptables -P INPUT DROP,确保未显式放行的入站流量被拦截。
3、允许本地回环通信:添加规则iptables -A INPUT -i lo -j ACCEPT,避免系统内部服务异常。
4、放行已建立连接的响应流量:运行iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT,保障TCP会话连续性。
5、开放SSH端口(22):执行iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT,启用远程管理能力。
6、保存当前规则至配置文件:使用iptables-save > /etc/sysconfig/iptables(CentOS/RHEL)或iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu),确保重启后规则生效。
二、firewalld防火墙配置方法
firewalld采用动态管理模式,支持区域(zone)概念与运行时/永久配置分离,是CentOS 7+、Fedora及RHEL 8+的默认防火墙,无需重启服务即可重载规则。
1、检查firewalld服务状态:运行systemctl status firewalld确认服务是否活跃,若未运行则执行systemctl start firewalld启动。
2、查看当前活动区域:使用firewall-cmd --get-active-zones获取当前启用的区域名称,如public。
3、永久开放HTTP端口(80):执行firewall-cmd --zone=public --add-port=80/tcp --permanent,将规则写入持久配置。
4、重新加载配置使永久规则生效:运行firewall-cmd --reload,不中断现有连接即可应用新规则。
5、查询指定区域所有开放端口:使用firewall-cmd --zone=public --list-ports验证端口是否已成功添加。
6、设置默认区域为drop:执行firewall-cmd --set-default-zone=drop,使所有未明确归属区域的接口默认拒绝入站流量。
三、iptables与firewalld核心差异对比
iptables直接操作内核规则链,所有规则均为运行时生效,重启即丢失,必须显式保存;firewalld通过D-Bus接口与后台守护进程交互,支持--permanent参数写入磁盘配置,reload操作即时生效且不影响已有连接。
iptables无区域概念,管理员需自行组织INPUT/FORWARD/OUTPUT链逻辑;firewalld内置public、internal、trusted等预定义区域,可按网络环境一键切换安全策略级别。
iptables规则顺序敏感,新增规则默认追加至链尾,易因位置错误导致策略失效;firewalld规则由XML配置驱动,同一端口多次添加不会重复,自动去重并统一管理。
iptables依赖用户对表(filter/nat/mangle)和链(INPUT/OUTPUT等)的深度理解;firewalld提供高阶抽象,如--add-service=http隐式处理多端口与协议组合,降低误配风险,适合运维标准化场景。
四、兼容性与共存处理
firewalld底层仍调用iptables命令生成规则,因此二者不可同时管理同一套netfilter逻辑;若firewalld正在运行,直接修改iptables规则可能导致firewalld状态错乱甚至服务崩溃。
1、停用firewalld并启用iptables:执行systemctl stop firewalld && systemctl disable firewalld,随后安装并启动iptables-services包(CentOS 7+)。
2、清空firewalld残留规则:在停用firewalld后,运行firewall-cmd --panic-on && firewall-cmd --panic-off强制刷新内核规则表,避免旧规则残留。
3、验证底层规则一致性:使用iptables -t filter -L INPUT检查INPUT链是否仅含iptables写入的规则,确认firewalld未干预。
4、禁止firewalld开机自启:执行systemctl disable firewalld,防止系统重启后自动拉起冲突服务。
五、规则调试与故障定位
iptables调试依赖日志与计数器:启用iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: ",配合dmesg | grep IPTABLES捕获丢包详情;LOG目标不终止规则匹配,需紧随其后添加DROP或REJECT才能生效。
firewalld调试侧重实时反馈:使用firewall-cmd --debug开启调试模式,或监听D-Bus信号dbus-monitor --system "interface='org.fedoraproject.FirewallD1'"观察配置变更事件。
1、检查iptables规则是否命中:运行iptables -L INPUT -v -n,观察对应规则的packet与byte计数是否增长。
2、确认firewalld端口是否真正开放:在客户端执行telnet 服务器IP 80,若连接超时而非拒绝,说明端口未开放或服务未监听。
3、排查firewalld区域绑定错误:使用firewall-cmd --get-zone-of-interface=eth0确认网卡所属区域,避免规则部署到错误zone。
4、验证firewalld服务端口监听状态:运行ss -tlnp | grep :80,确认httpd或nginx进程确实在80端口监听,排除服务层问题。










