20242931 2024-2025-2 《网络攻防实践》第五周作业
1. 实验内容
1.1 实验要求
(1) 防火墙配置:配置Linux操作系统平台上的iptables,要求过滤ICMP数据包,使得主机不接收Ping包;只允许特定IP地址(如局域网中的Linux攻击机192.168.200.13)访问主机的某一网络服务(如FTP、HTTP、TCP),而其他的IP地址(如Windows攻击机192. 168.200.3)无法访问。
(2) 动手实践Snort:在Windows攻击机上使用Snort,对给定的pcap文件进行入侵检测,读取网络日志数据源,并对检测出的攻击进行说明,且要求获得报警日志。
(3) 分析配置规则:分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
1.2 知识点梳理与总结
技术/工具 | 角色 | 核心功能 | 工作原理 | 相互关系 |
---|---|---|---|---|
防火墙(iptables) | 防御层 | (1) 包过滤防火墙:基于规则集(源/目标IP、端口、协议等)允许或阻止网络流量; (2) 网络地址转换 (NAT):实现IP伪装和端口转发; (3) 流量整形:通过队列限制带宽或优先级 |
基于预定义规则对网络数据包进行过滤处理 | 提供基础网络访问控制 |
入侵检测系统(Snort) | 检测层 | (1) 网络入侵检测/防御 (NIDS/NIPS):实时分析流量,匹配签名或异常行为(如缓冲区溢出、扫描攻击); (2) 协议分析:深入解析HTTP、DNS等应用层协议; (3) 告警与日志:触发实时警报 |
通过规则引擎对网络流量进行深度包检测 | 依赖防火墙将可疑流量引导至检测节点 |
蜜网网关(honeywall) | 诱捕层 | (1) 数据控制:限制蜜罐外联流量,防止攻击者滥用蜜网跳板; (2) 数据捕获:记录所有进出蜜罐的流量(PCAP、日志)、键盘记录等; (3) 数据分析:关联攻击行为,生成威胁情报(如攻击源IP、漏洞利用手法) |
通过防火墙控制将攻击流量引导至蜜罐,并利用IDS进行攻击监测 | 整合防火墙和IDS功能,构建完整攻防研究环境 |
2. 实验过程
2.1 防火墙配置
- 此任务我们选择使用Kali,WindowsXP Attacker,SEEDUbuntu三台虚拟机
虚拟机 | IP地址 |
---|---|
Kali | 192.168.200.13 |
WindowsXP Attacker | 192.168.200.3 |
SEEDUbuntu | 192.168.200.4 |
- 检验一下各主机之间的连通性,结果证明连通正常
2.1.1 过滤ICMP数据包
- 在kali上通过
iptables -L
查看规则,观察结果可以发现,只有默认策略,无自定义规则,这种配置对流量没有任何限制
- 执行
iptables -A INPUT -p icmp -j DROP
指令使主机不接受icmp的数据包,执行后再次查看规则,可以发现新增了一条规则DROP icmp -- anywhere anywhere
,表示丢弃所有来源和目标的ICMP
流量-A INPUT
:向INPUT
链(处理传入流量)追加一条规则-p icmp
:匹配协议为ICMP
(如ping
请求)-j DROP
:对匹配的流量执行DROP
(静默丢弃,不回复)
- 回到winxpattacker,再次尝试
ping 192.168.200.13
,发现全部超时
- 返回kali,执行
iptables -D INPUT -p icmp -j DROP
将刚刚的过滤规则删除,再去winxpattacker尝试ping 192.168.200.13
,可以发现连接恢复
2.1.2 只允许特定IP访问主机网络服务,而其他IP地址无法访问
- 首先,确定两台机器都可以进行telnet登陆
- 接下来,在SEEDUbuntu中使用指令
sudo iptables -P INPUT DROP
拒绝一切数据包流入
- 返回kali和winxpattacker发现命令行卡顿,无法键入指令,在新的终端再次尝试telnet连接,连接失败
- 在SEEDUbuntu中执行指令
sudo iptables -A INPUT -p tcp -s 192.168.200.13 -j ACCEPT
开启192.168.200.13(kali)对本机的tcp服务,并用sudo iptables -L
查看规则
- 再次返回kali和winxpattacker尝试telnet登录Ubuntu,可以发现kali可以正常访问,而winXP依旧连接失败
-
最后使用
sudo iptables -F
和sudo iptables -P INPUT ACCEPT
两条指令恢复之前的状态-
设置链的默认策略(Policy)指令必须大写 -P,仅接受
ACCEPT
/DROP
/REJECT
等动作 -
指定匹配的协议(protocol)指令必须小写 -p,支持
tcp
、udp
、icmp
等
-
2.2 动手实践:Snort
- 此任务只需要用到一台虚拟机kali
- 在kali中执行指令
snort -r /etc/snort/listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
-r /etc/snort/listen.pcap
:从文件listen.pcap
读取抓包数据(-r
表示read
)-c /etc/snort/snort.lua
:指定 Snort 的配置文件(snort2是snort.conf)-A alert_fast
:设置警报输出模式为alert_fast
(简洁格式,每行一条警报)-l /var/log/snort
:将警报日志保存到/var/log/snort
目录
- 分析结果发现:snort此次共分析了1个pcap文件,处理数据包135,580个,接收字节数8,139,156。协议分布显示有IPv4数据包135,560个(99.985%),TCP数据包135,512个(99.95%),UDP仅3个包,ARP包20个,这种分布表明网络流量几乎全部为TCP/IPv4流量,存在极少量ARP和UDP通信
-
与此同时,跟踪67,660个流,其中TCP流67,657个,UDP流3个。TCP会话特征显示有67,657个SYN请求,但仅有83个SYN-ACK响应,同时,出现67,549个RST和72个FIN,这种异常比例(SYN-ACK率仅0.12%)表明存在大量不完整连接,可能是扫描行为导致
-
输入指令
vim /var/log/snort
,双击alert_fast.txt
查看输出的报警日志文件
- 观察发现,日志中检测到两类高危攻击行为,均由 IP
172.31.4.178
(攻击者)向172.31.4.188
(目标)发起,分别是Nmap XMAS 攻击和异常 TCP 会话攻击
2.3 分析配置规则
- 此任务只需要使用一台虚拟机honeywall
- 启动honeywall,使用
su -
指令提权,再执行vim /etc/init.d/rc.firewall
打开防火墙文件
- 可以看到
create_chains
函数自动创建了三条自定义链,黑名单链BlackList
用于封禁恶意IP或流量;白名单链WhiteList
只允许可信IP访问;防护名单链Fencelist
限制蜜罐的出站流量,防止蜜罐被利用作为攻击跳板 - 还可以看到默认规则(默认全部丢弃的规则)、本地规则(允许本地转发的规则)、管理规则(允许管理接口,放行指定端口的规则)等
- 返回命令行,查看规则列表
iptables -t filter -L | less
,可以观察到默认规则(INPUT、FORWARD、OUTPUT)已被关闭
- 返回命令行,执行命令
vim /etc/rc.d/init.d/snortd
,打开脚本文件可看到该脚本默认使用snort.conf
规则,默认监听eth0
网卡,默认存储日志路径为/var/log/snort
,当然还定义了一些其他操作
- 接下来,执行命令
vim /etc/init.d/hw-snort_inline
打开snort_inline
脚本文件,可以看到实际执行参数,如一些变量和操作指令说明
- 键入指令
chkconfig --list | grep iptables
和chkconfig --list | grep snort
,分别查看iptables防火墙服务和Snort入侵检测系统在系统各运行级别下的开机自启状态
- 其中0表示关机,1表示单用户模式,2表示无网络连接的多用户模式,3表示有网络连接的多用户命令行模式,4表示保留未用,5表示有图形界面的多用户模式,6表示重启。可以看出iptables和hw-snort_inline在无网络连接的多用户命令行模式下开始启动,而snortd在任何情况下都不会自启动
- 回到命令行,执行
vim /etc/honeywall.conf
指令,在Snort Rule Update Variables
部分可以观察到自动更新和服务自动启动服务是关闭的,将no改为yes可实现自动更新,每周规则更新日期是周六
- 蜜网网关通过防火墙严格过滤流量,利用Snort入侵检测实时分析流量,匹配攻击特征并记录恶意行为,生成结构化日志,同时保存原始攻击数据,结合虚假情报诱导攻击者暴露更多手法,最终形成“诱捕-分析-阻断”的闭环,既捕获攻击数据,又限制攻击影响范围
3. 学习中遇到的问题及解决
- 问题1:完成防火墙配置任务过程中,在kali和winXP上对Ubuntu进行telnet登录访问时需要输入用户名、密码,但启动SEEDUbuntu虚拟机无需进行登录操作,故对用户名密码没有印象
- 问题1解决方案:打开用户名密码.txt文件,找到了对应的用户名密码
-
问题2:执行
snort -r /etc/snort/listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
后,控制台输出包含报警日志,但日志并未被保存到/var/log/snort
目录 -
问题2解决方案:键入
nano /etc/snort/snort.lua
修改配置文件,找到configure outputs
模块,删除alert_fast
前的注释符号,并在括号中添加语句,修改后重新执行语句,日志成功被保存到指定目录file = true, -- 必须为 true 才会写入文件packet = false,limit = 10
4. 学习感想和体会
本次实验我学会了使用iptables过滤ICMP数据包、只允许特定IP地址访问某网络服务,使用Snort对pcap文件进行入侵检测、获取报警日志并指定目录存储路径,以及分析蜜网配置规则,实验过程比较简单,主要是通过相关指令实现内容读取、配置修改、状态查询等功能,一个清晰的感受是近几次实验重点越来越侧重于实验分析,操作步骤逐渐简单,但更加考验我们对指令的理解、对原理的掌握,不能止步于看到输出结果,而是要明晰结果说明了什么,在此过程中也能够对我们使用的工具与技术有进一步认识,能体会到自己是有进步的,当然,还需要再接再厉!
参考资料
在Ubuntu 上安装和配置Snort 3 NIDS - FreeBuf网络安全行业门户
Snort3:使用说明(四)_snort3.0 规则-CSDN博客