
文章目录1. 内核底层机制Netfilter 与四表五链1.1 五个规则链Chains1.2 四个规则表Tables2. 传统静态防火墙iptables2.1 规则匹配顺序与动作2.2 常用配置命令与语法3. 现代动态防火墙firewalld3.1 核心概念安全区域Zone3.2 firewall-cmd 核心命令实战3.3 进阶实战富规则Rich Rules与端口转发4. iptables vs. firewalld 选型对比5. 总结在 Linux 系统安全中防火墙是网络安全的第一道防线用于控制数据包的进出与转发。在现代 Linux 系统中主要存在两套最常见的防火墙管理工具iptables经典的静态防火墙管理工具直接对 Linux 内核的 Netfilter 框架进行规则配置。firewalldRHEL/CentOS 7、Fedora、Rocky Linux 等系统默认的动态防火墙管理工具底层同样调用 Netfilter但支持“按区域Zone划分”且修改规则无需重启服务或中断连接。1. 内核底层机制Netfilter 与四表五链无论使用iptables还是firewalld它们本质上都是运行在用户态的配置工具真正的过滤机制是由 Linux 内核中的Netfilter框架执行的。Netfilter 的核心逻辑可以归纳为四表五链1.1 五个规则链Chains数据包流经 Linux 内核时会依次经过不同的处理关卡链INPUT处理流入当前主机的数据包如访问本机的 80 端口。OUTPUT处理从当前主机发出的数据包。FORWARD处理经过当前主机转发的数据包如将本机作为路由器/网关。PREROUTING数据包刚到达网卡、进行路由选择之前常用于 DNAT 端口转发。POSTROUTING数据包完成路由选择、即将离开网卡之前常用于 SNAT 源地址转换。1.2 四个规则表Tables决定了对数据包具体做什么操作优先级rawmanglenatfilterfilter表默认负责数据包过滤允许ACCEPT、拒绝REJECT、丢弃DROP。nat表负责网络地址转换端口映射、IP 伪装/SNAT/DNAT。mangle表负责修改数据包头部的服务类型TOS、标记Mark等。raw表负责去除连接追踪机制Conntrack。2. 传统静态防火墙iptablesiptables命令直接操作 Netfilter 的表和链。2.1 规则匹配顺序与动作顺序链中的规则从上到下按顺序匹配。一旦匹配到符合条件的规则如ACCEPT或DROP就会立即停止向下匹配。默认策略若所有规则都没有匹配上则执行该链的默认策略Default Policy。动作选择ACCEPT允许数据包通过。DROP直接丢弃数据包不给发送方任何回应发送端通常超时。REJECT拒绝数据包并向发送方返回一个 ICMP 错误响应。2.2 常用配置命令与语法语法结构iptables [-t 表名] 命令选项 [链名] [匹配条件] [-j 控制动作]# 1. 查看 filter 表中的所有规则与行号sudoiptables-L-n-v--line-numbers# 2. 开放 22 (SSH) 和 80 (HTTP) 入站端口sudoiptables-AINPUT-ptcp--dport22-jACCEPTsudoiptables-AINPUT-ptcp--dport80-jACCEPT# 3. 封禁指定 IP拒绝来自 192.168.1.100 的所有流量sudoiptables-AINPUT-s192.168.1.100-jDROP# 4. 删除指定链上的某条规则按行号删除如删除 INPUT 链第 3 条sudoiptables-DINPUT3# 5. 清空 filter 表中的所有规则⚠️ 慎用容易把 SSH 连通性清掉sudoiptables-F3. 现代动态防火墙firewalldfirewalld引入了区域Zone的概念将不同的网络接口网卡绑定到不同的安全区域中并根据区域定义安全策略。3.1 核心概念安全区域Zone预设的几个常用区域按信任度从低到高区域名称默认策略与场景drop信任度最低。丢弃所有进入的数据包无任何回应。block拒绝所有进入的数据包并返回 ICMP 拒绝消息。public默认区域。仅接受显式指定的入站连接如 SSH、HTTP用于公共网络环境。trusted信任度最高。接受所有传入的网络流量。3.2firewall-cmd核心命令实战在firewalld中修改规则分为运行时配置Runtime与永久配置Permanent默认命令只对当前运行状态生效重启后丢失。加上--permanent参数会永久写入配置文件但需要执行--reload才能加载生效。# 1. 查看防火墙运行状态与当前活跃区域sudofirewall-cmd--statesudofirewall-cmd --get-active-zones# 2. 列出默认区域的所有开放规则sudofirewall-cmd --list-all# 3. 开放特定服务或端口如开放 80/tcp 端口sudofirewall-cmd--zonepublic --add-port80/tcp--permanentsudofirewall-cmd--zonepublic --add-servicehttp--permanent# 4. 移除已开放的端口sudofirewall-cmd--zonepublic --remove-port80/tcp--permanent# 5. ⚠️ 极其关键重载配置使 --permanent 规则立即生效sudofirewall-cmd--reload3.3 进阶实战富规则Rich Rules与端口转发在firewalld中可以通过“富规则”实现针对特定 IP 的精确控制或者配置端口转发案例 1仅允许特定 IP 访问 3306 (MySQL) 端口sudofirewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.50 port protocoltcp port3306 acceptsudofirewall-cmd--reload案例 2本地端口转发将访问本机的 8080 端口转发到 80 端口sudofirewall-cmd--permanent--add-forward-portport8080:prototcp:toport80sudofirewall-cmd--reload4. iptables vs. firewalld 选型对比对比维度iptablesfirewalld管理模型静态的“表与链”模型动态的“区域与服务”模型修改配置影响修改规则需要重载整个服务可能打断现有连接支持动态更新不打断现有已建立的网络连接配置粒度粒度极细直接配置规则和网络包细节封装了常用服务与端口语法更直观适用发行版Ubuntu/Debian 常用或配合ufw简单工具CentOS 7 / RHEL / Fedora 默认搭载5. 总结底层机制一致无论是使用iptables还是firewalld真正干活的都是内核的Netfilter框架。生产实操规范在使用firewall-cmd时千万不要漏掉--permanent和--reload的双组合否则重启服务器后开放的端口会重新封闭。在通过远程 SSH 配置防火墙规则时务必先确保放行 22 端口避免将自己锁在服务器门外。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目