20212931 2021-2022-2 《网络攻防实践》第五次实验任务
一、实践内容
(一)防火墙
- 定义:防火墙指的是置于不同的网络安全域之间,对网络流量或访问行为实施访问控制的安全组件或设备,达到保护特定网络安全域免受非法访问和破坏的安全目标。
- 常见功能:会话管理、报文结构解析、安全区域、安全策略、NAT、VPN、DoS 防御、报文攻击防御、内容扫描、监控和报告、报文抓包。
- 技术类型:
- 接口模式:
(二)Linux开源防火墙iptables
- 简介:iptables可以检测、修改、转发、重定向和丢弃 IPv4 数据包。过滤IPv4数据包的代码已经内置于内核中,并且按照不同的目的被组织成表的集合。表由一组预先定义的链组成,链包含遍历顺序规则。每一条规则包含一个谓词的潜在匹配和相应的动作(称为目标)。如果谓词为真,该动作会被执行,也就是说条件匹配。iptables是用户工具,允许用户使用链和规则。
- 数据包过程:
- 表:iptables 包含 5 张表(tables):
raw 用于配置数据包,raw 中的数据包不会被系统跟踪。
filter 是用于存放所有与防火墙相关操作的默认表。
nat 用于 网络地址转换(例如:端口转发)。
mangle 用于对特定数据包的修改(参考损坏数据包)。
security 用于强制访问控制网络规则。 - 链:表由链组成,链是一些按顺序排列的规则的列表。默认的 filter 表包含 INPUT, OUTPUT 和 FORWARD 3条内建的链,这3条链作用于数据包过滤过程中的不同时间点。nat 表包含PREROUTING, POSTROUTING 和 OUTPUT 链。
默认情况下,任何链中都没有规则。可以向链中添加自己想用的规则。链的默认规则通常设置为 ACCEPT,如果想确保任何包都不能通过规则集,那么可以重置为 DROP。默认的规则总是在一条链的最后生效,所以在默认规则生效前数据包需要通过所有存在的规则。
用户可以加入自己定义的链,从而使规则集更有效并且易于修改。 - 规则:数据包的过滤基于规则。规则由一个目标(数据包包匹配所有条件后的动作)和很多匹配(导致该规则可以应用的数据包所满足的条件)指定。一个规则的典型匹配事项是数据包进入的端口(例如:eth0 或者 eth1)、数据包的类型(ICMP, TCP, 或者 UDP)和数据包的目的端口。
目标使用 -j 或者 --jump 选项指定。目标可以是用户定义的链(例如,如果条件匹配,跳转到之后的用户定义的链,继续处理)、一个内置的特定目标或者是一个目标扩展。内置目标是 ACCEPT, DROP, QUEUE 和 RETURN,目标扩展是 REJECT and LOG。如果目标是内置目标,数据包的命运会立刻被决定并且在当前表的数据包的处理过程会停止。如果目标是用户定义的链,并且数据包成功穿过第二条链,目标将移动到原始链中的下一个规则。目标扩展可以被终止(像内置目标一样)或者不终止(像用户定义链一样)。
- 基本语法格式:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
(表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。)
- 管理控制选项:
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
(三)入侵检测
- 入侵检测是防火墙的合理补充,帮助系统对付网络攻击,扩展了系统管理员的安全管理能力(包括安全审计、监视、进攻识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息,看看网络中是否有违反安全策略的行为和遭到袭击的迹象。入侵检测被认为是防火墙之后的第二道安全闸门,在不影响网络性能的情况下能对网络进行监测,从而提供对内部攻击、外部攻击和误操作的实时保护。
- 步骤:信息收集、信号分析
- 分类:
基于主机、基于网络、基于内核
基于行为、基于知识
(四)Snort
- 简介:Snort是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配,可以检测各种不同的攻击方式,对攻击进行实时报警等。
- 组织结构:
Packet Decoder,从接口收帧,作报文粗解析(Ethernet/WIFI/IP/UDP/TCP/GRE等),最深解析到 IP 协议字段的首部,将报文送到 Preprocessor
Preprocessor,使用 Plugin 解析报文,主要 Plugin 如 HTTP/FTP/SSH 等等 preprocessor plugin,使用规则(preprocessor rule)做初解析及执行行为(alert/log/pass/drop/sdrop/rject 等),分片报文在这个阶段进行重组
Detetction Engine,Snort 的核心模块,将从 preprocessor 送来的报文进行更精确的规则(snort rule)匹配,包括:应用、流方向、报文模式匹配等,后执行行为
Logging and Alerting System,对于规则匹配中需触发 Log 及告警的流进行处理,写入本地文件 /var/log/snort 目录
Output Modules,将 Log 及告警通过 Unix Socket, WindowsPopup, SNMP Trap 等方式提交到日志服务器或数据库 - 三种工作模式:嗅探模式(从网络上读取数据包,常用命令snort -dev)、数据包记录模式(把数据包记录到硬盘上,常用命令snort -b)、网络入侵检测模式(载入规则库才能工作,Snort并不记录所有捕获的包,而是将包与规则对比,仅当包与某个规则匹配的时候,才会记录日志或产生报警)。
二、实践过程
(一)防火墙配置
> 任务要求:配置Linux操作系统平台上的iptables,和Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
> (1)过滤ICMP数据包,使得主机不接收Ping包;
> (2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问
Linux
- (1)过滤ICMP数据包
首先查看SEED的链中初始规则
然后添加规则,使所有入站ICMP数据包DROP
使用kali测试ping
- (2)特定IP访问服务
首先测试SEED的telnet正常性、ftp正常性
然后对SEED添加规则,首先DROP所有不匹配数据包
然后对kali通过tcp(60.3)
测试telnet服务、ftp服务
windows(xp)
- (1)过滤ICMP数据包
控制面板->防火墙->高级->ICMP设置->取消所有选项
使用Kali测试
- (2)特定IP特定服务
控制面板->管理工具->本地安全策略->右键“IP安全策略”
新建策略->设置安全规则向导->IP筛选
两条规则:DROP所有外部tcp到端口23的数据包;允许特定kali(60.3)到TCP23的数据包
测试:kali可以,SEED失败
(二)动手实践:Snort
> 使用Snort对之前的pcap文件进行入侵检测,并对检测出的攻击进行说明。
> Snort运行命令提示如下:
> 从离线的pcap文件读取网络日志数据源
> 在snort.conf中配置明文输出报警日志文件
> 指定报警日志log目录(或缺省log目录=/var/log/snort)
- 首先利用指令snort -r listen.pacp -c /etc/snort/snort.conf -K ascii对listen.pacp进行入侵检测,-K ascii主要是为了指定输出log文件的编码为ASCII(默认为binary)。
检测出的数据包大部分为TCP数据包
- 在/var/log/snort/目录下可以查找到snort.alert.fast文件,这个文件即输出的日志文件,通过vim打开可以发现这个攻击是nmap发起的,当然还有很多其他的信息,譬如源地址、目的地址等等。
(三)分析蜜网网关的防火墙和IDS/IPS配置规则
> 分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
- 数据控制
查看防火墙的文件rc.firewall,可以看到iptables的初始化操作
iptables的核心在于表、链和规则,因此文件主要包括以下内容:
(1)创链函数create_chains:存储源地址和目的地址黑名单,源地址和目的地址的白名单,源地址和目的地址的防护名单,以及供下述policy使用的各种协议对应的Handler链。
(2)三种代理转发模式定义:
(3)start启动函数:读取名单,执行规则
- iptables规则表
使用iptables -t filter -L来查看规则列表。默认的规则入OUTPUT、INPUT、FORWARD都已经被关闭了,取而代之的是一些自定义的规则。
- Snort实际执行参数
查询snort的脚本文件vim /etc/init.d/snortd,可以直观的看到参数选项对应操作和注释解释,例如默认不开启-A模式,使用默认目录的config文件(/etc/snort/snort.conf),默认使用eth0、使用二进制模式保存log文件等
- Snort_inline实际执行参数
查询脚本文件vim /etc/init.d/hw-snort_inline,可以查看到运行参数的相关注释(-D表示Daemon模式,-c表示读取config文件,-Q表示使用QUEUE模式,-l表示输出log文件的目录,-t表示改变程序执行时所参考的根目录位置)
- 防火墙、NIDS、NIPS启动
chkconfig --list | grep [服务],检查,设置系统的各种服务。根据反馈信息,可以发现防火墙和NIPS(snort_inline)是跟随系统启动的,并且开机自动配置刚才的脚本文件。NIDS是需要手动启动的。
- Snort规则如何自动升级
访问honeywall配置文件vim /etc/honeywall.conf,我们可以找到snort规则更新的地方。默认是不自动更新的。其中Oinkmaster为自动更新的软件,可使用相同目录下oinkmaster.conf开启自动更新。
三、遇到的问题
> 在配置SEED的特定服务时,起初设置丢弃所有TCP包,然后通过特定IP的TCP包,发现规则中的地址为bogon
> 解答:应该是规则相互冲突,优先执行第一条后,特定IP再执行时逻辑冲突,更改为丢弃所有包便解决了。
四、感悟
本次实践主要学习防火墙、IDS、IPS的运行机制、原理以及配置规则等内容,通过动手实践防火墙配置以及分析蜜网网关的防火墙和IDS/IPS配置规则,分析的内容居多,但更具有实用性,在日常生活中的使用收益更明显。