在CentOS系统上保障服务器网络安全,最核心的手段就是合理利用系统自带的网络防火墙机制。CentOS 7及以后版本默认使用firewalld作为前端管理工具,它底层调用的依然是Linux内核的netfilter数据包过滤框架。与之并列的传统方案是直接操作iptables服务,但在日常运维中firewalld因其动态管理特性更受推荐。搞清楚这两者关系并落地正确配置,才能构建起第一道网络防线。

firewalld与iptables的底层差异及选型
很多刚接触CentOS的管理员会困惑,为什么系统里既有iptables命令又出现了firewalld。事实上iptables本身是用户态工具,用于向内核netfilter写规则;而firewalld是一个守护进程,它动态管理这些规则,并引入了zone(区域)和service(服务)的抽象概念。firewalld允许在不中断现有连接的情况下更新规则,而传统iptables修改往往依赖脚本重刷,容易在远程操作时把自己锁在门外。
从架构看,firewalld将网络接口划分到不同zone,例如public区域默认拒绝大多数入站流量,trusted区域则完全放行。每个zone可以绑定预定义的service,比如ssh、http、https,这些service本质是端口与协议的集合。相比之下,纯iptables方案需要管理员手动写清每条INPUT链规则,可读性差且难以维护。对于单台CentOS服务器,优先启用firewalld并关闭iptables服务能减少冲突。
如果服务器内核较老或使用了自定义网络命名空间,也可以退回iptables方案。但要注意CentOS 8之后默认仓库已弱化iptables-service,强制使用nftables后端。因此新部署环境建议直接学习firewalld的富规则语法,它支持按源地址、端口、时间做精细控制,比链式iptables更直观。下面的代码展示了如何确认当前使用的后端以及切换服务状态。
# 查看firewalld状态 systemctl status firewalld # 若使用iptables需先停掉firewalld避免冲突 systemctl stop firewalld systemctl disable firewalld # 启动传统iptables服务(旧版CentOS) systemctl start iptables systemctl enable iptables # 检查当前firewalld后端 firewall-cmd --get-backend
基于zone与service的最小化端口开放策略
保护CentOS服务器最直接的原则是关闭一切非必要入站流量。firewalld安装后默认将网卡置于public区域,该区域仅放行dhcpv6-client和ssh。我们应梳理业务真实需要的端口,例如Web服务开80和443,数据库若不需公网访问则完全不开放。通过firewall-cmd --list-all可查看当前zone放行项,避免遗留测试时期临时开启的高危端口。
使用service方式开放端口优于直接写端口号,因为service自带协议定义且便于批量管理。比如添加http服务用firewall-cmd --zone=public --add-service=http --permanent,其中--permanent表示写入永久配置,否则重启后丢失。修改后必须执行firewall-cmd --reload让运行时规则同步。这种分离设计让我们可以先在运行时验证规则,再决定落盘。
对于不在预定义service里的应用端口,可用--add-port=8080/tcp补充。但更安全的做法是自建service文件放在/etc/firewalld/services/目录,把端口和描述固化。下表对比了两种开放方式的差异:
| 方式 | 命令示例 | 维护成本 | 适用场景 |
|---|---|---|---|
| 预定义service | --add-service=https | 低,系统统一管理 | 标准协议如ssh、dns |
| 临时端口 | --add-port=9000/tcp | 高,易遗忘 | 临时调试或自定义服务 |
最小化策略还包括限制网段。如果ssh仅允许公司IP运维,可在public区域用富规则拒绝其他源。这样即使暴破工具扫描22端口,非白名单IP也会被直接丢弃,不会触达sshd进程。下面代码演示了移除默认ssh服务并改用富规则限定来源。
# 移除public区域默认ssh服务 firewall-cmd --zone=public --remove-service=ssh --permanent # 只允许192.168.1.0/24访问22端口 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept' --permanent # 重载生效 firewall-cmd --reload
利用富规则防御暴破与异常流量
网络防火墙不仅是端口开关,还能基于连接行为做防护。CentOS服务器暴露ssh后,/var/log/secure常能看到大量密码尝试。firewalld的富规则支持limit限速,例如限制单IP每分钟最多新建3个ssh连接,超出则丢弃。这种手法比安装fail2ban更轻量,且在内核层拦截,不消耗用户态资源。
具体配置时,富规则语法中的log前缀可同时记录命中包,便于后期用journalctl排查。我们还可以对icmp协议做限制,关闭不必要的ping响应,减少被资产探测的概率。不过完全禁ping可能影响监控,建议仅限速率而非全阻。以下示例展示如何添加ssh限速规则并开启日志。
# 限制单IP每秒最多2个新ssh连接,超出记录并拒绝 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" service name="ssh" limit value="2/s" log prefix="ssh_overrate_" level="warning" drop' --permanent # 禁止外部ping但允许内部网络 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" icmp-type name="echo-request" accept' --permanent firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" icmp-type name="echo-request" drop' --permanent firewall-cmd --reload
除了入站,出站方向也值得关注。若服务器被植入木马,可能会向外发起恶意连接。可用firewalld的output区域做白名单,仅允许访问更新源和必要API。不过这要求业务依赖清晰,否则易误伤。综合来看,以public区域为基础,配合富规则限速、来源限制、日志审计,就能在CentOS上用防火墙织起实用防护网,而无需额外购买硬件设备。
最后提醒,任何防火墙规则变更前都应通过控制台保留会话,或设置定时回滚任务,防止错误配置导致无法远程登录。定期用firewall-cmd --list-all-zones审计全区域策略,确保没有测试规则残留,才是长期保障服务器网络安全的习惯。
firewalldiptablesCentOS_security修改时间:2026-08-15 11:24:35