Linux实现业务网段细粒度互访控制的核心是按需定义源目标、协议端口及动作,firewalld通过zone+rich-rule支持网段级策略,iptables则以底层规则直接匹配IP段与端口,二者均需注意默认策略、方向性、管理通道保护及日志验证。
要实现业务网段之间的细粒度互访控制,核心不是“放通整个网段”,而是按需定义谁(源)能访问谁(目标)、在什么协议和端口、以何种动作(允许/拒绝/限速/记录)进行通信。不同系统侧重点不同:Windows 侧重程序+网络类型;macOS 入站有限、出站依赖第三方;Linux 则是主力平台,firewalld 和 iptables 均支持基于 IP 段、端口、协议、甚至用户身份的组合策略。
firewalld 的区域(zone)机制天然适合业务网段划分。例如,把数据库服务器所在内网段 192.168.10.0/24 设为 trusted 区域,把应用服务器段 192.168.20.0/24 设为 internal 区域,再通过 rich-rule 精确放行特定流量:
firewall-cmd --permanent --zone=internal --add-interface=ens33
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" port port="3306" protocol="tcp" accept'
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 更底层、更灵活,适合需要严格控制流向的场景(如仅允许 A 网段 → B 网段的出向 MySQL 流量,但禁止反向):
iptables -A INPUT -s 192.168.30.0/24 -p tcp --dport 8080 -j 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
iptables-save > /etc/iptables/rules.v4;(CentOS/RHEL):service iptables save
实际部署中,仅写规则不够,还需注意逻辑闭环与运维安全:
sysctl net.ipv4.ip_forward=1)--timeout 参数临时开放 SSH(如 firewall-cmd --zone=public --add-port=22/tcp --timeout=600),留出 10 分钟回退窗口log prefix="db-access-deny" level="info",便于审计拒绝行为规则生效≠策略正确。每次变更后应立即验证:
firewall-cmd --list-all 或 iptables -L -n -v --line-numbers
telnet 192.168.10.100 3306 或 curl -v http://192.168.20.200:8080/health
journalctl -u firewalld -n 50 或 dmesg | grep "db-access-deny"
firewall-cmd --runtime-to-permanent(同步运行时到永久) + firewall-cmd --list-all --permanent > /root/firewall-backup-$(date +%F).txt