20253913 2025-2026-2 《网络攻防实践》第五周作业
《网络攻防实践》课程第五次作业报告
一、实践内容
1.1 实验目标与任务说明
本次实验围绕三项内容展开:一是在 Linux 平台上配置 iptables 防火墙,实现 ICMP 报文过滤以及基于源地址的服务访问控制;二是使用 Snort 对给定的 pcap 文件进行离线入侵检测,并对检测结果进行说明;三是分析蜜网网关中的防火墙与 IDS/IPS 配置规则,说明其如何完成攻击数据捕获与行为控制。整个实验既包含具体命令操作,也包含对网络安全防护机制的理解与分析。
1.2 实验环境与主机角色
本次实验涉及的主机及其角色如下表所示。
| 主机 | IP 地址 | 作用 | 说明 |
|---|---|---|---|
| Seed | 192.168.5.4 | 受保护目标主机 | 作为被访问对象,完成防火墙规则配置与 FTP 服务测试 |
| Kali | 192.168.5.3 | 攻击/测试主机 | 用于发起 Ping、FTP 访问以及 Snort 实验 |
| Metasploitable | 192.168.5.7 | 对比测试主机 | 用于验证“只允许特定主机访问、其他主机禁止访问”的规则效果 |
| Honeywall | 蜜网网关 | 用于分析蜜网中的防火墙、Snort 与 Snort_inline 协同机制 |



1.3 防火墙、入侵检测与蜜网技术在实验中的作用
iptables 代表的是主机级访问控制技术,其核心目标是根据规则对入站、出站或转发的数据包进行筛选,从而控制哪些流量被允许,哪些流量被丢弃。通过设置 ICMP 丢弃规则,可以使目标主机不响应 Ping;通过设置源地址白名单,可以实现“只允许指定主机访问某项服务”的效果。
Snort 属于入侵检测技术。它与防火墙不同,重点不在于直接阻断通信,而在于从数据包特征中识别可疑行为,如端口扫描、异常 TCP 标志位组合等。这样即使攻击尚未真正造成破坏,也可以在流量层面被发现和记录。
Honeywall 则将防火墙与 IDS/IPS 技术结合起来,其目标并不是简单拒绝所有攻击,而是在尽量完整捕获攻击行为的同时,限制蜜罐主机继续向外发起恶意连接,从而实现“可观测、可记录、可控制”的蜜网防护思路。
二、实验过程
2.1 防火墙配置实验
2.1.1 网络环境确认与主机连通性测试
在配置防火墙之前,首先使用 ifconfig 检查各主机网络参数,确认 Seed、Kali、Metasploitable 处于同一网段中;随后使用 ping 测试主机间连通性,确保在施加防火墙规则前网络本身是可达的。只有在初始状态能够正常通信的情况下,后续出现的连接失败才能明确归因于防火墙规则的生效。
使用的命令如下:
ifconfig
ping 192.168.5.3
ping 192.168.5.4
sudo iptables -L
其中,sudo iptables -L 用于查看当前已有防火墙规则。实验开始时,Seed 主机各链处于默认放行状态,便于后续对规则变化前后的效果进行对比。



2.1.2 配置 ICMP 过滤规则
为了实现“过滤 ICMP 数据包,使主机不接收 Ping 包”的要求,在 Seed 主机上执行如下命令:
sudo iptables -A INPUT -p icmp -j DROP
sudo iptables -L
该规则表示:所有进入 Seed 主机、协议类型为 ICMP 的数据包全部丢弃。由于 ping 命令依赖 ICMP Echo Request 与 Echo Reply 机制,因此在该规则生效后,Kali 再对 Seed 发起 Ping 时,将不会收到回显响应,表现为 Ping 失败。


从实验现象来看,Kali 端仍然可以发出 ICMP 请求报文,但这些报文在到达 Seed 后被 Seed 的防火墙丢弃,因此不会形成有效响应。Wireshark 抓包中仍能看到 ICMP 请求,这说明请求已经从 Kali 发出,而不是说明目标主机已经正常处理并回应了这些报文。该现象从协议层面印证了防火墙规则确实生效。

为避免影响后续实验,可在测试结束后清空当前规则:
sudo iptables -F

