在 Linux 运维体系中,防火墙是网络安全的第一道防线,其核心在于通过规则策略实现网络流量的精细化管控。本节将围绕工具选择、规则配置与状态监控三大维度,系统解析 Linux 防火墙技术的实践应用。
Linux 系统中主流的防火墙工具包括 firewalld 与 iptables,二者基于不同的设计理念适用于差异化场景。firewalld 采用动态规则管理机制,支持规则的实时生效与区域(Zone)化配置,无需重启服务即可应用变更,特别适合云服务器、容器环境等需要频繁调整规则的动态网络场景。其底层通过 nftables 框架实现,相比传统 iptables 具备更高效的规则匹配性能。而 iptables 作为经典的静态规则工具,通过命令行直接操作内核 netfilter 模块,规则变更需重启服务或手动刷新,适用于物理服务器等网络拓扑相对固定、规则稳定性要求高的场景。在实际运维中,可通过 systemctl is-active firewalld 命令检查当前活跃的防火墙服务,避免工具冲突。
防火墙规则配置需遵循最小权限原则,仅开放必要端口与服务。以下通过典型案例演示两种工具的配置方法:
firewalld 配置:
临时开放端口(重启后失效):firewall-cmd --add-port=80/tcp
永久开放端口(需重载生效):firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload
验证配置:firewall-cmd --list-ports | grep 80/tcp
iptables 配置:
追加规则至 INPUT 链:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
保存规则(CentOS 系统):service iptables save
验证配置:iptables -L INPUT -n | grep ":80"
firewalld 配置:
通过富规则(Rich Rule)限定来源 IP 段:firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent
重载规则:firewall-cmd --reload
iptables 配置:
先允许指定 IP 段访问 22 端口,再拒绝其他所有来源:iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j DROP
注意:iptables 规则按顺序匹配,拒绝规则需置于允许规则之后,避免策略失效。
防火墙配置的有效性需通过端口监听状态与规则匹配度双重验证。使用 ss -tulnp 命令可查看系统当前监听的端口及对应进程,例如:ss -tulnp | grep -E ":80|:22"
输出结果中,LISTEN 状态表示端口已开放,PID/Program name 列显示占用进程(需 root 权限)。
将监听端口与防火墙规则对比,例如发现 80/tcp 端口处于监听状态,但 firewall-cmd --list-ports 未返回该端口,则存在规则遗漏风险,需检查是否因重载失效或区域配置错误导致。对于 iptables,可通过 iptables -L INPUT -v -n 查看规则命中次数(pkts/bytes 列),若某规则长期无命中记录,需评估是否为冗余规则,避免规则集臃肿影响性能。
在现代运维实践中,防火墙配置需结合自动化工具(如 Ansible)实现版本化管理,并定期通过漏洞扫描工具(如 Nessus)检测规则有效性,构建动态防御体系。正如 N-central 25.1 版本通过移除 Java 依赖提升安全性的实践所示,工具链的持续迭代与规则的精细化管理是保障网络安全的核心要义。 [1]