20251911 2025-2026-2《网络攻防实践》 第5次作业

1. 实践内容

本次实验围绕网络安全防御技术展开,分为三个模块:主机防火墙配置、Snort入侵检测离线分析、蜜网网关防御机制分析。

防火墙配置:在Linux平台使用iptables实现两类访问控制。第一类是过滤ICMP协议,使主机不再响应Ping探测,达到网络隐身效果;第二类是基于IP地址的访问控制,只允许指定的IP地址访问本机的HTTP服务,其他来源一律拒绝。通过这一过程熟悉iptables规则链的增删查改以及规则匹配顺序的重要性。

Snort入侵检测:使用开源IDS工具Snort对预先捕获的pcap流量文件进行离线分析。通过配置Snort以IDS模式运行,从pcap文件中读取数据包,依据规则集进行特征匹配,输出报警日志。从日志中识别攻击类型,理解基于签名的检测原理。

蜜网网关规则分析:分析蜜网网关的防火墙脚本和IDS配置,探究其如何通过iptables与Snort的联动实现攻击诱捕、数据捕获和流量控制。

2. 实践过程

2.1 实验环境

本次实验使用三台虚拟机,IP配置如下:

名称 IP地址 作用
Kali 192.168.200.66 攻击机/防火墙配置目标
seedUbuntu 192.168.200.64 测试客户端
WinXP 192.168.200.65 测试客户端

2.2 防火墙配置

2.2.1 过滤ICMP数据包

首先在Kali上查看当前防火墙规则状态,执行sudo iptables -L
image
INPUT、FORWARD、OUTPUT均为空,默认策略是ACCEPT。

从seedUbuntu和WinXP分别向Kali发送Ping命令
image

image

均能收到正常回显,说明网络通畅且无任何过滤。

在Kali上添加ICMP丢弃规则:

sudo iptables -A INPUT -p icmp -j DROP

该规则将匹配所有ICMP协议的数据包,并直接丢弃。再次执行sudo iptables -L确认规则已加入INPUT链。
image

重新从seedUbuntu ping Kali
image

终端显示无任何响应,持续超时。
用Wireshark抓包验证
image

只能看到发出的ICMP请求,没有收到回包。
从WinXP测试
image

同样无法ping通,证明规则对所有来源生效。

实验结束后用sudo iptables -D INPUT 1删除规则,恢复网络。
image

2.2.2 只允许特定IP访问HTTP服务

本环节要求只允许seedUbuntu访问Kali的HTTP服务,其他IP禁止。

首先在Kali上启动简易HTTP服务:

python3 -m http.server 80

服务监听在80端口
image

从seedUbuntu和WinXP分别用浏览器访问http://192.168.200.66:80
image
image

两者均能正常看到目录列表,说明无任何限制。

在Kali上配置访问控制规则,注意顺序:先放行指定IP,再拒绝所有。

sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.200.64 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP

使用sudo iptables -L INPUT -n -v --line-numbers查看规则
image

可以看到两条规则顺序正确。

再次测试:从seedUbuntu访问HTTP服务,页面正常加载
image
从WinXP访问
image
浏览器长时间等待后显示连接失败
telnet 192.168.200.64 80测试
image

WinXP同样被拒绝。规则生效。

完成实验后删除规则:

sudo iptables -D INPUT 1
sudo iptables -D INPUT 1

(执行一次只能删除一条规则)!!

2.3 Snort入侵检测实践

使用第4次实验中保存的pcap文件作为分析数据源。

首先确认Snort已安装,执行snort -V
image

显示版本信息。
若未安装则sudo apt install snort。(我这里已经安装了)

执行离线分析命令:

sudo snort -c /etc/snort/snort.lua -r /var/run/vmblock-fuse/blockdir/VcOmTT/listen.pcap -l /etc/snort/log -A alert_full

参数解释:

  • -c 指定配置文件
  • -r 读取pcap文件
  • -l 指定日志输出目录
  • -A alert_full 输出完整报警信息

