20199325 2019-2020-2 《网络攻防实践》第6周作业
学习总结:
一、IPTABLES 规则(Rules)
牢记以下三点式理解iptables规则的关键:
- Rules包括一个条件和一个目标(target)
- 如果满足条件,就执行目标(target)中的规则或者特定值。
- 如果不满足条件,就判断下一条Rules。
目标值(Target Values)
下面是你可以在target里指定的特殊值:
- ACCEPT – 允许防火墙接收数据包
- DROP – 防火墙丢弃包
- QUEUE – 防火墙将数据包移交到用户空间
- RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
如果你执行iptables –list你将看到防火墙上的可用规则。下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input链, forward链, output链。
# iptables -t filter –list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
查看mangle表:
# iptables -t mangle –list
查看NAT表:
# iptables -t nat –list
查看RAW表:
# iptables -t raw –list
!注意:如果不指定 -t选项,就只会显示默认的 filter表。因此,以下两种命令形式是一个意思:
# iptables -t filter –list
(or)
# iptables –list
以下例子表明在filter表的input链, forward链, output链中存在规则:
# iptables –list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all — 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all – 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
- num – 指定链中的规则编号
target – 前面提到的target的特殊值
prot – 协议:tcp, udp, icmp等
source – 数据包的源IP地址
destination – 数据包的目标IP地址
二、清空所有iptables规则
在配置iptables之前,你通常需要用iptables –list命令或者iptables-save命令查看有无现存规则,因为有时需要删除现有的iptables规则:
iptables –flush 或者 iptables -F
这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版上这个命令不会清除NAT表中的规则,此时只能手动清除:
iptables -t NAT -F
三、永久生效
当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台的不同,具体操作也不同。下面进行简单介绍:
1.Ubuntu
首先,保存现有的规则:
iptables-save > /etc/iptables.rules
然后新建一个bash脚本,并保存到 /etc/network/if-pre-up.d/目录下:
#!/bin/bash
iptables-restore < /etc/iptables.rules
这样,每次系统重启后iptables规则都会被自动加载。
!注意:不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。
2.CentOS, RedHat
# 保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start
查看当前规则:
cat /etc/sysconfig/iptables
四、追加iptables规则
可以使用iptables -A命令追加新规则,其中 -A表示 Append。因此, 新的规则将追加到链尾。
一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用 -A参数添加新规则,那么就是无用功。
1.语法
iptables -A chain firewall-rule
- -A chain – 指定要追加规则的链
- firewall-rule – 具体的规则参数
2.描述规则的基本参数
以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。
-p 协议(protocol)
- 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
- 如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
- 可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
- 还可以使用–protocol参数代替-p参数
-s 源地址(source)
- 指定数据包的源地址
- 参数可以使IP地址、网络地址、主机名
- 例如:-s 192.168.1.101指定IP地址
- 例如:-s 192.168.1.10/24指定网络地址
- 如果不指定-s参数,就代表所有地址
- 还可以使用–src或者–source
-d 目的地址(destination)
- 指定目的地址
- 参数和-s相同
- 还可以使用–dst或者–destination
-j 执行目标(jump to target)
- -j代表”jump to target”
- -j指定了当与规则(Rule)匹配时如何处理数据包
- 可能的值是ACCEPT, DROP, QUEUE, RETURN,MASQUERADE
- 还可以指定其他链(Chain)作为目标
- 注:MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat(详情见上一篇文章)。
-i 输入接口(input interface)
- -i代表输入接口(input interface)
- -i指定了要处理来自哪个接口的数据包
- 这些数据包即将进入INPUT, FORWARD, PREROUTE链
- 例如:-i eth0指定了要处理经由eth0进入的数据包
- 如果不指定-i参数,那么将处理进入所有接口的数据包
- 如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
- 如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
- 还可以使用–in-interface参数
-o 输出(out interface)
- -o代表”output interface”
- -o指定了数据包由哪个接口输出
- 这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
- 如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
- 如果出现! -o eth0,那么将从eth0以外的接口输出
- 如果出现-i eth+,那么将仅从eth开头的接口输出
- 还可以使用–out-interface参数
iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则> 一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
动手实践一:
配置Linux操作系统平台上的iptables,或者windows操作系统平台上的个人防火墙,完成如下功能,并进行测试: (1)过滤ICMP数据包,使得主机不接受ping包; (2)只允许特定IP地址(如局域网中的linux攻击机)访问主机的某一网络服务(如FTP,HTTP,SMB),而其他的IP地址 (如windows攻击机)无法访问。
首先先查看网络的iptables当中的三种模式是否打开
对meta靶机进行ping连接,模式打开时候可以连接,模式不打开,则连接不可以。
对于meta靶机,进行防火墙设定,设置只有kali的信息能够接受。
可以看到只有kali可以继续使用telnet连接到靶机,而seed则不可以。
使用wireshark查看,可以看到kali攻击机和seed机分别对meta靶机进行telnet连接,只有kali可以正常发送,而seed发送的消息被meta靶机拒绝了
动手实践二:
使用Snort对给定pcap文件(第四章中的)进行入侵检测,并对检测出的攻击进行说明。在BT4Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。 Snort运行命令提示如下: 1. 从离线的pcap文件读取网络日志数据源 2. 在Snort.conf中配置明文输出报警日志文件 3. 指定报警日志log目录(或缺省log目录=/var/log/snort)
利用指令snort -r listen.pacp -c /etc/snort/snort.conf -K ascii对lis.pacp进行入侵检测.
lis是我自己使用攻击机对靶机ping的pcap。
实践作业三:
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,并撰写分析报告,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。 具体分析配置规则与启动项文件包括: 1. 防火墙(netfilter+IPTables):/etc/init.d/rc.firewall 2. 入侵检测系统(Snort):/etc/init.d/hflow-snort与/etc/snort/snort.conf; 3. 入侵防御系统(Snort_inline):/etc/init.d/hflow-snort_inline与/etc/snort_inline/snort_inline.conf 分析内容如下。 1. 上述脚本是如何实现蜜网网关的数据捕获和数据控制机制? 2. 获取IPTables的实际规则列表、Snort和Snort_inline的实际执行参数 3. 蜜网网关开关机之后,防火墙、NIDS、NIPS是如何启动的? 4. Bonus:蜜网网关中的Snort规则是如何自动升级的?
上述脚本是如何实现密网网关的数据捕获和数据控制机制?
数据捕获机制:iptables可以通过记录日志的形式来捕获网络连接信息,包括源地址,目的地址,使用的端口和进行连接的协议、长度等等;Snort对符合入侵检测特征的攻击数据包发出响应的报警信息,从而标识网络流中存在的攻击事件。
查看防火墙的文件 vim /etc/init.d/rc.firewall
获取IPTables的实际规则列表、Snort和Snort_inline的实际执行参数。
输入vim /etc/init.d/snortd,查看snort的脚本文件,可以看到实际运行时候的参数
获取Snort_inline实际执行参数
密网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
密网网关开机之后,防火墙、NIDS、NIPS是如何启动的?使用 chkconfig --list 命令来对linux上运行的服务进行查询
密网网关中的Snort规则是如何自动升级的?使用 vim /etc/oinkmaster.conf
学习中遇到的问题及解决
snort的安装有问题,换源也没办法解决,只能重新安装kali系统,再进行换源。或者直接去官网下载安装包,解压后手动安装,不过很麻烦。