2.1.3 启动 FTP 服务并验证基础访问
本实验选择 FTP 作为被防护的网络服务。为了确保后续测试有效,需先在 Seed 主机上检查并启动 vsftpd 服务。实验中使用的命令如下:
systemctl status vsftpd
sudo apt-get install vsftpd
sudo /etc/init.d/vsftpd start
sudo /etc/init.d/vsftpd status

实验环境中 systemctl 不可用,因此实际采用 /etc/init.d/vsftpd 的方式启动 FTP 服务。服务启动成功后,Kali 可以通过 ftp 192.168.5.4 连接到 Seed,说明在未添加限制规则之前,Seed 的 FTP 服务能够被正常访问。


2.1.4 配置仅允许特定 IP 访问 FTP 服务
为实现“只允许特定 IP 访问,其他 IP 禁止访问”的要求,实验首先在 Seed 主机上清空已有规则,并将 INPUT 链默认策略设置为 DROP:
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -L



此时,所有未被显式允许的入站流量都会被丢弃,因此 Kali 与 Metasploitable 再次访问 Seed 的 FTP 服务都会失败。这一现象说明系统已经进入“默认拒绝”的工作状态。
接着,为 Kali 主机添加白名单规则:
sudo iptables -A INPUT -p tcp -s 192.168.5.3 -j ACCEPT



配置完成后再次测试,结果表现为:
- Kali 可以成功访问 Seed 的 FTP 服务;
- Metasploitable 仍然无法访问 Seed。
这说明该规则已经实现了“只允许指定源地址主机访问”的实验目标。由于 FTP 基于 TCP 协议工作,因此实验现象与任务要求一致。若在实际部署中需要把权限进一步精确限定到 FTP 单一服务,还可以继续细化为仅允许访问 TCP 21 端口。
2.1.5 恢复防火墙默认状态
在访问控制实验结束后,需要恢复防火墙默认状态,以免影响后续操作。较为完整的恢复方式如下:
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -L
其中,iptables -F 用于清空规则,iptables -P 用于恢复各链默认策略。恢复完成后,系统重新回到默认放行状态。

2.2 Snort 离线入侵检测实验
2.2.1 Snort 命令与参数说明
实验中使用 Snort 对离线 pcap 文件进行检测,执行命令如下:
snort -c /etc/snort/snort.lua -r listen.pcap -A alert_full
各参数含义如下:
-c /etc/snort/snort.lua:指定 Snort 配置文件;-r listen.pcap:从离线数据包文件中读取流量,而不是直接监听网卡;-A alert_full:以较详细的格式输出告警信息。

从实验输出可见,当前环境使用的是 Snort 3,配置文件为 snort.lua。这说明实验平台采用的是新版配置方式。
2.2.2 检测结果分析
Snort 运行后,成功加载规则并对 listen.pcap 中的流量进行分析,随后输出了多条告警记录以及统计信息。实验结果中识别出的典型攻击或异常行为包括:
TCP portscan:表明存在端口扫描行为,攻击者试图探测目标开放端口;TCP has no SYN, ACK, or RST:表明某些 TCP 报文的标志位组合异常;Nmap XMAS attack detected:说明检测到典型的 XMAS 扫描特征;TCP SYN with FIN:属于不符合正常 TCP 会话逻辑的异常组合,常见于扫描或探测;TCP PAU missing ack for established session:说明当前流量中存在不符合正常会话确认机制的异常报文。


这些告警说明,listen.pcap 中包含较明显的扫描与异常探测行为。Snort 通过特征规则对这些行为进行匹配,从而完成了对可疑流量的识别与告警输出。结合统计信息可以看出,Snort 不仅完成了离线流量分析,还对处理包数、告警数以及各模块工作状态进行了汇总,便于后续安全审计和实验总结。
2.2.3 实验小结
通过本实验可以看出,防火墙负责的是通信准入控制,而 Snort 负责的是攻击行为识别。两者在网络防御体系中分工不同但互为补充:前者侧重“限制访问”,后者侧重“发现异常”。这也是现代网络防护体系普遍采用多层安全机制的原因。
2.3 蜜网网关防火墙与 IDS/IPS 规则分析
2.3.1 防火墙规则查看
在 Honeywall 蜜网网关中,首先通过以下命令查看防火墙启动脚本:
vim /etc/init.d/rc.firewall

