第六课 网络安全防范技术实践验收
验收内容
1.防火墙配置(附上主要过程和结果截图即可)
配置Linux平台上的iptables,完成如下功能并测试
不允许其他网络使用本机的Telnet服务(非课堂验收)。
只允许特定IP地址访问主机的某一网络服务,而其他IP地址无法访问
配置Windows个人防火墙:要求只允许使用TCP的2000-3000端口或80端口连接本机地址的某个端口
2.Snort实践
使用Snort对给定的pcap文件进行入侵检测,并对检测出的攻击进行说明
3.分析蜜网网关的防火墙和IDS/IPS配置规则,并撰写分析报告,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。分析内容如下:
上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?
获取IPTables的实际规则列表、Snort和Snort_inline的实际执行参数。
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
蜜网网关的Snort规则是如何自动升级的?
防火墙配置
iptables
不允许其他网络使用本机的Telnet服务
镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|
kali | kali | kali | kali | 192.168.200.2 |
windowsXP Attacker | - | mima1234 | - | 192.168.200.3 |
SEEDUbuntu | seed | dees | dees | 192.168.200.4 |
首先确认kali的telnet服务是否开启netstat -a | grep telnet
,发现没有开。
先重启telnet服务sudo /etc/init.d/openbsd-inetd restart
再查看netstat -a | grep telnet
,发现telnet服务开启了
此时测试发现SEED可以进行telnet登录kalitelnet 192.168.200.2
题目要求,“不允许其他网络使用本机的Telnet服务”,我理解的意思可以通过关闭kali的telnet服务实现这一点。
vim /etc/init.d/openbsd-inetd
,进入文件,发现文档里写明了用法:关闭命令是stop
sudo /etc/init.d/openbsd-inetd stop
netstat -a | grep telnet
发现telnet服务关闭了
此时测试发现SEED无法telnet登录kalitelnet 192.168.200.2
只允许特定IP访问主机网络服务
是一个dos环境下的命令。
netstat -a
是一个dos环境下的命令,在Internet RFC标准中,用来显示所有连接和侦听端口
netstat -a | grep telnet
查看kali上的telnet服务是否已经打开(如果没有打开,请跳转至我的问题解决方案2)
分别测试SEED和WinXP是否可以进行telnet登录kalitelnet 192.168.200.2
在kali使用iptables -P INPUT DROP
指令拒绝一切的数据包流入(修改的是默认规则-P
),此时发现两台机器都无法进行telnet访问
使用指令iptables -A INPUT -p tcp -s 192.168.200.4 -j ACCEPT
开启SEED对主机kali的tcp服务。并用iptables -L
查看规则
这时发现SEED是可以正常访问telnet服务的,但是Winxp是无法访问的
最后执行iptables -F
删除自定义规则,iptables -P INPUT ACCEPT
把没有规定的数据包都接收,恢复之前的状态
Windows个人防火墙
要求只允许使用TCP的2000-3000端口或80端口连接本机地址的某个端口
镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|
windowsXP Attacker | - | mima1234 | - | 192.168.200.3 |
查看当前已开放的端口,netstat -an
发现TCP的80端口没开,接下来打开80端口
会提示重启计算机后生效,于是重启计算机。
【开始-控制面板-网络连接-本地连接-属性-高级-设置】
启动防火墙
添加特例
接下来开启xp的telnet服务
开始--运行--输入services.msc
,进入服务管理器界面
在“服务管理器”界面中找到Telnet一项,双击进知入telenet属性界面,在常规选项卡中将启动道类型改为自动或手动,再确定
再次进入telenet属性界面,将服务状态启用,应用退出
cmd,输入net start telnet
netstat -a | grep telnet
确认telnet服务已经打开,此时使用TCP的80端口连接本机地址的端口
Snort
使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件)进行入侵检测,并对检测出的攻击进行说明。
在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
从离线的pcap文件读取网络日志数据源。
在snort.conf中配置明文输出报警日志文件。
指定报警日志log目录(或缺省log目录=/var/log/snort)。
使用之前实验的listen.pcap,确认下它还健在,及其位置
利用指令snort -r /home/kali/listen.pcap -c /etc/snort/snort.conf -K ascii
对listen.pacp
进行入侵检测, 其中-c
表示选择snort配置文件,-r
表示从pcap格式的文件中读取数据包,-K ascii
是用来指定输出日志文件的为ASCII编码。
查看输出里检测出的数据包,可以看到大部分数据流为tcp会话,少部分为ARP包
报警数据包有10条,均被日志记录,所有数据包都裁决允许:
数据流统计:
此时snort会在默认目录生成一个日志文件,进入报警日志目录cd /var/log/snort
, 查看日志文件vim alert
,记录了报警数据10条的入侵检测信息,可以发现本次攻击是使用nmap发起的。攻击主机的IP地址是172.31.4.178
,网络扫描的目标IP地址是172.31.4.188
实践作业
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,并撰写分析报告,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
具体分析配置规则与启动项文件包括:
防火墙(netfilter+IPTables) : /etc/init.d/rc.firewall;
入侵检测系统(Snort) : /etc/init.d/hflow-snort 与/etc/snort/snort.conf;
入侵防御系统(Snort_ inline) : /etc/init.dthflow-snort_ inline与/etc/snort_ inline/snort_inline.conf.
分析内容如下:
上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?
获取IPTables的实际规则列表、Snort 和Snort_ inline 的实际执行参数。
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
Bonus:蜜网网关中的Snort规则是如何自动升级的?
镜像类型 | 镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|---|
蜜罐网关 | roo | roo | honey | honey | 192.168.200.8 |
上述脚本是如何实现蜜网网关的数据捕获和数据控制机制
数据捕获机制:iptables可以通过记录日志的形式来捕获网络连接信息,包括源地址,目的地址,使用的端口和进行连接的协议、长度等等;Snort对符合入侵检测特征的攻击数据包发出响应的报警信息,从而标识网络流中存在的攻击事件。
查看防火墙的文件
su -
vim /etc/init.d/rc.firewall
可以看到创建了黑名单和白名单的规则链,还创建了很多协议数据包的处理规则链
create_chains() {
if [ -n "${HwFWBLACK}" ] && [ -e ${HwFWBLACK} ] &&
[ "${HwBWLIST_ENABLE}" == "yes" ]; then
# 黑名单
iptables -N BlackList
fi
if [ -n "${HwFWWHITE}" ] && [ -e ${HwFWWHITE} ] &&
[ "${HwBWLIST_ENABLE}" == "yes" ]; then
# 白名单
iptables -N WhiteList
fi
if [ -n "${HwFWFENCE}" ] && [ -e ${HwFWFENCE} ] &&
[ "${HwFENCELIST_ENABLE}" == "yes" ]; then
# 防护名单
iptables -N FenceList
# 防护日志删除
iptables -N FenceLogDrop
fi
if [ -n $HwTCPRATE ] && [ $HwTCPRATE -gt 0 ]; then
# 创建TCP处理链
iptables -N tcpHandler
fi
if [ -n $HwUDPRATE ] && [ $HwUDPRATE -gt 0 ]; then
# 创建UDP处理链
iptables -N udpHandler
fi
if [ -n $HwICMPRATE ] && [ $HwICMPRATE -gt 0 ]; then
# 创建ICMP处理链
iptables -N icmpHandler
fi
if [ -n $HwOTHERRATE ] && [ $HwOTHERRATE -gt 0 ]; then
# 创建其他协议处理链
iptables -N otherHandler
fi
}
snort主要通过对整个网络数据包进行预警提示,多侧重于数据捕获,当然查询防火墙和snort_inline日志也可以获得一定的数据捕获信息。
iptables中有用 modprobe ipt_LOG,iptables -N FenceLogDrop等存储数据捕获的日志,snort_inlin可以用
snort -c [snort.conf绝对路径} -l [log路径] -K ascii
来实现输出log文件。iptables防火墙主要负责对数据accept,reject,drop等规则的制定和执行,多用于数据控制。
分析相关脚本的关键代码,防火墙文件rc.firewall中
create_chains()
用于创建链,该函数分别创建了黑名单和白名单,防护名单以及防护日志删除,-N
的意思表示根据用户指定的名字创建新链,其中黑名单就是阻止某些网络地址和用户进入主机,白名单就是用户设置的认为可以添加信任的网络用户以及网络地址,防护名单是IPS的文件列表,防护日志删除是一个表,用于记录/删除从围栏反弹的数据包。
获取IPTables的实际规则列表、Snort 和Snort_ inline的实际执行参数
获取IPTables的实际规则列表
通过iptables -t filter -L | less
来查看规则列表,可以看到默认的规则入INPUT、FORWARD、OUTPUT都已经被关闭了
获取Snort实际执行参数
使用命令snort --h
也可以查询snort文件vim /etc/rc.d/init.d/snortd
可以看到些参数的选项:默认使用默认目录下的snort.conf规则,默认监听网卡为eth0,默认存储日志路径为/var/log/snort
获取Snort_inline实际执行参数
执行命令vim /etc/init.d/hw-snort_inline
打开snort_inline的脚本文件,可以看到到实际执行的参数
-D
表示Daemon模式,-c
表示读取config文件,-Q
表示使用QUEUE模式,-l
表示输出log文件的目录,-t
表示改变程序执行时所参考的根目录位置
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的
chkconfig命令主要用于检查,设置系统的各种服务。使用chkconfig -list
命令来对linux上运行的服务进行查询。
根据chkconfig --list | grep [服务]
可以查询到开启服务的情况,其中1表示单用户模式,2表示无网络连接的多用户命令行模式,3表示有网络连接的多用户命令行模式,4表示不可用,5表示带图形界面的多用户模式,6表示重新启动。
可以发现NIPS(snort)的0-6都是off,说明是需要手动启动的,而防火墙(iptables)和NIPS(snort_inline)不全是off,是随系统开机而开启的
密网网关中的Snort规则是如何自动升级的
可以从vim /etc/honeywall.conf
打开honeywall配置文件,来看snort的rule是否自动更新(在文件270+行),默认为不更新
Snort社区中的实际规则更新工具是免费的Oinkmaster
使用vim /etc/oinkmaster.conf
打开该文件,发现了snort.conf文件,可以推断这里使用工具Oinkmaster进行了snort的自动升级