Applied
本页目录· 16 条
Activity: Firewall
节点 phoenix 是网关路由器,其 eth0 接口连接到组织的内部网络,eth1 接口连接到非军事区 (DMZ),eth2 接口连接到互联网。防火墙将通过检查流经路由器(或防火墙)的数据包来保护内部网络和 DMZ 这两个网络免受未经授权的流量侵害。
DMZ 网络是组织网络的一部分,用于存放向互联网提供服务的服务器。DMZ 网络与内部网络(或内联网)隔离,因为这些服务器可能被攻击者入侵,并被用来攻击网络的其他部分,因此防火墙可以保护内部网络免受互联网和 DMZ 的攻击。
我们的研讨会活动中使用的是一个典型的三足网络模型图,该模型采用单防火墙的 DMZ 结构。
用Core打开FIT9137_Week-11_Activity_Firewall.imn
🔒 目标:
所有链(INPUT、OUTPUT、FORWARD)默认拒绝所有流量。
🧪 效果:
配置完毕后,任何设备都无法互相通信。
Step 1: Default Policy
点services
配置Firewall
文本框中配置如下信息后,Apply
设置此防火墙后,您将无法访问 DMZ 或内部网络内的任何计算机。实际上,任何流量都不允许通过、发送或传送到防火墙。
iptables 命令针对不同的任务使用不同的链。
INPUT 链用于处理以防火墙路由器为目的地的数据包。
OUTPUT 链用于处理防火墙路由器上的软件想要发送到其他地方的数据包。
FORWARD 链控制防火墙路由器执行路由的数据包。当数据包穿过防火墙时,从一个接口进入,由防火墙路由,然后从另一个接口离开,然后根据 FORWARD 链规则检查该数据包。
Step 2: External to DMZ
现在系统已经安全了(所有流量都被阻断),我们可以开始允许各个服务的流量通过了。首先,我们将允许外部主机访问 DMZ 中的服务器。
为了使配置在核心中持久化,我们需要使用 GUI。然而,由于我们正在学习 iptables 规则,最好在核心配置运行时尝试这些命令。这样,我们可以测试规则,确保它们与预期流量正确匹配,然后我们可以通过 GUI 将规则添加到配置中。
注意:将经过测试的正确规则的副本保存在文本文件中,以便您可以通过 GUI 将它们添加到防火墙服务。
为了测试该策略,我们刚刚配置启动仿真并在 helios 上打开一个终端并尝试访问 DMZ 中的 Web 服务器:
测试,在helios ping 10.1.1.71
lynx 10.1.1.71
卡在
Making HTTP connection to 10.1.1.71
说明
- 连接尝试 已经成功穿过了部分网络路径;
- 客户端已经向 Web 服务器(10.1.1.71)成功发出了 HTTP 请求;
- 但是:Web 服务器的“响应数据”没有回到客户端!
Web 服务器试图回应数据(返回网页内容)时,被防火墙拦截了
Step 3: Incoming Rule
现在我们添加一条规则,允许 80 端口的 TCP 数据包从外部传输到 DMZ 中的 Web 服务器。
在 phoenix 像之前配置防火墙那样,在文件末尾补充此命令
iptables -A FORWARD -i eth2 -o eth1 -d 10.1.1.71 -p tcp --dport 80 -j ACCEPT
| 参数 | 含义 |
iptables | 使用 Linux 的防火墙工具 iptables |
-A FORWARD | 将这条规则追加(Append)到 “FORWARD 链” 中。FORWARD 链用于处理“经过防火墙的转发流量”,也就是不是发给防火墙本身,而是通过它转发到别的机器 |
-i eth2 | 指定进接口为 eth2 → 来自外部(Internet) |
-o eth1 | 指定出接口为 eth1 → 目标是 DMZ 网络 |
-d 10.1.1.71 | 目的 IP 是 10.1.1.71(Web 服务器) |
-p tcp | 指定协议为 TCP |
--dport 80 | 指定目的端口为 80 → HTTP 服务端口 |
-j ACCEPT | 匹配上上述所有条件后,“接受”这个数据包(即允许转发) |
允许所有从外网(Internet,通过 eth2)发往 DMZ 的 Web 服务器(10.1.1.71)的 HTTP 请求流量通过防火墙转发。
使用此规则,客户端现在可以向 Web 服务器发送 HTTP 请求。但是,服务器响应将无法穿过防火墙,因为所有从 DMZ 内部到外部的流量仍然被阻止
Step 4: Outgoing Rule
为了允许服务器的响应通过,继续补充下方命令
iptables -A FORWARD -i eth1 -o eth2 -s 10.1.1.71 -p tcp --sport 80 -j ACCEPT
| 参数 | 含义 |
iptables | 使用 Linux 的防火墙工具 iptables |
-A FORWARD | 将规则追加(Append)到 FORWARD 链。FORWARD 链处理“穿过防火墙的流量”(即源和目的都不是防火墙本机) |
-i eth1 | 数据包进入防火墙的接口是 eth1,也就是来自 DMZ 网络 |
-o eth2 | 数据包从防火墙的接口 eth2 发送出去,即要去 Internet |
-s 10.1.1.71 | 数据包的源地址(source IP)是 10.1.1.71,即 DMZ 中的 Web 服务器 |
-p tcp | 使用 TCP 协议 |
--sport 80 | 源端口是 80,说明这是 Web 服务器发出的 HTTP 响应 |
-j ACCEPT | “Jump” 到 ACCEPT → 意思是:匹配这个条件的包,允许转发通过防火墙 |
此命令将允许 Web 服务器(10.1.1.71)将 HTTP 响应(源端口 80)通过防火墙发回外部客户端(Internet)。
回到helios 执行lynx 10.1.1.71
已经通过防火墙放行:
- 从 Internet 到 DMZ 的 HTTP 请求
- 从 DMZ 到 Internet 的 HTTP 响应
Step 5: Other Services - DNS & SMTP
添加必要的规则,分别允许节点 ns-argos 和 mail-argos 的 DNS 和 SMTP 服务。对于每项服务,您需要在正向链中添加一条传入规则和一条传出规则。
Step 6: Internal to DMZ
继续向文件末尾追加,允许来自内部网络的流量到达 DMZ 中的服务器的规则:Web、邮件和 DNS
Step 7: Internal to External
现在我们已经开放了 DMZ 区域,接下来我们需要配置防火墙,允许内部网络中的客户端访问外部的 Web 服务器
继续在尾部追加
测试,在selene节点ping 10.1.1.130
| 项目 | 状态 |
| Internal ➝ Internet 请求 | ✅ 成功(通过 ping) |
| Internet ➝ Internal 响应 | ✅ 成功(说明防火墙放行 ESTABLISHED, RELATED) |
Step 8: DMZ to External
某些服务需要连接到外部服务器作为其运行的一部分。例如,可以配置 DNS 服务器执行转发操作,即代表其客户端向另一个 DNS 服务器发出查询。在给定的配置中,节点 ns-argos 将解析对域名 argos.edu 的任何查询,并将其他查询转发到节点 Internet。为简单起见,DNS 服务配置在 Internet 节点上,而不是单独的服务器上。类似地,节点 sphinx 解析对 delos.edu 的查询,并将所有其他查询转发到 Internet 节点。然后,Internet 节点将相关查询转发到相应的服务器。由于配置是独立的,因此该场景仅模拟真实案例,即某个组织的 DNS 服务器将其 Internet 查询转发给其 Internet 服务提供商。
添加必要的规则,允许 ns-argos 将其他域名的查询转发到 Internet 节点。在这种情况下,ns-argos 将作为客户端,Internet 将作为 DNS 服务器。
继续在尾部追加
在selene节点进行测试
nslookup www.delos.edu 10.1.1.70
这条请求说明整个数据流已经完整通过
selene ➝ firewall ➝ ns-argos ➝ firewall ➝ Internet DNS ➝ firewall ➝ ns-argos ➝ selene
Step 9: Internal to Firewall
编写规则允许内部网络中的客户端连接到 phoenix 上的 SSH 服务
测试,在selene节点ssh [email protected]
- Internal 网络访问 phoenix 的 SSH 请求成功进入了 INPUT 链
- phoenix 成功返回了连接响应(说明 OUTPUT 链也放行了)
- 登录流程正常,防火墙最后一步 Step 9 完全验证通过
在phoenix节点设置密码
点击phoenix节点,输入passwd,然后提示输出两次密码即可(我输入密码为core)
回到selene节点,再次ssh,然后输入密码
成功ssh到了phoenix节点
总结
Firewall Script
Step
| 步骤 | 内容 | 状态 |
| Step 1 | 默认 DROP 策略 | ✅ |
| Step 2 | 外部 HTTP 请求 | ✅ |
| Step 3 | HTTP 响应 | ✅ |
| Step 4 | 保存配置并生效 | ✅ |
| Step 5 | 外部访问 DMZ 的 DNS 和 Mail | ✅ |
| Step 6 | Internal ➝ DMZ(Web, DNS, Mail) | ✅ |
| Step 7 | Internal ➝ Internet(含状态检测) | ✅ |
| Step 8 | DMZ ➝ Internet(DNS 转发、SMTP) | ✅ |
| Step 9 | Internal ➝ Firewall SSH 访问 | ✅ |
Data Flow Diagrams
1. Internet ➝ DMZ Web
2. Internal ➝ DNS ➝ External
Summary
此次活动让学生理解并掌握基于 Linux iptables 的状态防火墙配置原理,并能根据网络拓扑结构 设计、部署并测试分区安全策略。
| 技能领域 | 具体内容 |
| 网络安全原理 | 理解防火墙的三大基本链(INPUT / OUTPUT / FORWARD)及其作用 |
| 状态检测机制 | 掌握 ESTABLISHED, RELATED 状态在连接追踪中的作用 |
| iptables 语法操作 | 编写规则控制不同方向的数据流(基于接口、IP、协议、端口) |
| 网络区域划分 | 理解 DMZ、Internal、External 网络的功能和访问控制需求 |
| 服务端口理解 | 掌握 HTTP (80), DNS (53), SMTP (25), SSH (22) 等典型服务访问方式 |
| 实际测试验证 | 通过 ping, lynx, nslookup, ssh 等命令验证网络连通性与策略效果 |
| 安全默认策略 | 理解为何默认设置为 DROP,并通过显式 ACCEPT 实现最小权限原则 |
🔄 实践场景:
学生通过一个模拟的企业网络(CORE 网络拓扑)进行分阶段策略部署:
- 屏蔽所有流量(DROP)
- 逐步放通:外部访问 DMZ 服务、Internal 访问 Internet、SSH 管理通道等
- 综合使用 FORWARD / INPUT / OUTPUT 链及状态检测机制构建安全策略