netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables命令的管理控制选项
命令 | 作用 |
---|---|
-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) |
方式 | 作用 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给任何回应信息 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息 |
LOG在/var/log/messages | 文件中记录日志信息,然后将数据包传递给下一条规则 |
一.任务要求:配置Linux操作系统平台上的iptables和Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问。
实验准备:准备三台实验用虚拟机,分别是A:kali,B:SEEDUbuntu,C:Metasploitable—ubuntu。
虚拟机 | IP |
---|---|
A:kali | 192.168.200.6 |
B:SEEDUbuntu | 192.168.200.5 |
C:Meta-ubuntu | 192.168.200.123 |
过滤ICMP数据包操作过程:
iptables -L
查看所有规则时,显示需要root 权限,使用sudo su
获取管理员权限,输入密码获得root权限后,再次输入iptables -L
(有条icmp针对任何位置不允许访问的规则,是因为前面用过一次iptables -L
后,没有采用iptables -F
删除自定义规则。),然后使用iptables -A INPUT -p icmp -j DROP
(-A为追加一条规则,INPUT为数据包入口规则,-p为匹配协议,-j为指定处理)使得主机不接收icmp数据包。iptables -F
删除自定义规则后,用A去pingB是可以ping通的。telnet 192.168.200.5
进行虚拟机B的账号密码登录。iptables -P INPUT DROP
拒绝一切数据包流入,这时A和C上均无法键入指令。iptables -A INPUT -p tcp -s 192.168.200.6 -j ACCEPT
开启A:192.168.200.6对本机TCP服务,并用iptables -L
查看规则。这时我们发现A应该是可以正常访问telnet服务的,但是C仍无法访问。iptables -F
和iptables -P INPUT ACCEPT
进行状态恢复。二.任务要求:配置Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问。
实验准备:准备三台实验用虚拟机,分别是A:kali,B:WinxP
虚拟机 | IP |
---|---|
A:kali | 192.168.200.6 |
B:Winxp | 192.168.200.4 |
过滤ICMP数据包操作过程:
允许传入回显请求
对号去掉,kali就ping不通了。telnet 192.168.200.2
进行虚拟机B的账号密码登录。snort -r /home/kali/listen.pcap -c /etc/snort/snort.conf -K ascii
对listen.pacp进行入侵检测。其中,指令中-K ascii
主要是为了指定输出log文件的编码为ASCII(默认为binary)。查看输出,我们可以看到检测出的数据包大部分为TCP数据包。vim /var/log/snort/alert
打开输出的日志文件,但此时显示不存在这个文件,通过显示所有的文件,采用cat /log/snort/alert.fast
,发现该文件就是报警日志文件,下次可以直接采用vim /var/log/snort/alert.fast
打开输出的日志文件,可以发现这个攻击是nmap发起的,当然还有很多其他的信息:源地址、目的地址等。Snort的日志一般位于:/var/log/snort/目录下,可以通过修改配置文件来设置Snort的报警形式。snort_inline
),首先使用su -
进行提权,然后使用vim /etc/init.d/rc.firewall
查看三链:黑名单、白名单和防护名单(FenceList)。iptables -t filter -L
来查看规则列表。不难发现,默认的规则OUTPUT、INPUT、FORWARD都已经被关闭了,取而代之的是一些自定义的规则。vim /etc/init.d/snort
打开Snort脚本文件。在指定网卡接口后,如果没有其他参数,将按照默认参数运行。比如默认不开启-A
模式,默认使用/etc/snort/snort.conf
(默认目录config文件)、eth0、二进制模式保存log文件等。vim /etc/init.d/hw-snort_inline
打开Snort_inline脚本文件,可以观察到实际运行的参数,以及在最前面定义的参数。chkconfig --list | grep[服务]
来查询当前服务是不是开启的。chkconfig
命令主要用于检查设置系统的各种服务。我们发现防火墙和NIPS(snort_inline)是跟随系统启动的,并且开机自动配置刚才的脚本文件。NIDS是需要手动启动的。vim /etc/honeywall.conf
打开honeywall配置文件,这个里面可以看到很多东西:之前安装roo时配置的IP地址、白名单黑名单的位置、snort规则更新的地方等。我们可以看到Oinkmaster字样,通过查询,这个果然是个自动更新的软件。通过观察,我们发现自动更新是默认关闭的。vim /var/log/snort/alert
打开输出的日志文件时,显示不存在该文件。ls -R
列出文件名,用cat /log/snort/alert.fast
打开日志文件。问题2解决方案: