iptables -m iprange 可直接按起止IP定义物理地址段实现精细隔离,适用于边界明确但网段不规整的生产内网,需置于默认DROP前、配合白名单与持久化配置使用。

在Linux中用 iptables -m iprange 限制特定物理IP段访问,是实现生产内网精细隔离的实用方式。它不依赖子网掩码计算,直接按起止IP定义连续地址范围,适合物理网络中边界明确、但网段划分不规整的场景(比如多个不同C类网段拼接的办公区出口IP池)。
确认物理IP段并构造iprange规则
先明确你要保护的生产内网出口对应的**真实对外IP段**,例如运营商分配的固定出口IP范围是 203.0.113.10–203.0.113.45。这类IP通常直连防火墙或网关服务器,不是内网私有地址。
- 允许该段访问关键服务(如Web后台):
iptables -A INPUT -p tcp --dport 8443 -m iprange --src-range 203.0.113.10-203.0.113.45 -j ACCEPT - 禁止该段访问敏感端口(如数据库):
iptables -A INPUT -p tcp --dport 3306 -m iprange --src-range 203.0.113.10-203.0.113.45 -j DROP - 若需同时控制双向流量(如防止该段发起SSH反向连接),补充OUTPUT链:
iptables -A OUTPUT -m iprange --dst-range 203.0.113.10-203.0.113.45 -j DROP
嵌入完整访问控制逻辑链
iprange只是匹配条件,必须放在合理规则顺序中才生效。典型生产内网防护结构如下:
- 开头放“白名单”:允许运维IP、监控系统IP、已知可信出口段(含上述物理IP段)
→ 使用-m iprange或-s IP/MASK显式放行 - 中间放“服务级放行”:如SSH、健康检查端口对所有源开放(但仅限必要端口)
- 末尾加“默认拒绝”:
iptables -P INPUT DROP或显式追加-j DROP规则
注意:规则顺序决定匹配结果,-m iprange 规则必须出现在默认DROP之前,否则无效。
验证与持久化配置
执行后立即验证是否生效:
- 查看带行号的INPUT链:
iptables -nL INPUT --line-numbers | grep iprange - 从目标IP段内机器实测连接:
curl -I https://your-server:8443或telnet your-server 3306
保存至系统启动加载:
- Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4 - RHEL/CentOS 7+:
iptables-save > /etc/sysconfig/iptables,并启用iptables服务
若使用 systemd-networkd 或 netplan,建议将 iptables-restore 封装为开机服务,避免网络就绪前规则未加载。
配合其他机制增强隔离效果
单靠 iprange 无法应对所有风险,建议组合使用:
- 结合
-m state --state ESTABLISHED,RELATED保障已建连接回程不被误拦 - 对高危端口(如22、3306)额外加
--tcp-flags或速率限制(-m limit)防爆破 - 物理IP段若含公网NAT后用户,建议同步在应用层(如Nginx、MySQL bind-address)做二次校验
不复杂但容易忽略:物理IP段可能随ISP调整变动,建议将 iprange 规则单独存为脚本,配合定期IP核对流程更新。


















