Files
NE_YuR/8_acl/acl.typ
2025-10-26 20:16:39 +08:00

396 lines
24 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#import "labtemplate.typ": *
#show: nudtlabpaper.with(
title: "防火墙ACL配置",
author: "程景愉",
id: "202302723005",
training_type: "无军籍",
grade: "2023",
major: "网络工程",
department: "计算机学院",
advisor: "张军",
jobtitle: "工程师",
lab: "306-707",
date: "2025.09.28",
header_str: "《网络工程》实验报告",
)
#set page(header: [
#set par(spacing: 6pt)
#align(center)[#text(size: 11pt)[《网络工程》实验报告]]
#v(-0.3em)
#line(length: 100%, stroke: (thickness: 1pt))
])
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
#it.body
]
#outline(title: "目录", depth: 3, indent: 1em)
#pagebreak()
#outline(
title: [图目录],
target: figure.where(kind: image),
)
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
#counter(heading).display()
// #h(0.5em)
#it.body
]
#set enum(indent: 0.5em, body-indent: 0.5em)
#pagebreak()
= 实验目的
#para[
本实验旨在通过配置ACL实现对网络流量的精确识别和控制提高网络的安全性和稳定性。通过配置防火墙实现对内外网络的访问控制保护内部网络免受外部威胁。
]
= 实验原理
== ACL
=== ACL概述
#para[
访问控制列表ACLAccess Control List是由一条或多条规则组成的集合。所谓规则是指描述报文匹配条件的判断语句这些条件可以是报文的源地址、目的地址、端口号等。
ACL本质上是一种报文过滤器规则是过滤器的滤芯。设备基于这些规则进行报文匹配可以过滤出特定的报文并根据应用ACL的业务模块的处理策略来允许或阻止该报文通过。
]
=== ACL的作用
#para[
ACL作为一个过滤器设备通过应用ACL来阻止和允许特定流量的流入和流出如果没有它任何流量都会自由流入和流出使得网络容易受到攻击。
]
#para[
@figure1 所示为保证财务数据安全企业在路由设备上应用ACL可以阻止内网内部研发部门主机对财务服务器的访问同时允许总裁办公室访问财务服务器。为了保护企业内网的安全在路由设备上应用ACL可以封堵网络病毒常用的端口防止Internet上的恶意流量入侵。
]
#figure(
image("download1.png", fit: "stretch", width: 55%),
caption: [ACL应用示例],
)<figure1>
=== ACL的功能
#para[
借助ACL可以实现以下功能
]
- 提供安全访问企业重要服务器资源被随意访问企业机密信息容易泄露造成安全隐患。使用ACL可以指定用户访问特定的服务器、网络与服务从而避免随意访问的情况。
- 防止网络攻击Internet病毒肆意侵略企业内网内网环境的安全性堪忧。使用ACL可以封堵高危端口从而达成为外网流量的阻塞。
- 提高网络带宽利用率网络带宽被各类业务随意挤占服务质量要求最高的语音、视频业务的带宽得不到保障造成用户体验差。使用ACL实现对网络流量的精确识别和控制限制部分网络流量从而保障主要业务的质量。
=== ACL的组成
#para[
ACL的每一条规则都会允许或者阻止特定的流量在定义一条合理的ACL规则之前需要了解其基本组成。
]
- ACL标识使用数字或者名称来标识ACL。
- 使用数字标识ACL不同的类型的ACL使用不同的数字进行标识。关于每类ACL编号的详细介绍请参见 ACL的分类。
- 使用名称标识ACL可以使用字符来标识ACL就像用域名代替IP地址一样更加方便记忆。
- 规则:即描述匹配条件的判断语句。
- 规则编号用于标识ACL规则所有规则均按照规则编号从小到大进行排序。
- 动作包括permit/deny两种动作表示设备对所匹配的数据包接受或者丢弃。
- 匹配项ACL定义了极其丰富的匹配项。包括生效时间段、IP协议 ICMP、TCP、UDP等、源/目的地址以及相应的端口号21、23、80等
=== ACL的分类
#para[
随着ACL技术的发展其种类越来越丰富根据其不同的规则和使用场景常用的可分为以下几类
]
+ 基本ACL基本ACL规则只包含源IP地址对设备的CPU消耗较少可用于简单的部署但是使用场景有限不能提供强大的安全保障。
+ 高级ACL相较于基本ACL高级ACL提供更高的扩展性可以对流量进行更精细的匹配。通过配置高级ACL可以阻止特定主机或者整个网段的源或者目标。除此之外还可以使用协议信息IP、 ICMP、TCP、UDP去过滤相应的流量。
+ 二层ACL在公司的内部网络中想对特定的终端进行访问权限控制这时就需要二层ACL。使用二层ACL可以根据源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息对流量进行管控。
+ 用户ACL由于企业内部同部门的工作人员的终端不在同一个网段难以管理需要将其纳入一个用户组并对其用户组进行访问权限管理这时候就需要用户ACL。用户ACL在高级ACL的基础上增加了用户组的配置项可以实现对不同用户组的流量管控。
+ 时间ACL在某些特定的时间段内对特定的流量进行管控这时就需要时间ACL。时间ACL在高级ACL的基础上增加了时间段的配置项可以实现对不同时间段的流量管控。
=== ACL的使用步骤
#para[
ACL的使用分为两个步骤。
]
+ 设置相应的ACL规则为ACL设置相关规则的时候需要了解入口流量与出口流量@figure2 所示入口流量指的是进入设备以路由器为例接口的流量无论来源是外部Internet还是内部网络同理出口流量指的是从设备接口流出的流量。#figure(
image("download2.png", fit: "stretch", width: 60%),
caption: [入口流量与出口流量],
)<figure2> 当外部Internet访问内部网络时通过路由器接口2的入口流量其源IP地址为外部的公网IP而当内部网络需要访问外部网络时通过路由器的接口1的入口流量其源IP地址则为内网的IP。
+ 应用ACL规则规则设置完成后需要将ACL应用在设备的接口上才能正常工作。因为所有的路由和转发决策都是由设备的硬件做出的所以ACL语句可以更快地执行。
=== ACL的匹配机制
#para[
设备使用ACL的匹配机制如@figure3 所示。
]
#figure(
image("download3.png", fit: "stretch", width: 70%),
caption: [ACL的匹配机制],
)<figure3>
#para[
ACL规则的匹配遵循”一旦命中即停止匹配”的机制。当ACL处理数据包时一旦数据包与某条ACL规则匹配就会停止匹配设备根据该条匹配的语句内容决定允许或者拒绝该数据包。如果数据包内容与ACL语句不匹配那么将依次使用ACL列表中的下一条语句去匹配数据包直到列表的末尾。一般在ACL的列表末尾会有一条隐式的拒绝所有的语句所以数据包与所有的规则都不匹配的情况下会被直接拒绝。此时设备不会将此数据包流入或流出接口而是直接将其丢弃。
]
=== ACL的应用场景
#para[
ACL的应用场景包括以下几个方面
]
+ 在NAT中使用ACL通过NAT的端口映射可使得外网访问内部网络。考虑到内部的网络安全不可能允许所有的外部用户访问内部网络这时可以设置ACL规则并应用在企业路由器上使得特定的外网用户可以访问内部网络。 #figure(
image("download4.png", fit: "stretch", width: 60%),
caption: [在NAT中使用ACL],
)<figure4>@figure4 所示,当公网主机想建立与内网主机的通信时,其发向内部网络主机的流量经过 NAT 设备时设备利用ACL对流量进行过滤阻断了PC4对PC2的访问同时允许PC3对PC1的访问。
+ 在防火墙中使用ACL防火墙用在内外网络边缘处防止外部网络对内部网络的入侵也可以用来保护网络内部大型服务器和重要的资源如数据。由于ACL直接在设备的转发硬件中配置在防火墙中配置ACL在保护网络安全的同时不会影响服务器的性能。 #figure(
image("download5.png", fit: "stretch", width: 60%),
caption: [在防火墙中使用ACL],
)<figure5>@figure5 所示在防火墙上配置ACL只允许外部特定主机PC A访问内部网络中的数据中心并禁止其他外部主机的访问。
+ 在QoS中使用ACL限制用户互访ACL应用在QoS的流策略中可以实现不同网段用户之间访问权限的限制从而避免用户之间随意访问形成安全隐患。 #figure(
image("download6.png", fit: "stretch", width: 60%),
caption: [使用ACL限制不同网段用户的互访],
)<figure6>@figure6 所示某公司为财务部和市场部规划了两个网段的IP地址。为了避免两个部门之间相互访问造成公司机密的泄露可以在两个部门连接Router的接口的入方向上应用绑定了ACL的流策略从而禁止两个部门的互访。
== 防火墙
=== 防火墙基本原理
#para[
防火墙是一种网络安全设备,用于监控和控制进出网络的流量,基于预定义的安全规则来允许或阻止数据包的传输。它通常部署在网络边界,用于保护内部网络免受外部威胁。
]
=== 接口工作模式
#para[
防火墙的接口可以工作在以下三种模式之一:
]
+ 路由模式:当防火墙位于内部网络和外部网络之间时,可同时为设备与内部网络、外部网络相连的接口分别配置不同网段的 IP 地址。报文在三层区域的接口间进行转发时,根据报文的 IP 地址来查找路由表。此时设备表现为一个路由器。
+ 透明模式:接口无 IP 地址。在网络中像连接交换机一样连接防火墙。此时无需修改任何已有的 IP 配置,防火墙就像一个交换机一样工作,内部网络和外部网络必须处于同一个子网。报文在防火墙当中不仅进行二层的交换,还会对报文进行高层分析处理。
+ 混合模式:如果防火墙既存在工作在路由模式的接口(有的接口具有 IP 地址),又存在工作在透明模式的接口(有的接口无 IP 地址),则防火墙工作在混合模式下。这种工作模式基本上是透明模式和路由模式的混合,目前只用于透明模式下提供双机热备的特殊应用中,别的环境下不建议使用。
=== 安全区域
#para[
安全区域(简称区域)是一个或多个接口的集合。区域是防火墙功能实现的基础,当数据报文在不同的区域之间传递时,将会触发安全策略进行检查。默认区域包括:
]
+ Untrust外网不安全网络安全级别是 5。
+ DMZ停火区安全级别是 50。
+ Trust内网安全网络安全级别是 85。
+ Local管理接口、运行动态路由协议安全级别是 100。
安全级别越大,安全级别越高,不同安全域的级别不能相同。
=== 安全策略
#para[
安全策略是防火墙的核心功能,用于控制不同区域之间的流量通信。默认情况下,所有区域间不能通信。安全策略的匹配条件和动作包括:
]
+ 策略匹配条件:源安全域,目的安全域,源地址,目的地址,用户,服务,应用,时间段。
+ 策略动作:允许,禁止。
+ 内容安全可选策略动作为允许的时候执行反病毒攻击防御URL 过滤,文件过滤,内容过滤,应用行为控制,邮件过滤。
#pagebreak()
=== 安全策略工作流程
#para[
安全策略的工作流程如下:
]
1. 对收到的流量进行检测,检测出流量的属性,包括:源安全区域、目的安全区域、源地址/地区、目的地址/地区、用户、服务(源端口、目的端口、协议类型)、应用和时间段。
2. 如果所有条件(流量属性)都匹配,则此流量成功匹配安全策略。如果其中有一个条件不匹配,则继续匹配下一条安全策略。以此类推,如果所有安全策略都不匹配,则防火墙会执行缺省安全策略的动作(默认为禁止)。
3. 如果流量成功匹配一条安全策略,防火墙会执行此安全策略的动作。如果动作为禁止,则防火墙会阻断此流量。如果动作为允许,则防火墙会判断安全策略是否引用了安全配置文件。如果引用了安全配置文件,则继续进行步骤 4 的处理;如果没有引用安全配置文件,则允许此流量通过。
= 实验环境
== 实验背景
#para[
本实验基于华为USG6303E-AC防火墙通过配置ACL实现以下需求
]
+ Trust 区域在工作时间(周一到周五 09:00-21:00禁止访问 untrust 区域的娱乐类应用。
+ 允许 trust 区域访问 untrust 区域的其余流量。
+ 允许任意区域访问 DMZ 区域的 http、https、ftp 服务(使用服务组)。
#para[
配置步骤包括:
]
1. 给接口设置 IP 地址。
2. 将接口加入区域。
3. 定义时间段对象、服务对象。
4. 设置安全策略。
== 实验设备
#align(center)[#table(
columns: (auto, auto, auto),
rows: (2em, 2em, 3em),
inset: 10pt,
align: horizon + center,
table.header([*设备名称*], [*设备型号*], [*设备数量*]),
"防火墙", "华为USG6303E-AC", "1",
"PC", "联想启天M410
Windows 10", "3",
)]
#para[
另有网线若干。
]
= 实验步骤及结果
== 实验拓扑
#para[
按实验背景,绘制拓扑图如下:
]
#figure(image("实验拓扑.png", format: "png", fit: "stretch", width: 80%), caption: "实验拓扑图")
== 按照拓扑图接线
#para[
按照拓扑图接线。
]
#figure(image("机柜正面连线.png", format: "jpg", fit: "stretch", width: 60%, height: 40%), caption: "机柜接线图")
== 配置基本网络
=== 配置PC
- 配置PC1的IP地址为`192.168.1.1/24`,网关为`192.168.1.2`
#figure(image("trust区域电脑IP地址配置.jpg", format: "jpg", fit: "stretch", width: 60%), caption: "配置PC1的IP地址")
- 配置PC2Server的IP地址为`172.130.80.1/24`,网关为`172.130.80.2`
#figure(image("PC2-IP.jpg", format: "jpg", fit: "stretch", width: 60%), caption: "配置PC2的IP地址")
- 配置PC3的IP地址为`10.13.1.1/24`,网关为`10.13.1.2`
#figure(image("PC3-IP.jpg", format: "jpg", fit: "stretch", width: 60%), caption: "配置PC3的IP地址")
- 配置管理PC的IP地址为`192.168.0.2/24`,网关为`192.168.0.1`
#figure(image("管理PC.jpg", format: "jpg", fit: "stretch", width: 60%), caption: "配置管理PC的IP地址")
#para[
这样配置之后PC1、PC2、PC3分别属于`trust``dmz``untrust`区域管理PC用于通过MGMT网口管理防火墙。
]
== 配置防火墙
=== 配置防火墙接口
#para[
通过“网络”-“接口”配置防火墙的接口IP地址和区域信息总览
]
#figure(image("接口配置前.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "配置防火墙接口前")
- 配置防火墙的GE0/0/1接口IP地址为`192.168.1.2/24`,区域为`trust`
#figure(image("001接口.jpg", format: "jpg", fit: "stretch", width: 99%), caption: "配置防火墙的GE0/0/1接口")
- 配置防火墙的GE0/0/2接口IP地址为`172.130.80.2/24`,区域为`dmz`
#figure(image("002接口.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "配置防火墙的GE0/0/2接口")
- 配置防火墙的GE0/0/3接口IP地址为`10.13.1.2/24`,区域为`untrust`
#figure(image("003接口.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "配置防火墙的GE0/0/3接口")
查看配置结果:
#figure(image("接口配置后.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "配置防火墙接口后")
=== 配置安全策略
#para[
通过“策略”-“安全策略”配置安全策略:
]
- 配置`trust`区域到`untrust`区域的安全策略,在工作时间禁止访问`untrust`区域:
#figure(
image("安全策略a.jpg", format: "jpg", fit: "stretch", width: 100%),
caption: "配置trust区域在工作时间禁止访问untrust区域",
)
- 配置`trust`区域到`untrust`区域的安全策略,允许访问其余流量:
#figure(image("安全策略b.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "配置trust到untrust的安全策略")
- 创建包含http、https、ftp服务的服务组
#figure(image("安全策略-服务组.jpg", format: "jpg", fit: "stretch", width: 90%), caption: "创建服务组")
- 使用创建的服务组配置`trust`区域到`dmz`区域的安全策略:
#figure(image("安全策略c.jpg", format: "jpg", fit: "stretch", width: 90%), caption: "配置trust到dmz的安全策略")
- 使用创建的服务组配置`untrust`区域到`dmz`区域的安全策略:
#figure(image("安全策略c1.jpg", format: "jpg", fit: "stretch", width: 90%), caption: "配置untrust到dmz的安全策略")
#para[
配置完成之后,查看总览:
]
#figure(image("安全策略总览.jpg", format: "jpg", fit: "stretch", width: 100%), caption: "安全策略总览")
== 验证配置
#para[
在“系统”-“配置”-“时钟配置”中查看防火墙系统时间:
]
#figure(image("允许时间段.jpg", format: "jpg", fit: "stretch", width: 70%), caption: "修查看系统时间")
#para[
时间为非工作时间22点在PC1上ping untrust区域的PC3可以ping通。
]
#para[
修改系统时间为工作时间:
]
#figure(image("禁止时间段.jpg", format: "jpg", fit: "stretch", width: 70%), caption: "修改系统时间")
#para[
时间为工作时间10点在PC1上ping untrust区域的PC3无法ping通。
]
#para[
下面是两次ping的结果trust区域电脑在不同时段内可或不可访问untrust区域
]
#figure(
image("trust区域电脑在不同时段内可or不可访问untrust区域.jpg", format: "jpg", fit: "stretch", width: 100%),
caption: "ping结果",
)
#para[
下面是防火墙上针对上述策略的命中次数变化注意最右侧的命中次数变化可以看到ping发出的4个请求被防火墙拦截
]
#figure(
table(
columns: auto,
rows: (auto, auto),
inset: 10pt,
align: horizon + center,
figure(image("不命中.png", format: "png", fit: "stretch", width: 100%)),
figure(image("命中.png", format: "png", fit: "stretch", width: 100%)),
stroke: none,
),
caption: "防火墙命中次数变化",
kind: image,
)
#para[
即策略配置无误。
]
= 实验总结
== 内容总结
#para[
本实验基于华为USG6303E-AC防火墩通过配置ACL实现了以下需求
]
+ Trust 区域在工作时间(周一到周五 09:00-21:00禁止访问 untrust 区域。
+ 允许 trust 区域访问 untrust 区域的其余流量。
+ 允许任意区域访问 DMZ 区域的 http、https、ftp 服务(使用服务组)。
#para[
通过配置ACL实现了对不同区域之间的流量通信进行了控制保障了网络的安全。
]
== 思考题
=== 在某防火墙安全规则配置时,已经允许从主机 A 到主机 B 通过 ICMP 协议,但使用 ping 测试时发现从 A 到 B 还是不通,请问是什么原因?
这是一个非常常见的排错场景。`ping` 命令的成功依赖于一个双向的通信过程而不仅仅是A到B的单向。
请求 (Request): 主机 A 发送一个 `ICMP Echo Request` 报文给主机 B。
回复 (Reply): 主机 B 收到后,必须回复一个 `ICMP Echo Reply` 报文给主机 A。
我们在实验中配置的规则 `允许 A -> B` 只保证了第一步(请求)的成功。`ping` 仍然失败,最可能的原因是第二步(回复)的报文被阻断了。
以下是几个最可能的原因,按排查优先级排序:
1. 缺少返回策略 (最常见)
防火墙是双向检查的。当主机 B 回复报文时,这个报文的流向是 `B -> A`。如果防火墙上没有配置“允许主机 B 到主机 A ICMP 流量”的策略,这个回复报文就会被防火墙丢弃,主机 A 也就永远收不到回复,导致 `ping` 超时。
解决方法:
(状态检测)如果防火墙开启了状态检测Stateful Inspection它会自动“记住” A 发出的请求,并自动放行 B 的回复。需要检查防火墙是否为 ICMP 开启了状态检测。
静态ACL如果防火墙是无状态的或ICMP状态检测被关闭必须额外添加一条反向规则允许 `ICMP Echo Reply` B A。
2. 主机 B 的本地防火墙:
网络防火墙(如 FW1可能放行了流量但是主机 B 自己的防火墙(例如 Windows 防火墙或 Linux iptables默认配置为“禁止入站 ICMP 请求”。这是 Windows 操作系统出于安全考虑的默认设置。
解决方法:登录主机 B修改其本地防火墙设置添加入站规则以允许 "文件和打印机共享(回显请求 - ICMPv4-In)"。
3. 路由问题:
B 没有到 A 的路由:主机 B 可能不知道如何将回复报文“送回”给主机 A 所在的网段。需要检查主机 B 的路由表或其默认网关的路由表,确保有返回到主机 A 网段的路由。
A 没有到 B 的路由:虽然的安全策略允许了,但主机 A 或其网关可能根本不知道如何将数据包路由到主机 B。
4. NAT (地址转换) 问题:
如果主机 A 在内网,主机 B 在外网,主机 A 访问 B 时源地址被NAT成了防火墙的公网地址。当 B 回复时,它会回复给防火墙的公网地址。需要检查防火墙上的 NAT 配置和会话表(`display firewall session table`),确认 ICMP NAT 转换和会话是否都正常建立。
=== 2什么是 DMZ设置 DMZ 有何意义?
- DMZ "Demilitarized Zone" 的缩写,中文译为“隔离区”或“非军事区”。
在网络安全中DMZ 是一个物理或逻辑上的子网络,它位于公司的内部私有网络 (Trust 区) 和外部公共网络 (Untrust / Internet) 之间。它是一个缓冲区,一个“三不管”地带。
- 设置 DMZ 的核心意义是“隔离风险,保护内网”。
具体来说,公司里总有一些服务器是必须被外网(互联网)访问的,例如:
公司官网的 Web 服务器
Email 服务器 (SMTP)
DNS 服务器
这些服务器由于暴露在互联网上,是黑客攻击的主要目标。
1. 风险隔离:
我们不能把这些“高风险”的服务器直接放在内网Trust 区)。如果 Web 服务器被黑客攻陷了,而它又在内网,那么黑客就能以此为跳板,直接攻击内网的员工电脑、财务数据、核心数据库等,后果不堪设想。
2. 保护内网 (核心)
通过将这些服务器放在 DMZ 区域我们就建立了一道新的安全屏障。防火墙可以对这三个区域Trust, Untrust, DMZ实施精细的访问控制
外网 (Untrust) -> DMZ有限允许。只开放必须的端口 Web 服务的 80/443 端口)。
内网 (Trust) -> DMZ有限允许。允许内网管理员去管理 DMZ 的服务器(如 SSH, RDP
DMZ -> 内网 (Trust):绝对禁止。这是最关键的一条策略!禁止任何从 DMZ 发起的、指向内网的连接。
== 心得感悟
#para[
通过本次实验我学会了如何配置ACL实现了对不同区域之间的流量通信进行了控制保障了网络的安全。在实验过程中我对防火墙的接口配置、安全策略配置有了更深入的了解提高了自己的实际操作能力。
]
#show heading: it => box(width: 100%)[
#v(0.50em)
#set text(font: hei)
// #counter(heading).display()
// #h(0.5em)
#it.body
]
#pagebreak()
#bibliography("ref.yml", full: true, title: "参考文献", style: "gb-7714-2015-numeric")
/*
根据这个网站的格式示范https://github.com/typst/hayagriva/blob/main/docs/file-format.md
为这个网页生成.yml文件
https://blog.csdn.net/jxjdhdnd/article/details/138009187
*/