广告

Linux防火墙配置实战:iptables 与 firewalld 的全面设置教程与实战案例

1. 概览与定位:iptables 与 firewalld 的角色

1.1 防火墙的两种主流实现

在 Linux 系统的网络安全中,iptables 是原生的包过滤框架,提供了底层的规则链和匹配逻辑。与之并存的 firewalld 则是一个动态管理工具,把复杂的规则以区域、服务和 rich rules 的方式组合起来,降低了直接操作的门槛。

理解两者的定位有助于在实际部署中选择合适的策略。iptables 的稳定性与可控性适合自定义复杂策略;firewalld 的灵活性与易用性更适合快速迭代与多主机管理。

本节将把两者的关键特性、常见用法以及在实战中的互操作性讲清楚,以支持后续的全面设置教程与实战案例。全面设置教程实战案例 将贯穿全文。

1.2 快速对比要点

在生产场景中,速度与灵活性往往比单纯的安全等级更重要。iptables 以规则链和内核级实现为核心,可追溯性强性能开销可控,但需要手动维护市场化。相对地,firewalld 通过 zone 概念服务定义动态重载,让运维更高效。

通过本节的对比,读者可以明确在不同场景下的选型逻辑,从而在后续章节中实现 Linux 防火墙配置实战的高效落地。

本文中的实战案例将聚焦于 iptables 与 firewalld 的全面设置,以帮助你在真实环境中快速搭建可用的防火墙策略。

2. iptables 入门与常用配置

2.1 基本概念与链表结构

iptables 使用四条基本链:INPUTOUTPUTFORWARD、以及 PREROUTINGPOSTROUTING 在不同表中。filter 表 是默认表,负责数据包的过滤;nat 表 处理地址转换;mangle 表 处理包修改。

规则逐条匹配,优先级取决于链的顺序。自定义链可复用复杂条件;策略默认拒绝是安全的起点,同时需要显式放行必要端口。

Linux防火墙配置实战:iptables 与 firewalld 的全面设置教程与实战案例

在实际场景中,逐步构建规则集对照业务端口、以及与日志结合,能够实现可审计的防火墙行为。

2.2 常用策略与排错

常见的默认策略包括 INPUT DROPOUTPUT ACCEPT,以及在某些场景中使用 FORWARD DROP。这类策略需要搭配 允许必要服务允许确切端口,以免丢失业务。

排错时可用 iptables -Liptables -S 查看规则、LOG 规则记录日志、并结合 tcpdump 进行数据包追踪。

# 查看现有规则
sudo iptables -L -n -v# 允许本地回环与 SSH
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 拒绝其他未授权访问
sudo iptables -A INPUT -j DROP

2.3 实战案例:最小化服务器防火墙

在最小化安装的服务器上,通常需要先放行 SSH、HTTP/HTTPS(如需对外提供网页服务)、以及 ICMP 诊断包。最小化原则是先开启最小必要的端口,再逐步增加规则。

下面给出一个简化的实战流程,帮助你在短时间内建立一个可用的入口策略,同时保持>安全性。

# 基本最小策略:允许回环、SSH,允许常用网页端口,其他默认拒绝
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPTsudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

3. firewalld 的使用与高级特性

3.1 概念:区域、服务、端口、rich rules

firewalld 使用 区域(zone) 来定义信任级别与规则集合,通过 服务(service)端口(port)、以及 rich rules 实现灵活策略。动态应用可以在运行时重新加载规则而不中断现有连接。

区域分为 public、private、dmz、work 等,通常把对外暴露的端口放在更严格的区域。此结构让运维人员可以在不同子网或主机组间实现一致的策略。

要点在于理解 区域的分层与服务映射,以及如何通过 rich rules 表达复杂条件以覆盖横向扩展场景。

3.2 常用命令及示例

常用工具是 firewall-cmd,它提供了对区域、服务和规则的即时管理能力。在日常运维中,你会通过命令行快速调整策略,并且可以用 富规则(rich rules)实现复杂条件。

# 查看当前默认区域
sudo firewall-cmd --get-default-zone# 查看某区域的开放端口
sudo firewall-cmd --zone=public --list-ports# 永久开放 http/https 服务
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

为了应对更复杂的场景,可以使用 rich rules 来表达细粒度的条件,例如基于源地址、目标端口、时间段等。

# 示例:只允许来自特定子网的 SSH
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
sudo firewall-cmd --reload

3.3 与 iptables 的互操作

在某些场景,仍需要将 firewalld 与低层的 iptables 规则结合使用。 firewall-cmd 会与内核的 netfilter 框架打交道,直接编辑 iptables 规则有时会引起冲突。正确的做法是:先以 firewall-cmd 配置高层策略,再在需要时通过 iptables-restore 或自定义链进行补充。

# 将现有 iptables 规则导入 firewalld 的 rich rules 之中需要手动转换,常见做法是:输出现有规则并改写为 rich-rule 语法
sudo iptables-save | grep -v "COMMIT" > /tmp/iptables.rules
# 进一步转换为 firewalld 的 rich rules(需要人工适配)

4. 实战案例汇总:从最小化的防火墙到分布式场景

4.1 单机服务器的基础防火墙策略

单机部署时,防火墙策略应覆盖管理端口、应用端口与系统诊断接口。逐步放行原则,以及确保可审计的日志记录,是稳定运行的基础。

iptables 与 firewalld 的对比将帮助你在单机上快速切换。先建立最小可用集,再逐步扩展以实现业务需求。

# 使用 firewalld 的最小化部署示例(以 firewalld 为核心) 
sudo systemctl enable --now firewalld
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

4.2 Web 应用服务器的网络分段与访问控制

将前端负载均衡、应用服务器和数据库分段,使用不同的区域和端口策略,降低横向移动风险。对外暴露仅限必要端口,对内部通信使用专用端口和安全策略。

# 使用 firewalld 设置多区域示例
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=internal --add-service=mysql
sudo firewall-cmd --reload

4.3 数据库服务器的防护要点

数据库服务器应禁用未授权访问、限制管理接口、并对管理端口进行专用区域隔离。日志审计与入侵检测同样重要。

# 数据库端口只在内部区域开放示例(假设内网段为 10.0.0.0/24) 
sudo firewall-cmd --permanent --zone=internal --add-service=mysql
sudo firewall-cmd --reload

广告

操作系统标签