CentOS防火墙配置全攻略:从基础命令到Docker实战,一文掌握网络安全核心技能

在企业级服务器运维中,CentOS凭借其稳定性与安全性广受青睐。而作为系统安全的第一道防线——防火墙(Firewall),则是每一位Linux管理员必须熟练掌握的核心技术之一。

CentOS防火墙配置全攻略:从基础命令到Docker实战,一文掌握网络安全核心技能

本文将围绕 CentOS 7及以上版本默认的 firewalld 防火墙服务,全面解析其工作原理、常用命令、端口开放技巧,并深入探讨与Docker容器集成时的关键配置问题,帮助你构建高效、安全的网络环境。


什么是 firewalld?它和 iptables 有何区别?

自 CentOS 7 起,系统默认使用 firewalld 替代传统的 iptables 作为动态防火墙管理工具。

  • firewalld:基于 区域(Zone)和服务(Service) 的抽象机制,支持运行时配置更新,无需重启整个防火墙服务。

  • iptables:底层基于 Netfilter 内核模块,规则复杂但灵活,适合高级定制化需求。

✅ 推荐使用 firewalld 进行日常管理,简洁直观;如需精细控制流量,可结合 rich rules 或直接操作 iptables。


firewalld 基础状态查询命令

在修改任何规则前,请先了解当前防火墙状态:

# 查看防火墙是否正在运行
sudo firewall-cmd --state
# 输出 running 表示已启动

# 查看默认区域(通常为 public)
sudo firewall-cmd --get-default-zone

# 查看当前活动区域
sudo firewall-cmd --get-active-zones

# 查看指定区域的所有规则(如 public 区域)
sudo firewall-cmd --zone=public --list-all

# 查看已开放的服务(如 ssh、http)
sudo firewall-cmd --list-services

# 查看显式添加的开放端口
sudo firewall-cmd --list-ports

📌 提示:--list-all 是最常用的命令,能一次性展示该区域下的所有服务、端口、富规则等信息。


如何开放端口或服务?常用配置命令详解

1. 开放指定端口(临时 + 永久)

以开放 TCP 端口 8080 为例:

# 临时生效(重启后失效)
sudo firewall-cmd --zone=public --add-port=8080/tcp

# 永久生效(推荐)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 重新加载配置使永久规则生效
sudo firewall-cmd --reload

✅ 支持协议类型:tcpudpsctp 等。


2. 删除已开放的端口

# 移除临时规则
sudo firewall-cmd --zone=public --remove-port=8080/tcp

# 移除永久规则
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent

# 重新加载
sudo firewall-cmd --reload

3. 放行预定义服务(更安全便捷)

firewalld 内置了常见服务模板(如 SSH=22, HTTP=80, HTTPS=443):

# 允许 HTTP 服务通过
sudo firewall-cmd --zone=public --add-service=http --permanent

# 允许 HTTPS
sudo firewall-cmd --zone=public --add-service=https --permanent

# 重新加载
sudo firewall-cmd --reload

查看内置服务列表:

firewall-cmd --get-services

高级配置:IP白名单、富规则(Rich Rules)

1. 给特定 IP 开放某个端口(例如允许 192.168.1.100 访问 22 端口)

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload

2. 设置 IP 白名单(对某 IP 开放所有端口)

适用于内网集群通信场景:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
sudo firewall-cmd --reload

3. 禁止 Ping(防探测攻击)

# 禁止 ICMP 回应(即无法 ping 通)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# 恢复 ping 功能
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

⚠️ 注意:此设置不通过 firewalld 控制,属于内核参数调整。


Docker 容器环境下防火墙配置难点与解决方案

❗ 问题:Docker 容器端口绕过 firewalld?

由于 Docker 使用自己的 iptables 规则链,默认会绕过 firewalld 的控制,导致即使关闭了主机端口,容器仍可被访问。

✅ 解决方案一:启用 NAT 转发并信任 docker0 接口

# 启用伪装(NAT转发)
sudo firewall-cmd --zone=public --add-masquerade --permanent

# 将 docker0 网卡加入 trusted 区域
sudo firewall-cmd --permanent --zone=trusted --change-interface=docker0

# 重新加载
sudo firewall-cmd --reload

# 重启 Docker 服务
sudo systemctl restart docker

验证是否成功:

firewall-cmd --get-zone-of-interface=docker0
# 应返回 trusted

✅ 解决方案二:禁止 Docker 修改 iptables(推荐生产环境)

编辑 Docker 服务配置文件:

sudo vi /usr/lib/systemd/system/docker.service

找到 ExecStart 行,在 dockerd 后添加 --iptables=false

ExecStart=/usr/bin/dockerd --iptables=false -H fd:// ...

保存后执行:

sudo systemctl daemon-reload
sudo systemctl restart docker

此时,所有容器网络规则需由 firewalld 显式管理,提升安全性。


✅ 方案三:手动添加容器 IP 到白名单

若容器固定 IP 为 172.18.0.10,可添加富规则放行:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.18.0.10" accept'
sudo firewall-cmd --reload

最佳实践建议:安全配置流程

  1. 调试阶段宽松策略
    初期可先开放必要端口或添加 IP 白名单,避免误锁导致无法远程连接。

  2. 策略写入脚本备份
    所有命令建议提前写入 .sh 脚本或文本文件,便于批量执行与回滚。

  3. 逐步收紧权限
    待服务正常运行后,逐步移除宽泛规则(如全端口开放),只保留最小必要权限。

  4. 定期审查规则
    使用 firewall-cmd --list-allcat /etc/firewalld/zones/*.xml 审核配置。

  5. 避免永久关闭防火墙
    不推荐执行 systemctl disable firewalld,应通过合理配置实现功能与安全平衡。


常用辅助命令汇总(收藏备用)

功能命令
启动防火墙sudo systemctl start firewalld
开机自启sudo systemctl enable firewalld
查看状态sudo systemctl status firewalld
临时关闭sudo systemctl stop firewalld
永久关闭(不推荐)sudo systemctl disable firewalld && sudo systemctl stop firewalld
重载规则sudo firewall-cmd --reload
当前规则写入永久配置sudo firewall-cmd --runtime-to-permanent
查看 nat 表规则sudo iptables -nL -t nat

CentOS 防火墙不仅是“开关端口”的工具,更是保障系统安全的重要屏障。掌握 firewalld 的区域、服务、富规则三大核心概念,结合 Docker 场景下的特殊处理方式,才能真正做到既通又安

无论你是新手运维还是资深工程师,都建议将本文收藏,作为日常操作手册。网络安全无小事,每一条规则都可能是抵御攻击的关键防线!

发表评论

评论列表

还没有评论,快来说点什么吧~