CentOS 7 配置 firewalld 防火墙
# CentOS 7 配置 firewalld 防火墙1. 服务介绍firewalld 是 CentOS 7 默认动态防火墙管理服务用于按区域控制主机入站流量、开放服务或端口、配置地址伪装和端口转发。它适合服务器基础防护、分区隔离及 NAT 网关等场景修改运行时规则时通常无需中断现有连接。2. 准备运行环境• 操作系统CentOS 7.x。• 操作账号root 或具备 sudo 权限的管理员账号。• 网络要求服务器 IP、网关和 DNS 已配置客户端能够访问服务器。• 软件要求YUM 软件源可用。• 操作建议远程配置前先确认 SSH 管理端口避免规则生效后中断连接。cat /etc/centos-release uname -r ip addr ip route3. 相关知识• firewalld 使用zone表示不同信任级别接口或源地址只能归属一个活动区域。• 未指定--zone时命令作用于默认区域可用firewall-cmd --get-default-zone查询。• 未加--permanent的规则只在当前运行时生效永久规则写入配置后需执行firewall-cmd --reload。• 优先使用预定义服务名开放端口例如ssh、http、https比直接写端口更易维护。•--add-masquerade用于源地址转换端口转发还需启用内核 IP 转发。• 排障时同时检查活动区域、规则、服务监听、SELinux 和客户端连通性。4. 实验步骤4.1 安装并启动 firewalldyum install -y firewalld systemctl enable --now firewalld systemctl status firewalld --no-pager4.2 查看区域和默认配置firewall-cmd --state firewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all4.3 将网卡加入 public 区域以下以ens33为例按实际网卡名替换。firewall-cmd --permanent --zonepublic --change-interfaceens33 firewall-cmd --reload firewall-cmd --zonepublic --list-interfaces4.4 开放常用服务firewall-cmd --permanent --zonepublic --add-servicessh firewall-cmd --permanent --zonepublic --add-servicehttp firewall-cmd --permanent --zonepublic --add-servicehttps firewall-cmd --reload firewall-cmd --zonepublic --list-services4.5 开放自定义端口以下示例开放 TCP 8080 和 UDP 53firewall-cmd --permanent --zonepublic --add-port8080/tcp firewall-cmd --permanent --zonepublic --add-port53/udp firewall-cmd --reload firewall-cmd --zonepublic --list-ports删除端口规则firewall-cmd --permanent --zonepublic --remove-port8080/tcp firewall-cmd --reload4.6 配置富规则仅允许192.168.10.0/24网段访问 SSHfirewall-cmd --permanent --zonepublic --remove-servicessh firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address192.168.10.0/24 service namessh accept firewall-cmd --reload firewall-cmd --zonepublic --list-rich-rules执行前确保当前管理地址属于允许网段或先保留已有 SSH 放行规则。4.7 配置地址伪装和端口转发启用 IPv4 转发和地址伪装cat /etc/sysctl.d/99-ip-forward.conf EOF net.ipv4.ip_forward 1 EOF sysctl --system firewall-cmd --permanent --zonepublic --add-masquerade firewall-cmd --reload将本机 TCP 8080 转发到192.168.10.20:80firewall-cmd --permanent --zonepublic --add-forward-portport8080:prototcp:toaddr192.168.10.20:toport80 firewall-cmd --reload firewall-cmd --zonepublic --list-forward-ports5. 验证结果服务端检查 firewalld 状态、区域、永久规则和端口监听systemctl is-active firewalld firewall-cmd --state firewall-cmd --get-active-zones firewall-cmd --zonepublic --list-all firewall-cmd --permanent --zonepublic --list-all ss -lntup journalctl -u firewalld -n 50 --no-pager客户端验证 HTTP、HTTPS、SSH 和自定义端口连通性curl -I http://服务器IP curl -kI https://服务器IP ssh 用户名服务器IP nc -vz 服务器IP 8080服务端规则存在、目标服务正常监听且客户端访问结果符合放行或拒绝预期说明 firewalld 配置生效。6. 常见故障排查firewall-cmd --check-config firewall-cmd --get-active-zones firewall-cmd --zonepublic --query-servicehttp firewall-cmd --zonepublic --query-port8080/tcp ss -lntup getenforce• 运行时规则正常、重启后丢失配置时漏加--permanent。• 永久规则已写入但未生效执行firewall-cmd --reload。• 端口已放行仍无法访问确认应用监听地址不是仅127.0.0.1并检查路由和 SELinux。• 规则加错区域用firewall-cmd --get-active-zones确认网卡实际所属区域。