实验四 Iptables防火墙
(一)教学要求
Iptables 是Linux提供的一个非常优秀的防火墙工具,学生通过该实验,应掌握Iptables工作机理,了解Iptables包过滤命令及规则,学会利用Iptables对网络事件进行审计,了解Iptables NAT工作原理及实现流程,学会利用Iptables+squid实现Web应用代理。
(二) 主要知识点
重点:
1. Iptables工作机理:
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
1 / 12
2.Iptables NAT工作原理及实现流程:
完成nat的实现,数据要经过prerouting—forword--postrouting这3个链。
首先进入prerouting,发现不是本网段的地址,而后开始查找路由表(查找路由的过程在prerouting和forword之间),于是经过forword链进行转发,在通过postrouting时进行NAT转换。在这个流程中,NAT转换的步骤在postrouting链上实现,之所以不再prerouting上做nat是因为数据包在进来之前,还不知道是本网段地址还是地址。
在DNAT中,NAT要在prerouting链上做。在数据进入主机后,路由选择过程是在prerouting和forword之间的,所以应该先做地址转换之后,再进行路由选择,而后经过forword,最后从postrouting出去。
Iptables规则简介:
Iptable [-t表] 命令选项 [连名] 匹配条件 [-j 动作]
常用命令选项如下:
-A 【append】 在指定的连的结尾添加规则
-D 【delete】删除指定连中的规则,可以按规则号或规则内容匹配
-I 【insert】插入一条新规则,默认是在最前面
-R 【replace】 替换某一条规则
2 / 12
-L 【list】列出所有规则
-F 【flush】清空所有规则
-N 【new】自定义一条规则连
-X 【--delete-chain】 删除用户自定义规则连
-P 【policy】设置默认策略
-n 【numeric】以数字方式显示,如:显示ip,但不显示主机名
-v 【verbose】显示详细信息
-V 【version】查看iptable的版本信息
--line-number 查看规则连是,显示列表号
-Z 清空计数器值
(三)实验内容
1. 对来自某个源、到某个目的地或具有特定协议类型的数据包进行转发、丢弃等具体操作,实现对数据包的过滤并保存过滤规则。
实现:
3 / 12
我们以最常见的ping命令来做这个实验:
Ping命令简介:PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages Protocol)即因特报控制协议;回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令。
Ping原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
实验目标:可以PING别人,但是别人不能PING自己。
实验原理:防火墙的规则都是双向的,而且ping使用的是ICMP报文,他的ICMP type 为8,而它的响应ICMP报文的type为0,我们要实现以上功能,只需要让ICMP type 8 报文进不来,但出得去;让ICMP type 0 报文出不去,但进得来就可以了。
实验:
1) 初始准备:
Ip:
Ping情况:
4 / 12
外部:
自己:
规则表:
默认接收,其余为空
5 / 12
2) 设置默认规则:
首先将出入都设为默认拒绝所有报文(为了不影响其他服务,主要为ICMP报文)
Ping情况:自己
外部:
6 / 12
3) 实现功能的规则配置:
规则:
规则表:
4) 检验结果:
7 / 12
5) 保存修改:
6) 首先,保存现有的规则:iptables-save > /etc/iptables.rules
7) 然后新建一个bash脚本,并保存到/etc/network/if-pre-up.d/目录下:#!/bin/bash
8) iptables-restore < /etc/iptables.rules
9) 这样,每次系统重启后iptables规则都会被自动加载。!注意:不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。
10) # 保存iptables规则
11) service iptables save
12) # 重启iptables服务
13) service iptables stop
8 / 12
14) service iptables start
15) 查看当前规则:
16) cat /etc/sysconfig/iptables
2. 配置ICMP规则,防止ping攻击。以分钟为周期,允许正常通过5个ICMP数据包,超过之后仅允许每10秒通过一个ICMP包。
实现:
实验原理:limit-burst是个初始值,匹配次数过了这个初始值,之后的就由limit xxx/s来控制了。
实验:
1) 设置默认规则:
首先将出入都设为默认拒绝所有报文(主要为ICMP报文)
limit-burst:5,匹配次数过了这个初始值,之后的就由limit 6/minute来控制了。
9 / 12
2) 检验结果:
(四)思考题
1.如何设置Iptables 防火墙进行记录?
iptables的日志(log)由syslogd纪录和管理。初始存放在 /var/log/messages里面。自动采取循环纪录(rotation)的方式记录。
iptables XXXXXXXX -j LOG
10 / 12
2.如何使Iptables 将日志传递到系统日志文件,而不是控制终端?
Iptables的man参考页中提到: 我们可以使用iptables在linux内核中建立, 维护和检查IP包过滤规则表. 几个不同的表可能已经创建, 每一个表包含了很多内嵌的链, 也可能包含用户自定义的链.
Iptables 默认把日志信息输出到/var/log/messages文件. 不过一些情况下修改日志输出的位置.通过修改或使用新的日志文件。
输出iptables日志信息到一个指定文件的方法
打开你的/etc/syslog.conf文件:# vi /etc/syslog.conf
在文件末尾加入下面一行信息kern.warning /var/log/iptables.log
保存和关闭文件.重新启动syslogd(如果你使用Debian/Ubuntu Linux):
# /etc/init.d/sysklogd restart
另外, 使用下面命令重新启动syslogd:# /etc/init.d/syslog restart
现在确认iptables使用了log-level 4参数(前面有一个log-prefix标志).
3.局域网里面有一台WEB服务器和一台DNS服务器,那要如何配置Iptables防火墙使得在局域网和广域网里都可以用域名来访问WEB服务器?
11 / 12
可以在防火墙上开通DNS代理功能,把你的域名添加到其中 对应的项目写成内网的地址,这样就可以访问了。
4.在内网里,如何利用Iptables防火墙多为规则策略来局域网里面的主机使用迅雷下载?比如,在我们校园网里,在网络比较空闲时完全开放迅雷下载,在网络繁忙时迅雷下载?
Iptables -m –timestart hh:mm:ss timestop hh:mm:ss 时间对服务器的访问。
12 / 12