一、实践内容
(1)配置Linux操作系统平台上的iptables,完成过滤ICMP数据包和特定IP地址访问主机等功能;
(2)使用Snort对pcap文件进行入侵检测,获得并分析报警日志;
(3)分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则。
二、实践过程
本次实验使用以下虚拟机:
主机 | IP地址 |
---|---|
Kali | 192.168.200.4 |
Metasploitable-Linux | 192.168.200.125 |
WinXP | 192.168.200.5 |
蜜网网关 | 192.168.200. |
1、防火墙配置
任务要求:配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试
(1) 过滤ICMP数据包,使得主机不接收Ping包;
(2) 只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问。
(1)过滤ICMP数据包
- 在kali中使用命令
iptables -L
查看当前防火墙配置信息,对iptables的操作都必须有root权限,可以看到没有防火墙措施;
- 在WinXP使用命令
ping 192.168.200.4
,能够正常ping通;
- 接着在kali中使用命令
iptables -A INPUT -p icmp -j DROP
添加规则,然后使用iptables -L
查看当前防火墙配置信息,添加成功;
> -A INPUT:将input规则添加到链尾;
> -p icmp:指定icmp协议;
> -j DROP:指定对应数据包进行丢弃。
- 在WinXP使用命令
ping 192.168.200.4
,发现ping不通;
- 接着在kali中使用命令
iptables -D INPUT -p icmp -j DROP
,然后使用iptables -L
看到当前防火墙配置信息被删除;
- 在WinXP再次使用命令
ping 192.168.200.4
,发现能够ping通了。
(2)特定IP地址访问主机TELNET服务
- 查看Metasploitable_ubuntu靶机的IP地址为:192.168.200.125,kali机的IP地址为:192.168.200.4;
- 分别测试在kali上和WinXP上是否可以进行telnet登录,可以看到都能成功访问;
- 先在Metasploitable_ubuntu中输入命令
sudo -s
,进入root 模式,然后使用命令iptables -P INPUT DROP
设置不接收任何包的规则以拒绝一切数据流入;
- 再次在kali上和WinXP上输入命令
telnet 192.168.200.125
,发现二者现在都无法进行telnet登录;
- 在Metasploitable_ubuntu中使用命令
iptables -A INPUT -p tcp -s 192.168.200.4 -j ACCEPT
只允许Kali(IP地址:192.168.200.4)访问主机Metasploitable_ubuntu;
- 然后测试在kali上是否可以进行telnet登录,可以看到访问成功;
- 测试在WinXP上是否可以进行telnet登录,可以看到访问失败;
- 最后清除之前设置的规则,输入命令如下:
> iptables -F
> iptables -P INPUT ACCEPT
2、动手实践:Snort
使用Snort对给定pcap文件进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
①从离线的pcap文件读取网络日志数据源
②在snort.conf中配置明文输出报警日志文件
③指定报警日志log目录(或缺省log目录=/var/log/snort)
(1)Snort实现原理
Snort中四个主要部件以及处理过程描述如下:
①数据包解码器: Snort 的第一个处理阶段,负责从网络接口或文件(如 pcap 文件)中捕获原始数据包,并根据数据链路层协议(如 Ethernet、PPP)将其解码为 Snort 能够理解的格式,将解码后的数据包传递给下一个处理阶段(预处理器);
②预处理器:用于对数据包进行初步处理,包括协议解析、数据包重组、异常检测等,并将处理后的数据传递给检测引擎。预处理器可以帮助 Snort 处理复杂的协议或攻击行为,这些行为可能无法通过简单的规则匹配来检测;
③检测引擎:Snort 的核心部件,加载并解析 Snort 规则文件(通常为 .rules 文件),对每个数据包应用规则集中的规则,进行匹配,以检测潜在的攻击行为,如果数据包与某条规则匹配,则触发相应的动作(如报警、记录、阻止等);
④输出模块:将检测引擎的结果输出到指定的目标,如日志文件、数据库、控制台等;输出模块还可以生成警报,通知管理员潜在的安全威胁。
(2)实践过程
- 利用kali中的Snort工具,输入命令
snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
,从离线的listen.pcap文件读取网络日志数据源,可见,TCP数据包占绝大多数;
> -c:表示选择snort配置文件
> -r:表示从pcap格式的文件中读取数据包
> -A:设置报警输出模式为alert_fast,生成简洁的报警日志
> -l:指定报警日志的输出目录
- 此时snort会在默认目录生成一个日志文件,进入报警日志目录/var/log/snort, 查看日志文件,记录了报警数据10条的入侵检测信息,可以发现本次攻击是使用nmap发起的。
> 攻击主机的IP地址:172.31.4.178
> 网络扫描的目标IP地址:172.31.4.188
3、分析配置规则
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
(1)分析防火墙和IDS/IPS配置规则
具体分析配置规则与启动项文件包括:
> 防火墙(nefilter+IlPTables) : /etc/init.d/rc.firewall
> 入侵检测系统(Snort) :/etc/init.d/hflow_snort 与/etc/snort/snort.conf
> 入侵防御系统(Snort_ inline) : /etc/init./hflow-snort. inline 与/etc/snot._inline/snort_inline.conf
实践过程:
- 查看防火墙的文件:先输入
su -
提升至root,再输入vim /etc/init.d/rc.firewall
查看文件;
- 可以看到create_chains创建了黑名单和白名单的规则链,还创建了很多协议数据包的处理规则链;分析可知,防火墙文件rc.firewall中,函数create_chains用于创建链,该函数分别定义了黑名单和白名单,防护名单以及防护日志删除,含义如下:
> -N:根据用户指定的名字创建新链
> 黑名单:阻止某些网络地址和用户进入主机
> 白名单:用户设置的认为可以添加信任的网络用户以及网络地址
> 防护名单:不允许被外部访问的蜜罐主机
> 防护日志删除:一个表,用于记录/删除从围栏反弹的数据包
- 防火墙文件rc.firewall中还可以看到默认规则、本地规则、管理规则;
- 防火墙开启后根据先前规则链及定义的规则函数过滤数据包;
(2)分析iptables
输入命令iptables -t filter -L | less
查看规则列表,可以看到默认的规则入INPUT、FORWARD、OUTPUT都已经被关闭了。
(3)获取Snort实际执行参数
- 输入命令
vim /etc/init.d/snortd
打开snort脚本文件,可以看到实际运行时候的参数,默认使用默认目录下的snort规则,监听网卡为eth0,默认储存路径为/var/log/snort;
- 执行命令
vim /etc/init.d/hw-snort_inline
,打开 snort_inline 的脚本文件获取snort_inline实际执行参数(其中,-c 表示读取config文件;-D 表示Daemon模式;-Q 表示使用QUEUE模式;-l 表示输出log文件的目录;-t 表示改变程序执行时所参考的根目录位置)。
(4)说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的
- 输入命令
chkconfig --list | grep [服务]
来查看哪些服务是自开启的(0~6分别表示关机、单用户模式、无网络连接的多用户命令行模式、有网络连接的多用户命令行模式、不可用、带图形界面的多用户模式、重新启动)。可以看到 iptables 和 hw-snort_inline 在无网络连接的多用户命令行模式下开始启动,而 snortd 不会自启动;
- 输入命令
vim /etc/honeywall.conf
打开honeywall配置文件,找到Snort Rule Update Variables,可以看到其值为no,不自动更新;
- 输入命令
vim /etc/oinkmaster.conf
打开该文件,发现了 snort.conf 文件,可以推断这里使用工具 Oinkmaster 默认跳过 local.rules、deleted.rules 和 snort.conf 的更新,以避免覆盖本地自定义配置。
三、学习中遇到的问题及解决
- 问题1:在Metasploitable_ubuntu中输入命令
iptables -P INPUT DROP
设置不接收任何包的规则,该命令无法运行;
- 问题1解决方案:先在Metasploitable_ubuntu中输入命令
sudo -s
,进入root 模式,然后使用命令iptables -P INPUT DROP
设置规则。
- 问题2:输入命令
snort -r listen.pcap -c /etc/snort/snort.conf -K ascii
从离线的pcap文件读取网络日志数据源时出现错误:ERROR: unknown option -K ascii
;
- 问题2解决方案:这个错误表明在运行 Snort 时使用了 -K ascii 选项,然后该选项在 Snort 3.x 中已被弃用;故通过输入命令
sudo nano /etc/snort/snort.lua
编辑 snort.lua 文件,找到日志配置部分(通常是 logging 模块),并添加以下内容,来配置日志格式。
- 问题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
;
- 问题3解决方案:分析原因是 Snort 3.x 不再使用传统的 snort.conf 配置文件,而是改用基于 Lua 的配置文件(如 snort.lua)。
4.实践总结
在本次实践中,主要收获有:通过 iptables 设置规则对防火墙进行设置,掌握了如何控制流量进出以及记录特定类型的网络活动;使用 Snort 工具对网络流量进行分析,识别潜在的攻击行为,并生成相应的警报信息;通过分析脚本文件,理解了蜜网网关如何结合防火墙和入侵检测技术,实现对攻击数据的捕获和控制。但是在使用snort工具时由于版本问题还是出现了很多问题,让我更加认识到对于实践的原理需要深入掌握的同时做实验的时候还要能沉下心,要虚心向同学讨教或上网查询解决方法,而不是执着地按照自己的想法闷头做。