CentOS 7防火墙实战:用firewalld为Nginx服务配置IP白名单,只让特定服务器访问
CentOS 7防火墙实战用firewalld为Nginx服务配置IP白名单在分布式架构中服务间的访问控制如同建筑的门禁系统。想象这样一个场景您的Web集群中Nginx服务器需要像VIP休息室一样只对持有通行证的应用服务器开放。本文将带您深入firewalld的规则引擎实现精准的IP白名单控制。1. 理解防火墙区域与规则优先级firewalld的zone概念是其核心设计。默认情况下新规则会添加到public区域但理解区域的工作机制能让我们更灵活地控制流量# 查看所有可用区域 firewall-cmd --get-zones # 查看默认区域 firewall-cmd --get-default-zone关键差异点--permanent参数决定规则是否持久化临时规则会覆盖永久规则直到下次重载规则评估遵循首次匹配原则提示生产环境中建议始终使用--permanent参数并通过firewall-cmd --runtime-to-permanent将运行时规则转为永久规则2. 构建精准的IP白名单体系2.1 清理现有规则关键准备步骤许多配置失败源于残留规则干扰。以下是标准清理流程# 移除现有80端口开放规则 firewall-cmd --permanent --zonepublic --remove-port80/tcp # 重载防火墙使更改生效 firewall-cmd --reload验证规则是否清除# 检查当前生效规则 firewall-cmd --list-all # 测试访问性应无法访问 curl -I http://192.168.100.1012.2 配置Rich规则实现IP过滤Rich规则是firewalld的高级语法支持复杂条件组合# 允许特定IP访问80端口 firewall-cmd --permanent --zonepublic \ --add-rich-rulerule familyipv4 \ source address192.168.100.102 \ port protocoltcp port80 accept规则组件解析family指定IPv4/IPv6协议族source address定义源IP或网段port指定目标端口和协议类型accept/reject设置动作类型2.3 验证规则有效性采用双端验证法确保配置准确# 在允许的IP(102)上验证 ssh 192.168.100.102 curl -I http://192.168.100.101 # 在禁止的IP(100)上测试 ssh 192.168.100.100 curl -I http://192.168.100.1013. 生产环境进阶配置方案3.1 多IP段管理策略当需要管理多个IP段时推荐使用zone分离策略# 创建专用zone firewall-cmd --permanent --new-zonenginx_whitelist # 添加多个信任IP firewall-cmd --permanent --zonenginx_whitelist \ --add-rich-rulerule familyipv4 \ source address192.168.100.102 accept firewall-cmd --permanent --zonenginx_whitelist \ --add-rich-rulerule familyipv4 \ source address10.0.1.0/24 accept # 将zone绑定到网卡 firewall-cmd --permanent --zonenginx_whitelist \ --add-interfaceeth03.2 服务模板化配置将常用配置封装为服务定义提升复用性# 创建nginx-whitelist服务定义 cat /etc/firewalld/services/nginx-whitelist.xml EOF ?xml version1.0 encodingutf-8? service shortNginx with IP whitelist/short descriptionNginx service with IP restriction/description port protocoltcp port80/ port protocoltcp port443/ /service EOF # 应用服务配置 firewall-cmd --permanent --zonepublic \ --add-servicenginx-whitelist4. 防火墙规则维护与排错4.1 规则持久化最佳实践避免规则丢失的配置流程先测试临时规则firewall-cmd --add-rich-rule...验证功能正常后转为永久规则firewall-cmd --runtime-to-permanent确认永久配置firewall-cmd --permanent --list-all4.2 常见问题诊断工具当规则不生效时使用以下工具排查# 查看完整规则链 firewall-cmd --list-all --zonepublic # 检查内核级规则 iptables -L -n -v # 实时监控被拒绝的连接 journalctl -u firewalld -f典型问题处理规则顺序错误使用--priority参数调整服务未重载确保执行firewall-cmd --reload区域绑定错误检查firewall-cmd --get-active-zones5. 扩展应用到其他服务同样的原理可应用于各类服务防护MySQL访问控制firewall-cmd --permanent --zonedb_zone \ --add-rich-rulerule familyipv4 \ source address192.168.100.110 \ port protocoltcp port3306 acceptRedis防护配置firewall-cmd --permanent --zoneredis_zone \ --add-rich-rulerule familyipv4 \ source address10.0.2.15 \ port protocoltcp port6379 accept在实际运维中发现将相关规则按业务分组到不同zone比全部堆砌在public区域更易维护。例如为每个微服务创建独立zone再通过--change-interface动态调整网络边界。