一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎么配置系统防火墙规则来支持细粒度的业务网段互访权限控制教程

时间:2026-07-10 09:53:03 编辑:袖梨 来源:一聚教程网

Linux实现业务网段细粒度互访控制的核心是按需定义源目标、协议端口及动作,firewalld通过zone+rich-rule支持网段级策略,iptables则以底层规则直接匹配IP段与端口,二者均需注意默认策略、方向性、管理通道保护及日志验证。

要实现业务网段之间的细粒度互访控制,核心不是“放通整个网段”,而是按需定义谁(源)能访问谁(目标)、在什么协议和端口、以何种动作(允许/拒绝/限速/记录)进行通信。不同系统侧重点不同:Windows 侧重程序+网络类型;macOS 入站有限、出站依赖第三方;Linux 则是主力平台,firewalld 和 iptables 均支持基于 IP 段、端口、协议、甚至用户身份的组合策略。

firewalld:用 zone + rich-rule 实现网段级互访控制

firewalld 的区域(zone)机制天然适合业务网段划分。例如,把数据库服务器所在内网段 192.168.10.0/24 设为 trusted 区域,把应用服务器段 192.168.20.0/24 设为 internal 区域,再通过 rich-rule 精确放行特定流量:

  • 将网卡永久绑定到指定 zone:firewall-cmd --permanent --zone=internal --add-interface=ens33
  • 只允许应用网段访问数据库的 3306 端口:firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" port port="3306" protocol="tcp" accept'
  • 同时拒绝该网段访问 SSH:firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" port port="22" protocol="tcp" reject'
  • 所有操作后必须执行:firewall-cmd --reload

iptables:直接匹配源/目标网段与端口

iptables 更底层、更灵活,适合需要严格控制流向的场景(如仅允许 A 网段 → B 网段的出向 MySQL 流量,但禁止反向):

  • 允许 192.168.30.0/24 访问本机 8080 端口:iptables -A INPUT -s 192.168.30.0/24 -p tcp --dport 8080 -j ACCEPT
  • 拒绝 192.168.40.0/24 访问所有服务(放在 ACCEPT 规则之后):iptables -A INPUT -s 192.168.40.0/24 -j DROP
  • 限制某网段连接频率(防扫描):iptables -A INPUT -s 192.168.50.0/24 -m limit --limit 5/min -j ACCEPT
  • 保存规则(Ubuntu/Debian):iptables-save > /etc/iptables/rules.v4;(CentOS/RHEL):service iptables save

跨网段策略设计关键点

实际部署中,仅写规则不够,还需注意逻辑闭环与运维安全:

  • 默认策略优先:确认 INPUT/OUTPUT/FORWARD 链的默认策略是 DROP 而非 ACCEPT,否则细粒度规则可能被绕过
  • 明确方向性:区分“入站”(INPUT)和“转发”(FORWARD)。若两业务网段经同一台 Linux 主机路由互通,必须配置 FORWARD 链并启用 IP 转发(sysctl net.ipv4.ip_forward=1
  • 避免误封管理通道:添加规则前,建议先用 --timeout 参数临时开放 SSH(如 firewall-cmd --zone=public --add-port=22/tcp --timeout=600),留出 10 分钟回退窗口
  • 日志辅助排错:rich-rule 或 iptables 可附加 log 动作,例如 log prefix="db-access-deny" level="info",便于审计拒绝行为

验证与持续维护

规则生效≠策略正确。每次变更后应立即验证:

  • 查当前生效规则:firewall-cmd --list-alliptables -L -n -v --line-numbers
  • 从源网段机器测试连通性:telnet 192.168.10.100 3306curl -v http://192.168.20.200:8080/health
  • 检查日志:journalctl -u firewalld -n 50dmesg | grep "db-access-deny"
  • 定期导出规则备份:firewall-cmd --runtime-to-permanent(同步运行时到永久) + firewall-cmd --list-all --permanent > /root/firewall-backup-$(date +%F).txt

热门栏目