CentOS防火墙定制化需求如何实现
小樊
39
2026-01-02 02:35:29
CentOS 防火墙定制化实现指南
一 基础准备与核心概念
- 在 CentOS 7/8 中,默认使用 firewalld 管理 netfilter。它通过“区域 Zones”对网络接口按信任级别分组,每个区域包含一组预设规则;规则有“运行时”(立即生效、重启失效)与“永久”(写入配置、需重载或重启后生效)之分。常用区域包括:public、internal、external、dmz、trusted、drop、block 等,默认区域通常为 public。理解并正确使用区域,是进行精细化策略设计的前提。
二 常用定制化场景与命令
- 端口与服务放行
- 开放单端口:firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --reload
- 开放端口范围:firewall-cmd --zone=public --add-port=10000-10010/tcp --permanent && firewall-cmd --reload
- 放行预定义服务:firewall-cmd --zone=public --add-service=http --permanent && firewall-cmd --reload
- 查看已放行端口/服务:firewall-cmd --zone=public --list-ports;firewall-cmd --zone=public --list-services
- 基于源 IP 的访问控制
- 仅允许指定 IP 访问 SSH(22/TCP):firewall-cmd --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.45” port port=“22” protocol=“tcp” accept’ --permanent && firewall-cmd --reload
- 拒绝某 IP 访问所有服务:firewall-cmd --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.50” reject’ --permanent && firewall-cmd --reload
- 端口转发与 NAT
- 将公网 80/TCP 转发至内网 192.168.1.10:8080:firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 --permanent && firewall-cmd --reload
- 出口源地址转换(SNAT/Masquerade):firewall-cmd --zone=public --add-masquerade --permanent && firewall-cmd --reload
- 接口与区域绑定、默认区域
- 将 eth0 绑定到 internal 区域:firewall-cmd --zone=internal --change-interface=eth0 --permanent && firewall-cmd --reload
- 设置默认区域为 internal:firewall-cmd --set-default-zone=internal
- 自定义服务与区域
- 新建服务(如 8088/TCP 的 nginx):firewall-cmd --permanent --new-service=nginxserver --set-description=“nginx Service”;firewall-cmd --permanent --service=nginxserver --add-port=8088/tcp;firewall-cmd --reload
- 新建区域并绑定源地址与服务:firewall-cmd --permanent --new-zone=opsserver --set-description=“Ops Zone”;firewall-cmd --permanent --zone=opsserver --add-source=192.168.2.100;firewall-cmd --permanent --zone=opsserver --add-service=nginxserver;firewall-cmd --reload
- 规则验证与回滚
- 查看生效规则:firewall-cmd --list-all;firewall-cmd --list-all-zones
- 对比运行时与永久配置差异,必要时先添加 --permanent 再 --reload,或用 --runtime-to-permanent 固化当前运行时规则。
三 进阶用法与注意事项
- 富规则与日志审计
- 记录被拒绝的内网网段流量:firewall-cmd --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” log prefix="BLOCKED-INTERNAL " level=“info” reject’ --permanent && firewall-cmd --reload
- 富规则支持按源/目的 IP、端口、协议、ICMP 类型、日志、限制速率等进行细粒度控制,适合复杂策略与合规审计需求。
- 直接操作底层表链(–direct)
- 当 firewalld 抽象不足时,可用:firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 192.168.1.0/24 -p tcp --dport=22 -j ACCEPT(永久需加 --permanent 并 --reload)。此方式更灵活,但维护成本与出错风险更高,建议优先使用富规则。
- 配置持久化与备份
- 规则修改遵循“–permanent + --reload”模式;配置文件位于 /etc/firewalld/(用户配置),/usr/lib/firewalld/ 为系统默认配置(不建议直接修改)。变更前建议备份相关 zone XML 文件,变更后使用 firewall-cmd --list-all 逐项核验,避免锁死与业务中断。
四 快速模板
- 模板 A 仅允许指定运维网段访问 8088/TCP(nginx)
- 新建服务:firewall-cmd --permanent --new-service=nginxserver --set-description=“Nginx 8088”;firewall-cmd --permanent --service=nginxserver --add-port=8088/tcp;firewall-cmd --reload
- 新建区域并绑定源与服务:firewall-cmd --permanent --new-zone=opsserver;firewall-cmd --permanent --zone=opsserver --add-source=192.168.2.0/24;firewall-cmd --permanent --zone=opsserver --add-service=nginxserver;firewall-cmd --reload
- 验证:firewall-cmd --zone=opsserver --list-all
- 模板 B 公网 80→内网 8080 转发(网关/NAT)
- 开启伪装:firewall-cmd --zone=public --add-masquerade --permanent
- 端口转发:firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 --permanent
- 生效:firewall-cmd --reload;验证:firewall-cmd --zone=public --list-forward-ports。