CentOS 7 配置 firewalld 防火墙

# CentOS 7 配置 firewalld 防火墙

1. 服务介绍

firewalld 是 CentOS 7 默认动态防火墙管理服务,用于按区域控制主机入站流量、开放服务或端口、配置地址伪装和端口转发。它适合服务器基础防护、分区隔离及 NAT 网关等场景,修改运行时规则时通常无需中断现有连接。

2. 准备运行环境

• 操作系统:CentOS 7.x。

• 操作账号:root 或具备 sudo 权限的管理员账号。

• 网络要求:服务器 IP、网关和 DNS 已配置,客户端能够访问服务器。

• 软件要求:YUM 软件源可用。

• 操作建议:远程配置前先确认 SSH 管理端口,避免规则生效后中断连接。

bash 复制代码
cat /etc/centos-release
uname -r
ip addr
ip route

3. 相关知识

• firewalld 使用 zone 表示不同信任级别,接口或源地址只能归属一个活动区域。

• 未指定 --zone 时命令作用于默认区域,可用 firewall-cmd --get-default-zone 查询。

• 未加 --permanent 的规则只在当前运行时生效;永久规则写入配置后需执行 firewall-cmd --reload。

• 优先使用预定义服务名开放端口,例如 ssh、http、https,比直接写端口更易维护。

• --add-masquerade 用于源地址转换;端口转发还需启用内核 IP 转发。

• 排障时同时检查活动区域、规则、服务监听、SELinux 和客户端连通性。

4. 实验步骤

4.1 安装并启动 firewalld

bash 复制代码
yum install -y firewalld
systemctl enable --now firewalld
systemctl status firewalld --no-pager

4.2 查看区域和默认配置

bash 复制代码
firewall-cmd --state
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
firewall-cmd --list-all

4.3 将网卡加入 public 区域

以下以 ens33 为例,按实际网卡名替换。

bash 复制代码
firewall-cmd --permanent --zone=public --change-interface=ens33
firewall-cmd --reload
firewall-cmd --zone=public --list-interfaces

4.4 开放常用服务

bash 复制代码
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
firewall-cmd --zone=public --list-services

4.5 开放自定义端口

以下示例开放 TCP 8080 和 UDP 53:

bash 复制代码
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --add-port=53/udp
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

删除端口规则:

bash 复制代码
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
firewall-cmd --reload

4.6 配置富规则

仅允许 192.168.10.0/24 网段访问 SSH:

bash 复制代码
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="ssh" accept'
firewall-cmd --reload
firewall-cmd --zone=public --list-rich-rules

执行前确保当前管理地址属于允许网段,或先保留已有 SSH 放行规则。

4.7 配置地址伪装和端口转发

启用 IPv4 转发和地址伪装:

bash 复制代码
cat > /etc/sysctl.d/99-ip-forward.conf <<'EOF'
net.ipv4.ip_forward = 1
EOF
sysctl --system
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload

将本机 TCP 8080 转发到 192.168.10.20:80:

bash 复制代码
firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.10.20:toport=80
firewall-cmd --reload
firewall-cmd --zone=public --list-forward-ports

5. 验证结果

服务端检查 firewalld 状态、区域、永久规则和端口监听:

bash 复制代码
systemctl is-active firewalld
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --permanent --zone=public --list-all
ss -lntup
journalctl -u firewalld -n 50 --no-pager

客户端验证 HTTP、HTTPS、SSH 和自定义端口连通性:

bash 复制代码
curl -I http://服务器IP
curl -kI https://服务器IP
ssh 用户名@服务器IP
nc -vz 服务器IP 8080

服务端规则存在、目标服务正常监听,且客户端访问结果符合放行或拒绝预期,说明 firewalld 配置生效。

6. 常见故障排查

bash 复制代码
firewall-cmd --check-config
firewall-cmd --get-active-zones
firewall-cmd --zone=public --query-service=http
firewall-cmd --zone=public --query-port=8080/tcp
ss -lntup
getenforce

• 运行时规则正常、重启后丢失:配置时漏加 --permanent。

• 永久规则已写入但未生效:执行 firewall-cmd --reload。

• 端口已放行仍无法访问:确认应用监听地址不是仅 127.0.0.1,并检查路由和 SELinux。

• 规则加错区域:用 firewall-cmd --get-active-zones 确认网卡实际所属区域。

相关推荐
CQU_JIAKE3 分钟前
10.28【A】
linux·运维·网络
爱和冰阔落6 分钟前
【Linux网络】Socket 编程前要搞懂什么?从 IP、端口到字节序与 sockaddr,一次理清网络通信基础
linux·运维·网络·tcp/ip
晚风叙码22 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
Z21-X32 分钟前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack
邪修king36 分钟前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
开开心心就好37 分钟前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
坤坤子吖37 分钟前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习
一只鹿鹿鹿1 小时前
医院绩效管理体系方案
大数据·运维·安全·web安全·制造
java_logo1 小时前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
山东孙燕姿1 小时前
前端框架升级:不敢动的组件怎么办
大数据·运维·服务器·网络·人工智能·前端框架