命令执行后,Snort开始逐包分析
image

image
从统计输出中可以看出

  • 流量组成:数据包以 IPv4 协议上的 TCP 流量为主,另有少量 UDP 和 ARP 包。
  • 扫描检测:端口扫描预处理器检测到大量扫描行为,并命中多个已知扫描模式。
  • 应用层记录:捕获到少量 Back Orifice 特征包、数次 DNS 查询请求,以及多个 HTTP 请求,包含 GET 和 OPTIONS 方法。
  • 连接特征:TCP 流统计中存在大量的 SYN、SYN-ACK 和 RST 包,表现出明显的连接建立与重置行为,符合网络扫描和主机探测的流量特征。

2.4 蜜网网关规则分析

登录蜜网网关虚拟机,分析其防火墙和IDS配置。

防火墙启动脚本分析:使用sudo vim /etc/init.d/rc.firewall查看核心防火墙脚本。
image

脚本开头检查ip_queue内核模块是否存在
image

(!!!该模块是iptables与Snort-Inline通信的桥梁。如果模块缺失,脚本会输出错误并退出,防止蜜网网关在不具备IPS能力时运行。)

脚本中定义了黑白名单的处理逻辑。黑名单中的IP会被直接DROP,白名单中的IP则放行。对于其他流量,脚本将其引导至QUEUE链,由Snort进行深度检测。

iptables规则查看:执行sudo iptables -t filter -L -n查看filter表规则。
image
可以看到多个自定义链,tcpHandler、udpHandler、otherHandler等,每条链中都包含 QUEUE 规则,用于将数据包发送到用户空间的 Snort 进程进行深度检测;同时还有 LOG 规则,用于记录所有流经蜜网网关的数据包,便于后续攻击分析。

Snort配置分析:查看/etc/snort/snort.conf
image

其中定义了HOME_NET为蜜罐网络地址段,EXTERNAL_NET为外部网络。规则文件路径指向/etc/snort/rules/,该目录下包含各种攻击类型的规则集,如web-misc.rulesbackdoor.rulesscan.rules等。

蜜网启动过程:查看/etc/init.d/hw-snort_inline脚本
image

该脚本负责启动Snort的inline模式。inline模式下Snort能够接收来自QUEUE的数据包,并根据规则决定放行、拒绝或修改数据包。

3. 学习中遇到的问题及解决

  • 问题1:在Kali上启动HTTP服务时,执行python3 -m http.server 80提示“权限被拒绝”。

    • 原因分析:通过搜索得到1024以下的端口需要root权限才能绑定。
    • 解决方案:使用sudo python3 -m http.server 80,或者改用大于1024的端口,并在iptables规则中将dport改为8000。本次实验选择使用sudo启动。
  • 问题2:添加iptables规则后,发现从WinXP访问HTTP服务仍然能通,规则未生效。

    • 原因分析:规则顺序错误
    • 解决方案:先sudo iptables -L INPUT --line-numbers查看规则列表,确认顺序。发现DROP规则在ACCEPT规则之前,导致所有连接被提前丢弃。使用-D删除错误规则,重新按“先ACCEPT后DROP”的顺序添加。再次测试,WinXP被成功阻断。

4. 实践总结

本次实验中一个印象深刻的事情是,在配置仅允许特定IP访问HTTP服务的规则时,我先执行了拒绝所有来源的DROP规则,后添加了放行特定IP的ACCEPT规则。结果发现所有来源,包括被允许的IP,均无法访问服务。排查后发现,iptables按顺序逐条匹配,DROP规则提前匹配并丢弃了所有TCP包,导致后续的ACCEPT规则永远无法执行。调整为先ACCEPT后DROP的顺序后,访问控制恢复正常。所以说,防火墙规则的顺序并非无关紧要,而是直接决定了策略的实际效果!

posted @ 2026-04-19 19:01  yuzzz11111  阅读(40)  评论(0)    收藏  举报