地理隔离的核心是将物理位置映射为可策略化的网络特征,通过firewalld多级zone、ipset动态库和rich rule实现分层控制,而非简单封禁ip。

大型企业网络的地理隔离不能靠单点规则实现,核心是把“物理位置”映射为可识别、可策略化的网络特征,再通过防火墙分层控制流量走向。关键不在于禁止某个国家IP,而在于构建可信边界、明确区域意图、隔离非授权路径。
明确地理隔离的真实目标
地理隔离常被误解为“封禁某国IP段”,但实际需求更精细:
- 阻止境外未授权访问内部管理平台(如堡垒机、数据库后台)
- 限制跨境数据出向——例如禁止内网服务器主动连接境外API或云存储
- 区分境内外用户访问同一Web服务的行为:境内走直连,境外强制经审查代理或返回提示页
- 防止内网主机被境外C2服务器远程控制(需结合连接状态与DNS行为)
基于firewalld构建多级区域策略
firewalld的zone机制天然适配地理逻辑划分。不要只用public一个区域,应按信任等级和地理位置部署至少三层:
- external-zh:专用于连接国内骨干网出口的接口(如ens1f0),默认拒绝所有入站,仅放行NTP、BGP、健康检查等必要协议;出站允许HTTP/HTTPS/DNS,但限制目的端口为80/443/53,且禁止访问已知境外高风险ASN
- internal-cn:面向IDC内网、办公网、私有云的接口(如ens2f0),设为trusted或custom zone,允许SSH、RDP、数据库端口,但添加rich rule限制源IP必须属于企业备案的国内IP段(如10.128.0.0/16、172.16.0.0/12、192.168.0.0/16及工信部分配的公网段)
- dmz-intl:若存在国际业务系统(如海外CDN回源、跨境ERP),单独划出DMZ区域,启用IPset引用实时更新的境外IP库(如APNIC公开路由表+商业威胁情报),对匹配到的境外源IP执行log+reject,而非简单drop(便于审计溯源)
用IPset + rich rule实现动态地理控制
firewalld原生不支持IP地址库导入,需配合ipset和rich rule联动:
- 下载并定期更新中国IP段列表(如从APNIC提取cn字段),生成ipset:
sudo ipset create cn-ip hash:net
sudo ipset add cn-ip 1.0.128.0/17
sudo ipset add cn-ip 1.0.192.0/19
…(批量导入后)
- 在firewalld中引用该ipset,例如限制仅允许中国IP访问管理端口:
sudo firewall-cmd --permanent --zone=internal-cn --add-rich-rule='rule source ipset="cn-ip" port port="22" protocol="tcp" accept'
sudo firewall-cmd --permanent --zone=internal-cn --add-rich-rule='rule source not ipset="cn-ip" port port="22" protocol="tcp" reject'
- 配合systemd timer每日凌晨自动更新ipset并重载firewalld规则(无需重启服务)
补充关键加固点
地理隔离只是纵深防御的一环,必须同步落实:
- 关闭FORWARD链默认策略为DROP,除非明确配置了NAT或透明代理;避免内网流量意外穿越防火墙外泄
- 禁用IPv6临时地址(ipv6.conf.disable_ipv6=1),防止IPv6隧道绕过IPv4地理规则
- 所有出向连接启用conntrack日志(-m state --state NEW -j LOG),记录源/目的IP、端口、协议、时间戳,供SIEM分析异常跨境行为
- 将防火墙配置纳入Git版本管理,每次修改需MR审批+自动化测试(如使用ansible-lint校验firewalld模块参数)











