在CentOS服务器接入生产网络时,网络边界的访问控制决定了系统被攻击的概率。网关防火墙并非单指某款硬件,也可以是部署在服务器前端或本机上的流量过滤层,核心目标是在恶意请求抵达应用之前就将其丢弃。CentOS自7版本起使用firewalld作为默认防火墙前端,它基于netfilter构建,却用更直观的zone与service模型替代了繁琐的iptables命令,使运维人员能快速建立分层防御。

理解firewalld的zone模型
firewalld将网络接口划分到不同的zone中,每个zone代表一组预设的信任级别与规则集合。例如public zone默认拒绝大多数入站流量,仅允许已明确放行的服务;internal zone则用于内网互通,信任度更高。服务器网卡绑定到哪个zone,就受哪套规则约束。这种设计让同一台机器在不同网络环境(如办公网与公网)下可以自动切换安全策略。
查看当前激活的zone与接口绑定情况,可使用如下命令:
# 查看当前所有zone及绑定的网卡 firewall-cmd --get-active-zones # 查看public zone放行的服务 firewall-cmd --zone=public --list-services
如果服务器直接以公网IP运行,建议将对外网卡固定在public zone,并仅放行必须的业务端口。切忌图省事将网卡设为trusted zone,那样等于关闭了防火墙。通过zone的层级隔离,我们可以在网关层先丢弃非法包,再让主机防火墙做二次过滤。
配置网关级端口放行与来源限制
很多安全事故源于开放了管理端口却未限制来源。以SSH所用的22端口为例,若在任何地址都能尝试连接,服务器会面临持续的暴力破解。利用firewalld的rich rule,可以精确控制“哪个源网段能访问哪个端口”。下面的代码展示了如何仅允许运维网段访问22端口,并拒绝其他所有地址的SSH连接请求。
# 允许192.168.10.0/24网段访问22端口 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="22" accept' # 拒绝其他地址访问22端口(public zone默认拒绝,此句可省略但显式写出更清晰) firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" reject' # 放行业务端口80与443给所有来源 firewall-cmd --zone=public --add-service=http firewall-cmd --zone=public --add-service=https # 使配置永久生效 firewall-cmd --runtime-to-permanent
上述规则中,rich rule的匹配顺序很重要:firewalld按规则添加顺序评估,先写的允许规则会让特定网段通过,后写的拒绝规则则挡住其余流量。这种写法比全局关闭SSH服务更灵活,运维人员从办公室网络仍可登录,而公网扫描器会被直接拒绝。
从网关视角看,如果前端还有硬件防火墙或云安全组,应形成“网关限源+主机防火墙限端口”的双重机制。即便某层配置失误,另一层仍能提供保护。同时建议对HTTP服务做连接速率限制,防止CC攻击拖垮CentOS的worker进程。
使用端口转发隐藏真实服务
网关防火墙另一常见用法是端口转发,将公网的非标准端口映射到内网服务的标准端口,从而降低被自动扫描工具命中的几率。比如外部访问2022端口,内部转发到本机22端口,配合来源IP限制,安全性进一步提升。以下示例展示如何通过firewalld配置本地端口转发。
# 将公网访问的tcp 2022端口转发到本机22端口 firewall-cmd --zone=public --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=127.0.0.1 # 若需转发到内网其他服务器(假设内网IP为192.168.10.5) firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.10.5 # 永久保存 firewall-cmd --runtime-to-permanent
端口转发规则写在firewalld的nat表中,对外部用户透明。要注意的是,如果CentOS开启了严格反向路径过滤,转发到外部地址时可能失效,需确认内核参数配置。此外,转发不等于鉴权,真实服务自身仍要保留密码或密钥验证。
在微服务架构下,还可以用firewalld的masquerade功能做SNAT,让内网服务器借网关IP出网,既隐藏了内部拓扑,也便于统一审计出口流量。这种网关式用法让CentOS不必每块网卡都配公网地址,减少攻击面。
日常维护与规则审计
防火墙配置不是一劳永逸的。业务变更常导致临时放行的端口忘记回收,久而久之规则堆积如山。建议每月用脚本导出当前rich rule与service清单,比对基线。下面命令可列出某zone全部富规则,方便巡检。
# 列出public zone的所有富规则 firewall-cmd --zone=public --list-rich-rules # 导出当前永久配置到文件备查 firewall-cmd --permanent --list-all > /var/backups/firewall_public.txt
当发现某规则不再需要,应使用--remove-rich-rule或--remove-service删除,并再次执行--runtime-to-permanent。切忌直接清空所有规则重启,这会让线上业务瞬间断连。对于关键服务器,可结合cron定时备份规则文件到内部仓库。
网关防火墙的价值在于“边界收敛”。只要CentOS服务器遵循最小开放原则,配合zone划分、富规则限源与端口转发,就能在不需要额外硬件的情况下建立起务实的网络安全屏障。真正的风险往往不是没有防火墙,而是配好之后无人维护。