该脚本是 Honeywall 中负责初始化防火墙规则的核心脚本,主要完成内核模块加载、规则清空、自定义链创建、管理策略设置和转发控制等任务。脚本中出现的 load_modules()、flushrules()、create_chains()、lockdown_policy()、management_policy() 等函数,分别承担加载模块、清除旧规则、建立处理链、设置严格转发策略以及开放管理接口等作用。




从整体结构上看,Honeywall 的防火墙设计采用了明显的模块化思路:不同功能由不同函数完成,不同类型的流量也会进入不同的处理链,这有利于同时满足“攻击数据捕获”和“对外行为限制”两项需求。
2.3.2 iptables 规则表查看
为了进一步分析 Honeywall 的具体规则,实验中使用了以下命令:
iptables -L | more


从输出结果可以看出,Honeywall 的 INPUT、FORWARD、OUTPUT 等链采用了较严格的控制方式,默认策略以 DROP 为主,同时辅以若干显式放行规则。这里的含义不是“规则链关闭”,而是“默认不允许未匹配流量通过”,体现了典型的默认拒绝思想。
此外,规则中还可以看到管理接口相关的放行项,以及基于 PHYSDEV 的匹配内容。这说明 Honeywall 运行在桥接环境中,能够针对经过桥接接口的数据包实施更细粒度的筛选与记录。换言之,Honeywall 不是简单地阻断所有通信,而是在桥接转发过程中对不同方向、不同协议的流量进行精细控制。
2.3.3 查看 Snort 与 Snort_inline 配置情况
实验中进一步使用以下命令查看 IDS/IPS 相关服务的配置:
more /etc/init.d/snortd


more /etc/init.d/hw-snort_inline


其中,snortd 用于管理普通 Snort 检测服务,负责基于规则对网络流量进行分析与告警;hw-snort_inline 用于管理 Snort_inline,它不仅能够检测攻击,还能够以内联方式参与流量处理,对恶意数据包实施阻断或修改。
从脚本配置内容可以看出,这些服务涉及用户、组、配置文件路径、网络接口和日志方式等参数,说明 Honeywall 并非只依赖单一组件,而是通过防火墙、Snort 和 Snort_inline 形成“检测 + 控制”的协同机制。
2.3.4 查看蜜网网关服务情况
为了了解 Honeywall 中安全服务的启动情况,实验中使用了如下命令:
chkconfig --list | grep iptables
chkconfig --list | grep snort

输出结果中的 on 表示该服务在对应运行级别下会开机自启动,off 表示不会自动启动,需要手动开启。通过这种方式,可以判断 iptables、snort 等核心组件在系统重启后是否仍能按预期工作。
Linux 中 0—6 运行级别的常见含义及作用如下表所示:
| 运行级别 | 含义 | 作用 |
|---|---|---|
| 0 | 关机 | 停止系统运行并关闭主机 |
| 1 | 单用户模式 | 用于维护、修复和最小化系统操作 |
| 2 | 多用户模式 | 提供多用户环境,但通常不包含完整网络服务 |
| 3 | 完整多用户字符界面模式 | 常用于服务器环境,支持完整网络服务但无图形界面 |
| 4 | 保留/自定义 | 供管理员或系统进行自定义用途 |
| 5 | 图形界面模式 | 提供完整多用户功能并启动图形界面 |
| 6 | 重启 | 关闭当前系统并重新启动 |
在蜜网环境中,查看这些启动项有助于判断防火墙与入侵检测组件是否能在系统启动后自动投入运行,从而保证蜜网长期监测与控制能力的连续性。
2.3.5 Honeywall 配置与规则更新方式查看
实验中还通过以下命令查看了 Honeywall 主配置文件:
more /etc/honeywall.conf

