Linux防火墙不原生支持灰度发布,但可通过iptables、firewalld或nftables实现基于IP/端口的流量分流:优先放行灰度用户(如指定IP段访问8080端口),再拦截其余流量,仅作入口层导流,灰度逻辑需由上层组件完成。

基于 iptables 实现 IP 段灰度放行
适用于小规模、静态用户分组场景(如内网测试组先行):先清空 INPUT 链默认策略(确保后续规则有序执行):
- iptables -P INPUT ACCEPT(临时设为宽松,便于调试)
- iptables -F INPUT(清空现有规则)
再按优先级插入灰度规则(iptables 规则从上到下匹配,顺序即策略):
- 允许灰度IP段(如 192.168.10.0/24)访问新服务端口(如 8080):
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 8080 -j ACCEPT - 拒绝其他所有访问该端口的请求(兜底拦截):
iptables -A INPUT -p tcp --dport 8080 -j DROP - 确保常规服务(如 80/443)仍开放:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
最后设置默认拒绝并保存:
- iptables -P INPUT DROP
- Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4
- RHEL/CentOS:service iptables save
用 firewalld 的 rich rule 做动态灰度组管理
适合需要频繁调整、配合脚本自动化运维的环境(如 CI/CD 流水线触发灰度开关):firewalld 支持 rich rule 精确匹配,并可永久生效:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 添加灰度组(如测试部门IP):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.30.0/24" port port="8080" protocol="tcp" accept' - 屏蔽非灰度流量对新端口的访问:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="8080" protocol="tcp" reject' - 重载生效:
firewall-cmd --reload
后续可一键切换灰度范围:
- 追加新IP:firewall-cmd --permanent --add-rich-rule='rule ... source address="10.20.31.5" ...'
- 移除旧IP:firewall-cmd --permanent --remove-rich-rule='rule ... source address="10.20.30.100" ...'
结合 nftables 实现带状态的灰度连接控制
适合高并发、需关联连接上下文的场景(例如仅允许灰度用户建立新连接,但放行其已有会话):nftables 规则更简洁,且原生支持 connection tracking:
- 创建灰度表和链:
nft add table ip gray
nft add chain ip gray input { type filter hook input priority 0 \; } - 放行灰度IP的新连接:
nft add rule ip gray input ip saddr 172.16.0.0/16 tcp dport 8080 ct state new accept - 放行灰度IP的已有连接(保障体验连续):
nft add rule ip gray input ip saddr 172.16.0.0/16 ct state established,related accept - 拒绝其他所有 8080 连接:
nft add rule ip gray input tcp dport 8080 drop - 导入到主过滤链:
nft insert rule ip filter input jump gray input
规则持久化只需保存当前规则集:
nft list ruleset > /etc/nftables.conf,开机自动加载。
注意事项与边界提醒
防火墙灰度有明确局限,务必注意:
- 它只控制“能否建立连接”,不处理请求内容、Header、Cookie 或业务标识——真正的用户级灰度需由 Nginx、Envoy 或应用代码实现
- IP 可伪造或变动,生产环境慎用纯 IP 灰度;建议与内网DNS切流、负载均衡标签路由配合使用
- 所有修改前执行 iptables -L -n -v 或 firewall-cmd --list-all 备份现状;误操作可能导致SSH断连,建议预留console或带外管理通道
- 灰度窗口期结束后,及时清理规则,避免残留策略影响后续发布

















