多网卡服务器防火墙应按网络角色分层管理:将网卡依用途绑定至public、internal、trusted区域,按区域配置最小必要策略,设默认drop策略并保障状态连接与lo放行,最后验证与备份规则。
多网卡服务器的防火墙规则不是“写一堆 iptables”,而是按网络角色分层管理。核心是把每块网卡归入合适的信任区域,再针对区域设定最小必要策略。
明确网卡用途与对应区域
不同网卡承载不同流量类型,必须先分类:
public 区域internal 区域trusted 区域执行命令示例(以 CentOS/RHEL 为例):
firewall-cmd --permanent --zone=public --add-interface=enp0s3firewall-cmd --permanent --zone=internal --add-interface=enp0s8firewall-cmd --permanent --zone=trusted --add-interface=eno2firewall-cmd --reload
按区域配置差异化放行策略
每个区域只开业务必需的端口,且限制来源:
public 区:仅开放 HTTPS(443)、SSH(22),并严格限源 IPfirewall-cmd --permanent --zone=public --add-service=httpsfirewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" port port="22" protocol="tcp" accept'
internal 区:允许数据库(3306)、API(8080)、ICMP,不限源(因属可信内网)firewall-cmd --permanent --zone=internal --add-port=3306/tcpfirewall-cmd --permanent --zone=internal --add-port=8080/tcpfirewall-cmd --permanent --zone=internal --add-icmp-block-inversion
trusted 区:默认全通,但建议显式限定管理网段访问 SSH 和监控端口firewall-cmd --permanent --zone=trusted --add-rich-rule='rule family="ipv4" source address="10.10.0.0/16" port port="22" protocol="tcp" accept'firewall-cmd --permanent --zone=trusted --add-rich-rule='rule family="ipv4" source address="10.10.0.0/16" port port="9100" protocol="tcp" accept'
确保连接状态感知与默认拒绝
避免“开了端口却拦不住异常连接”:
drop 或 block(推荐 drop)firewall-cmd --set-default-zone=drop
(firewalld 默认已启用,无需额外操作;若用 raw iptables,则需加 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT)
(firewalld 自动处理,不需手动添加)
验证与持续维护
规则生效后务必验证:
firewall-cmd --get-active-zones
firewall-cmd --zone=internal --list-all
firewall-cmd --list-all-zones > /root/firewall-backup-$(date +%F).txt
不复杂但容易忽略。