20242924 《网络攻防实践》第五周作业
20242924 2024-2025-2 《网络攻防实践》实践五报告
1.实践内容
1.1 防火墙
- 防火墙:主要由四个部分组成:服务访问规则、验证工具、包过滤和应用网关。所有计算机的一切输入输出的网络通信和数据包都要经过防火墙。
- 防火墙的基本功能:
1.对进出网络的数据进行过滤
2.管理用户进出访问网络的行为
3.封堵禁止的业务
4.记录所有通过防火墙信息内容和活动
5.对网络攻击行为进行检测和告警 - 防火墙的分类:
按照防火墙的实现方式可将防火墙分为下列几种:
1、包过滤防火墙:包过滤防火墙比较简单,但缺乏灵活性。而且包过滤防火墙每个包通过时都需要进行策略检查,一旦策略过多会导致性能的急剧下降。
2、代理型防火墙:安全性高,但开发成本也很高,如果每个应用都开发一个的代理服务的话是很难做到的。所以代理型防火墙需要针对某些业务应用,不适合很丰富的业务。
3、状态检测防火墙:属于高级通信过滤,在状态检测防火墙中,会维护着一个会话表项,通过Session表项就能判断连接是否合法访问,现在主流的防火墙产品多为状态检测防火墙。
1.2 linux平台的防火墙
linux平台的防火墙:netfilter/iptables
-
工作原理:在nefilter/iptables防火墙系统中,netfilter 组件位于Linux的内核空间中,实现了静态包过滤和状态报文检查(即动态包过滤)基本防火墙功能,此外也支持一个灵活可扩展的框架,支持NAT网络地址转换等其他额外功能,并提供了多层API接口以支持第三方扩展,nefilter具备构建防火墙、NAT共享上网、利用NAT构建透明代理,以及构建QoS或策略路由器等安全功能。Iptables 则是工作在Linux用户空间中的防火墙配置工具,通过命令行方式允许用户为netfilter配置各种防火墙过滤和管理规则。nefilter/iptables 中包含三个最基本的规则表,分别为用于包过滤处理的filter表、用于网络地址转换处理的nat表,以及用于特殊目的数据包修改的mangle表。
-
IPtables用法:
命令语法:
$ iptables [-t table] cpmmand [match] [target]
其中-t指定配置规则所在的表,缺省表包括filter、nat、mangle、raw等。
command 部分是 iptables 命令的最重要部分,告诉iptables命令要做什么,例如,插入规则、讲规则添加到链的末尾或删除规则。 -
netfilter/iptables的NAT机制:
IP伪装:iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE使内部网络主机发出的数据包进行源IP地址伪装,使用防火墙外网IP地址。
SNAT机制:使用-j SNAT描述,用--to source描述要转换的IP地址。
DNAT机制:使用-j DNAT描述,用--to destination描述IP地址、范围或端口。
1.3 Snort
- Snort IDS概述
网络入侵检测系统:
1.实时数据流量分析和记录IP网络数据包;
2.进行协议分析,对网络数据包内容进行搜索/匹配;
3.检测各种不同的攻击方式,对攻击进行实时报警;
4.开源的入侵检测系统,具有很好的扩展性和可移植性。 - Snort 体系结构
由4大软件模块组成:
1.数据包嗅探模块——负责监听网络数据包,对网络进行分析。
2.预处理模块——该模块用相应的插件来检查原始数据包,从中发现原始数据的“行为”,如端口扫描、IP碎片等,数据包经过预处理后才传到检测引擎。
3.检测模块——该模块是Snort的核心模块。当数据包从预处理器送过来后,检测引擎依据预先设置的规则检查数据包,一旦发现数据包中的内容和某条规则相匹配,就通知报警模块;
4.报警/日志模块——经检测引擎检查后的Snort数据需要以某种方式输出。如果检测引擎中的某条规则被匹配,则会触发一条报警,这条报警信息会通过网络、UNIXsocket、WindowsPopup(SMB)、SNMP协议的trap命令传送给日志文件,甚至可以将报警传送给第三方插件(如SnortSam),另外报警信息也可以记入SQL数据库。
2.实践过程
2.1 防火墙配置
- 任务要求:配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问
查看ip地址:
| 主机名称 | IP地址 |
|---|---|
| Kali | 192.168.200.2 |
| SeedUbuntu | 192.168.200.17 |
| WinXP | 192.168.200.3 |
| Meta | 192.168.200.18 |
2.1.1 过滤ICMP数据包,使得主机不接收Ping包
在SEED上ping kali

在正常状态下可以ping通,在kali上通过iptables -L查看默认规则

执行iptables -A INPUT -p icmp -j DROP,使主机不接受icmp的数据包
再次通过iptables -L查看规则,发现多了一条icmp针对任何位置不允许访问的规则,即在INPUT链中添加将所以有ping连接产生的icmp数据包丢失的规则

再次通过SEED ping kali,发现无法ping通

执行iptables -D INPUT -p icmp -j DROP
除去刚才的过滤规则,再次尝试ping连接发现恢复