从配置内容可以看到,Honeywall 包含了蜜罐公网地址、DNS 服务器、对外接口等信息,同时还体现出当前环境下规则更新默认未启用自动更新。这说明实验环境更强调配置的稳定性和可控性,便于复现实验现象并进行规则分析。
2.3.6 蜜网网关如何实现攻击数据捕获与控制
综合以上分析,Honeywall 利用防火墙和 IDS/IPS 技术实现攻击数据捕获与控制,主要体现在以下几个方面:
- 默认拒绝的边界控制
通过将关键链默认策略设置为DROP,保证未明确允许的流量无法随意通过。 - 基于自定义链的精细化处理
通过为 TCP、UDP、ICMP 以及其他协议分别建立处理链,使不同类型流量能够进入不同逻辑路径,提高规则管理的清晰度和针对性。 - 利用日志与告警实现攻击捕获
攻击流量经过 Honeywall 时,可以被防火墙日志和 Snort 规则同时记录,形成较完整的攻击证据链。 - 利用 Snort_inline 限制对外扩散
即使蜜罐主机被攻击者利用,Honeywall 仍可通过内联检测和转发控制限制其继续向外发起攻击,防止实验环境成为新的攻击跳板。
因此,Honeywall 的核心价值并不在于简单阻断所有攻击,而在于“在可控条件下接纳攻击、观察攻击、记录攻击,并约束攻击进一步扩散”,这正是蜜网技术在攻防研究中的典型应用方式。
三、学习中遇到的问题及解决
3.1 问题一:FTP 服务无法通过 systemctl 检查状态
在实验过程中,执行 systemctl status vsftpd 时提示命令不可用,导致最初无法直接判断 FTP 服务状态。出现该问题的原因在于当前实验环境并未采用 systemd 作为服务管理方式。
解决方法:
改用传统启动脚本方式管理服务:
sudo apt-get install vsftpd
sudo /etc/init.d/vsftpd start
sudo /etc/init.d/vsftpd status
通过这种方式成功启动 FTP 服务后,再继续进行访问控制测试。
3.2 问题二:Snort 配置文件名称与常见教材示例不同
在进行 Snort 实验时,常见教材或旧版本资料中经常使用 snort.conf,而本次实验环境中实际使用的是 snort.lua。如果对版本差异不了解,容易误判为配置错误。
解决方法:
以实验平台实际安装版本为准,使用当前环境支持的配置文件格式和启动参数。只要 Snort 能成功加载规则、读取 pcap 文件并输出告警结果,就说明命令与配置是正确的。
四、学习感想和体会
通过本次实验,我对网络安全中的“防火墙—入侵检测—蜜网”三类技术形成了更系统的认识。以前对防火墙的理解更多停留在“写规则、拦流量”的层面,而这次实验让我真正理解到,防火墙规则不仅要能写出来,更要清楚它作用于哪条链、匹配哪类流量、默认策略是什么,以及规则顺序会对结果产生什么影响。只有把这些逻辑搞清楚,防火墙配置才真正具备安全意义。
在 ICMP 过滤和 FTP 访问控制实验中,我进一步体会到了“默认拒绝、按需放行”的安全思想。默认拒绝能够显著提升主机防护能力,但同时也要求管理员具备更好的规则设计能力,否则很容易在阻断恶意访问的同时影响正常业务。也正因如此,网络安全配置并不是越严格越好,而是要在安全性、可用性和可管理性之间取得平衡。
Snort 实验让我认识到,防火墙并不能替代入侵检测。防火墙解决的是“是否允许流量进入”,而 Snort 解决的是“这类流量是否可疑、是否具有攻击特征”。例如端口扫描、XMAS 扫描、异常 TCP 标志位组合等行为,即使还没有真正造成破坏,也已经能从流量层面反映出攻击意图。由此可见,现代网络安全防护必须采用多层联动的防御思路,而不能依赖单一技术。
对 Honeywall 的分析则让我更深入地理解了蜜网技术的价值。蜜网并不是单纯把攻击挡在外面,而是在可控条件下允许攻击发生,以便尽可能完整地记录攻击过程、分析攻击方法,同时又通过防火墙与 Snort_inline 限制攻击进一步扩散。这样的设计兼顾了研究价值与安全控制,也让我认识到网络攻防实验不仅是命令和截图的堆积,更重要的是通过实验理解安全机制背后的设计思想。
总的来说,本次实验不仅提高了我对 iptables、Snort 和 Honeywall 的实际操作能力,也强化了我对网络边界防护、行为检测和攻击控制之间协同关系的理解,对今后继续学习网络攻防技术具有很强的指导意义。

浙公网安备 33010602011771号