2.1.2 只允许特定IP地址,访问主机的某一网络服务,而其他的IP地址无法访问
首先,确定两台机器都可以进行telnet登陆,在这里切换靶机meta(192.168.200.18)
telnet 192.168.200.18


接下来使用以下命令拒绝一切的数据包流入(修改的是默认规则-P),此时应该两台电脑都无法进行访问:
iptables -P INPUT DROP

使用指令
iptables -A INPUT -p tcp -s 192.168.200.2 -j ACCEPT
开启192.168.200.2对本机的tcp服务。并用iptables -L查看规则

此时再次尝试,发现Kali是可以正常访问telnet服务的,但是winXP却是无法访问的


最后执行以下两条命令恢复之前的状态
iptables -F
iptables -P INPUT ACCEPT

2.2 动手实践:Snort
使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件,之前的实践已经提供了,请在学习通中下载)进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
1.从离线的pcap文件读取网络日志数据源
2.在snort.conf中配置明文输出报警日志文件
3.指定报警日志log目录(或缺省log目录=/var/log/snort)
使用之前实验的listen.pcap,利用指令
snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
对listen.pacp进行入侵检测

查看输出里检测出的数据包,可以看到大部分数据流为tcp会话,少部分为ARP包报警数据包有10条,均被日志记录,所有数据包都裁决允许




此时snort会在默认目录生成一个日志文件,进入报警日志目录cd /var/log/snort, 查看日志文件,记录了报警数据10条的入侵检测信息,可以发现本次攻击是使用nmap发起的。攻击主机的IP地址是172.31.4.178,网络扫描的目标IP地址是172.31.4.188

2.3 分析配置规则
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
2.3.1 分析防火墙
输入su - 提升至root,使用vim /etc/init.d/rc.firewall查看防火墙的文件


可以看到创建了黑名单和白名单的规则链,还创建了很多协议数据包的处理规则链
防火墙对源地址或者目的地址属于黑名单的主机:丢弃所有包。
对于属于白名单的主机:接受且不记录。
对于属于防护名单内的主机:禁止访问某些不希望被访问到的主机。


还可以看到默认规则、本地规则、管理规则;
防火墙开启后根据先前规则链及定义的规则函数过滤数据包

2.3.2 分析IlPTables
获取IPTables的实际规则列表、Snort 和Snort_ inline的实际执行参数
通过iptables -t filter -L | less来查看规则列表,可以看到默认的规则入INPUT、FORWARD、OUTPUT都已经被关闭了


2.3.3 获取Snort实际执行参数
使用vim /etc/rc.d/init.d/snortd查询snort文件
默认使用默认目录下的snort.conf规则,默认监听网卡为eth0,默认存储日志路径为/var/log/snort


执行命令
vim /etc/init.d/hw-snort_inline
打开snort_inline的脚本文件,可以看到到实际执行的参数

-D表示Daemon模式,-c表示读取config文件,-Q表示使用QUEUE模式,-l表示输出log文件的目录,-t表示改变程序执行时所参考的根目录位置。
2.3.4 说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的
使用chkconfig --list | grep [服务] 来查看服务开启,0~6分别表示关机、单用户模式、无网络连接的多用户命令行模式、有网络连接的多用户命令行模式、不可用、带图形界面的多用户模式、重新启动。


可以看出iptables和hw-snort_inline在无网络连接的多用户命令行模式下开始启动,而snortd不会自启动。
其次使用vim /etc/honeywall.conf打开honeywall配置文件,来看snort的rule是否自动更新(在文件270+行),默认为不更新。
使用vim /etc/oinkmaster.conf打开该文件,发现了snort.conf文件,可以推断这里使用工具Oinkmaster进行了snort的自动升级

3.学习中遇到的问题及解决
- 问题1:seed靶机无法使用telnet服务
![de]()
问题1解决方案:更换meta靶机 - 问题2:在meta里无法使用
iptables -P INPUT DROP命令
![de]()
问题2解决方案: iptables 命令需要 root 权限,而当前使用的是普通用户msfadmin。在 Metasploitable 中执行:
sudo -i
输入 root 密码后再执行iptables -P INPUT DROP - 问题3:输入命令
snort -r listen.pcap -c /etc/snort/snort.conf出现错误ERROR: /etc/snort/snort.conf: can't load /etc/snort/snort.conf: cannot open /etc/snort/snort.conf: No such file or directory ![de]()
- 问题3解决方案: Snort 3.x 不再使用传统的 snort.conf 配置文件,而是改用基于 Lua 的配置文件,修改命令为:
snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
4.实践总结
本次实验我学习到了各种网络安全防范技术的基本原理和方法,防火墙、IDS、IPS的运行机制、原理以及配置规则等内容。熟悉使用linux的iptables的配置。对ICMP数据包有了进一步的认识,通过动手实践防火墙配置以及分析蜜网网关的防火墙和IDS/IPS配置规则,对于其原理和实现细节有了初步的了解。



浙公网安备 33010602011771号