RedHat 5.4 RHCE iptables & nat学习笔记

  1. 云栖社区>
  2. 博客>
  3. 正文

RedHat 5.4 RHCE iptables & nat学习笔记

技术小胖子 2017-11-10 01:01:00 浏览1221
展开阅读全文

 

目标:一、一个SNAT和DNAT的实例。

        二、SNAT和DNATIptables的原理和命令参数语法

 1、IP说明:

eth0: 32.1.38.254(内网) eth1: 192.168.1.254(外网) ——主机名:iptables.wqmsl.com 

32.1.38.88 ——防火墙后端客户机

32.1.38.200——WEB服务器

2、前期准备

   更改主机名称(更改三处):1、hostname更改,2、hosts更改,3、/etc/sysconfig/network

更改IP地址和dns地址信息如下:

wps_clip_image-14450

wps_clip_image-2100

3、所需软件包如下

wps_clip_image-4508

 

一、下面我们来看一下实验的总拓扑图。

wps_clip_image-13898

我们首先启动iptables防火墙

wps_clip_image-17598

设置防火墙为路由模式,编辑/etc/sysctl.conf内net.ipv4.ip_forward = 0值改成1

wps_clip_image-9816

或者可以修改/proc/sys/net/ipv4/ip_forward的内容为1,但是重启之后失效,所以建议还是修改sysctl.conf的参数并更新内核。

wps_clip_image-4950

wps_clip_image-11494

更新系统内核参数sysctl -p(一定要用这个参数哦)

wps_clip_image-15562

此时我们的防火墙已经有路由的功能了

我们直接来做实验,暂时不讲iptables的原理和命令语法了,在实验结束再说这个。

删除策略

iptables -F:清空所选链中的规则,如果没有指定链则清空指定表中所有链的规则

iptables -X:清除预设表filter中使用者自定链中的规则

iptables -Z:清除预设表filter中使用者自定链中的规则

wps_clip_image-15573

设置预设策略

wps_clip_image-7483

我使用的ssh链接的服务器,所以我已经添加了22端口的策略

wps_clip_image-19299

设置默认策略为关闭filter表的INPPUT及FORWARD链,开启OUTPUT链,nat表的三个链PREROUTING、OUTPUT、POSTROUTING全部开启。

下面我们配置SNAT,配置SNAT命令基本语法

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.1.254 外网接口为固定IP

iptables -t nat -A POSTROUTING -o eth1 -s 32.1.38.0/24 -j MASQUERADE ——用于外网接口为动态IP地址,如ppoe接入方式。

解析:

   iptables 是命令本身

   -t 是执行表,iptables有两个表,一个是filter:过滤的表

   一个是nat,就是NAT表

   然后-A,-A的意思就是添加一条链

   这里添加的链是POSTROUTING链,就是源NAT

   -o 是出去的公网的网卡设备,我们使用的是eth1网卡

   -s 是源地址,我们设置内网的192.168.8.0/24网段

   -j是动作,MASQUERADE 动态源地址转换(动态IP的情况下使用)

   如果我们使用的静态外网地址,就可以这样写

wps_clip_image-16400

下面设置一下FORWARD的rule,允许后端主机查询DNS和浏览网页,规则如下:

这是一个基本的上网规则,最后来年两条我们在最后讲解,它是一个跟踪状态的规则,主要是因为我们去用目的为53端口去查询DNS记录的时候,服务器返回的信息并不是也是53端口,它是1024—65535直接的任意端口,所以使用跟踪状态会方便一些。

iptables -A FORWARD -p tcp --dport 80 -j ACCEPT

iptables -A FORWARD -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT

wps_clip_image-23822

有时我们会进行网络测试,这时我们要允许echo-reply(报头代码为0)进入我们的防火墙

wps_clip_image-27570

这时我们从防火墙可以ping任意地址,但是其他主机是ping不通我们的防火墙,尤其是针对外网,让外网用户不知道我们的存在,一般我们是直接拒绝,或者是丢弃icmp报文代码为8的icmp包,这样就不回应外部主机的ping请求了。

wps_clip_image-19163

内部ping一下防火墙,返回超时了。

wps_clip_image-6226

我们在防火墙上面ping后端主机和外网主机,如下图,完全是可以的

wps_clip_image-2701

我们在外网主机上面ping一下防火墙试试,也是返回超时

wps_clip_image-4525

因为后端主机属于内网,我们经常会用来测试和网关是否已经连通,所以我们加一条策略,允许内部主机ping网关(eth0网卡),因为后端主机属于可信赖区域,所以,你可以添加策略允许所有数据从eth0进入(INPUT),我这里就开启关键的几个端口和协议,例如:22端口、icmp等其他的拒绝掉。

wps_clip_image-22985

如上图添加这条策略后,后端主机就可以去ping自己的网关了

wps_clip_image-17453

以上的操作完成之后,后端主机应该是可以上网了,我们去试试

wps_clip_image-27462

在后端主机是完全可以解析到互联网地址的

wps_clip_image-30683

如果需要接收邮件还需要开启如下的端口,-m multiport 匹配多个端口

iptables -A FORWARD -p tcp -m multiport --dport 25,110,143,993,995 -j ACCEPT

wps_clip_image-28270

我更改一下POSTROUTING的规则,使其外接口为动态IP地址

wps_clip_image-4081

为了模拟ppoe/dhcp的动态IP,我手动更改一下IP地址试试看后端主机是不是还能够上网

wps_clip_image-19744

IP 改为192.168.1.45,但还是没有任何影响,可以正常上网

wps_clip_image-23582

这里有一点要注意的就是:MASQUERADE和SNAT作用一样的,都是提供源地址转换的操作,MASQUERADE是针对外部接口为动态IP地址来设置滴,不需要使用--to-source指定转换的IP地址。如果网络采用的动态获取IP地址的连接,比如ADSL拨号、DHCP连接等,那么建议使用MASQUERAD

  还有需要注意的一点就是,我们使用ppoe和DHCP接入互联网的时候不要在网络接口的配置文件、network文件里写上网关,否则肯能会出现两个网关,容易出错。

下面要做的就是DNAT

我们内部有一个WEB服务器,外网用户需要访问,其实就是内网发布服务器到互联网,此时就需要做DNAT了,一条命令就搞定哦

配置DNAT命令基本语法

iptables -t nat -A PREROUTING -i 网络接口 -p 协议 --dport 端口 -j DNAT --to  IP地址:端口

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 32.1.38.200:80

eth1为防火墙公网接口,这个规则必须在PREROUTING里的

如果要求与 80 联机的封包转递到 内网8080 这个 port的话,添加如下策略

iptables -t nat -A PREROUTING -p tcp  --dport 80  -j REDIRECT --to-ports 8080

例如:使用 8080 这个 port 来启动 WWW ,但是别人都以 port 80 来联机,所以,这样可以使用上面的方式来将对方对您防火墙的联机传递到内网的8080 端口WEB服务器了。

添加策略后,看看现有的策略:

wps_clip_image-6260

在内网客户机访问内部WEB服务器的网站,直接使用的是内部WEB服务器的IP地址

wps_clip_image-12464

我们在外网访问,这个时候我们访问的地址应该是防火墙的eth1(外部网卡)的地址,我们这里不涉及DNS,所以就直接用IP地址来访问,如下:我在IP为192.168.1.88的主机上访问,可以成功的访问内部WEB服务器,说明我的内部WEB服务器发布成功了

wps_clip_image-9393

保存iptables配置

iptables-save

重定向规则到nat.ipt文件

iptables-save > nat.ipt

恢复iptables配置

iptables-restore < nat.ipt

服务或系统重启后依然生效

service iptables save

下面说一下icmp协议中的ping

ICMP类型:echo reply 响应应答——0 ping 其他主机的时候返回来的信息

           echo request 响应请求——8 其他主机ping本机的时候对其他主机的响应回答,一般隐藏此类报文,公网主机不知道我们的存在

到这里我们的DNAT和SNAT的实验都做完了

 

 

 

*******************************************************************************

二、Iptables的原理和命令参数语法

以下内容来自互联网资料进行整理合并,非本人原创

*******************************************************************************

Iptables原理

 

现在防火墙主要分以下三种类型:包过滤、应用代理、状态检测

包过滤防火墙:现在静态包过滤防火墙市面上已经看不到了,取而代之的是动态包过滤技术的防火墙

代理防火墙:因一些特殊的报文攻击可以轻松突破包过滤防火墙的保护,比如大家知道的SYN攻击、ICMP洪水攻击,所以以代理服务器作为专门为用户保密或者突破访问限制的数据转发通道的应用代理防火墙出现了哈~其使用了一种应用协议分析的新技术。

状态检测防火墙:其基于动态包过滤技术发展而来,加入了一种状态检测的模块,进一点发展了会话过滤功能,会话状态的保留是有时间限制的,此防火墙还可以对包的内容进行分析,从而避免开放过多的端口。

netfilter/iptables IP数据包过滤系统实际上由netfilter和iptables两个组件构成。netfilter是集成在内核中的一部分,其作用是定义、保存相应的规则,而iptables是一种工具,用来修改信息的过滤规则及其他配置,我们可以通过iptables来设置一些适合我们企业需求环境的规则哈~,而这些规则会保存在内核空间之中。

netfilter是Linux核心中的一个通用架构,其提供了一系列的表(tables),每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。实际上netfilter是表的容器,表是链的容器,而链又是规则的容器。

filter 表的系统 chain: INPUT,FORWAD,OUTPUT

wps_clip_image-25919

nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT

wps_clip_image-5586

mangle 表的系统 chain: PREROUTING,OUTPUT

wps_clip_image-5525

filter:主要跟 Linux 本机有关,这个是预设的 table ! 

  INPUT:主要与封包想要进入我们 Linux 本机有关,过路由表后目的地为本机 

  OUTPUT:主要与我们 Linux 本机所要送出的封包有关; 

  FORWARD:这个咚咚与 Linux 本机比较没有关系,他可以封包『转递』到后端的计算机中,与 nat 这个 table 相关性很高。

nat:这个表格主要在用作来源与目的之 IP 或 port 的转换, 与 Linux 本机较无关,主要与 Linux 主机后的局域网络内的计算机较有相关。

  PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT),就是数据包进入路由表之前 

  POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE),发送到出口网卡接口之前

  OUTPUT:与发送出去的封包有关,:由本机产生,向外转发

mangle:这个表格主要是与特殊的封包的路由旗标有关

早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。 

各个与链的相关性可以使用下图来表示:

wps_clip_image-26953

mangle不常使用,所以我们去掉它之后的示意图如下:

wps_clip_image-7905

SNAT, DNAT 的封包传送解析

SNAT 主要是应付内部 LAN 连接到 Internet 的使用方式,至于 DNAT 则主要用在内部主机想要架设可以让 Internet 存取的服务器,实际上就是发布内网的服务器到公网上。

下面看一下SNAT和DNAT的工作的原理和过程

SNAT封包传出示意图:

wps_clip_image-12015

如上图所示,在客户端 192.168.1.100 这部主机要联机到 http://tw.yahoo.com 去时,他的封包表头会如何变化?

1.  客户端所发出的封包表头中,来源会是 192.168.1.100 ,然后传送到 NAT 这部主机; 

2.  NAT 这部主机的内部接口 (192.168.1.2) 接收到这个封包后,会主动分析表头资料, 因为表头

数据显示目的并非 Linux 本机,所以开始经过路由, 将此封包转到可以连接到 Internet 的

Public IP 处; 

3.  由于 private IP 与 public IP 不能互通,所以 Linux 主机透过 iptables 的 NAT table 内的

Postrouting 链将封包表头的来源伪装成为 Linux 的 Public IP ,并且将两个不同来源

(192.168.1.100 及 public IP) 的封包对应写入暂存内存当中, 然后将此封包传送出去了。

SNAT封包接受(传回)示意图:

wps_clip_image-25463

4.  在 Internet 上面的主机接到这个封包时,会将响应数据传送给那个 Public IP 的主机; 

5.  当 Linux NAT 主机收到来自 Internet 的响应封包后,会分析该封包的序号,并比对刚刚记录到

内存当中的数据, 由于发现该封包为后端主机之前传送出去的,因此在 NAT Prerouting 链中,

会将目标 IP 修改成为后端主机,亦即那部 192.168.1.100,然后发现目标已经不是本机 (public

IP), 所以开始透过路由分析封包流向; 

6.  封包会传送到 192.168.1.2 这个内部接口,然后再传送到最终目标 192.168.1.100 机器上去! 

DNAT封包传送示意图:

wps_clip_image-29235

假设我的内部主机 192.168.1.210 启动了 WWW 服务,这个服务的 port 开启在 port

80 , 那么 Internet 上面的主机 (61.xx.xx.xx) 要如何连接到我的内部服务器呢?当然啦, 还是得要透过 Linux NAT 主机!所以这部 Internet 上面的机器必须要连接到我们的 NAT 的 public IP 才行。

1.外部主机想要连接到目的端的 WWW 服务,则必须要连接到我们的 NAT 主机上头; 

2.我们的 NAT 主机已经设定好要分析出 port 80 的封包,所以当 NAT 主机接到这个封包后, 会将目标 IP 由 public IP 改成 192.168.1.210 ,且将该封包相关信息记录下来,等待内部服务器的响应; 

3.上述的封包在经过路由后,来到 private 接口处,然后透过内部的 LAN 传送到192.168.1.210 上头! 

4.  192.186.1.210 会响应数据给 61.xx.xx.xx ,这个回应当然会传送到 192.168.1.2 上头去; 

5.  经过路由判断后,来到 NAT Postrouting 的链,然后透过刚刚第二步骤的记录,将来源 IP 由 192.168.1.210 改为 public IP 后,就可以传送出去了!

下图为iptables的语法图:

wps_clip_image-29107

IPTABLES 语法:

iptables从其使用的三个表(filter、nat、mangle)而得名,

对包过滤只使用 filter 表, filter还是默认表,无需显示说明.

操作命令: 即添加、删除、更新等。

链:对于包过滤可以针对filter表中的INPUT、OUTPUT、FORWARD链,也可以操作用户自定义的链。

规则匹配器:可以指定各种规则匹配,如IP地址、端口、包类型等。

目标动作:当规则匹配一个包时,真正要执行的任务,

常用的有:  ACCEPT 允许包通过 、 DROP 丢弃包

一些扩展的目标还有:

  REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知

  LOG 包有关信息记录到日志

  TOS 改写包的TOS值

常用操作命令:

-A 或 -append 在所选链尾加入一条或多条规则

-D 或 -delete 在所选链尾部删除一条或者多条规则

-R 或 -replace 在所选链中替换一条匹配规则

-I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部.

-L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.

-F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.

-N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.

-X 或 -delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链.

-P 或 -policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使规则链中的最后一条规则,用-L显示时它在第一行显示.

-C 或 -check 检查给定的包是否与指定链的规则相匹配.

-Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零.

-h 显示帮助信息.

******************************************************************************

常用匹配规则器:

-p , [!] protocol 指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议外的所有协议.

-s [!] address[/mask] 指定源地址或者地址范围.

-sport [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.

-d [!] address[/mask] 指定目的地址或者地址范围.

-dport [!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中

的名子.

-icmp-type [!] typename 指定匹配规则的ICMP信息类型(可以使用 iptables -p icmp -h 查看有效的ICMP类型名)

-i [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可以使用"!"来匹配捕食指定接口来的包.参数interface是接口名,如 eth0, eht1, ppp0等,指定一个目前不存在的接口是完全合法的,规则直到接口工作时才起作用,折中指定对于PPP等类似连接是非常有用的."+"表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD和PREROUTING链是合法的.

-o [!] interface name[+] 匹配规则的对外网络接口,该选项只针对于OUTPUT,FORWARD,POSTROUTING链是合法的.

[!] --syn 仅仅匹配设置了SYN位, 清除了ACK, FIN位的TCP包. 这些包表示请求初始化的TCP连接.阻止从接口来的这样的包将会阻止外来的TCP连接请求.但输出的TCP连接请求将不受影响.这个参数仅仅当协议类型设置为了TCP才能使用. 此参数可以使用"!"标志匹配已存在的返回包,一般用于限制网络流量,即只允许已有的,向外发送的连接所返回的包.

如何制定永久规则集:

/etc/sysconfig/iptables 文件是 iptables 守护进程调用的默认规则集文件.

可以使用以下命令保存执行过的IPTABLES命令:

/sbin/iptables-save >  /etc/sysconfig/iptables

要恢复原来的规则库,可以使用:

/sbin/iptables-restore &lt;  /etc/sysconfig/iptables

iptables命令和route等命令一样,重启之后就会恢复,所以:

[root@rhlinux root]# service iptables save

将当前规则储存到 /etc/sysconfig/iptables:                 [  确定  ]

令一种方法是 /etc/rc.d/init.d/iptables 是IPTABLES的启动脚本,所以:

[root@rhlinux root]# /etc/rc.d/init.d/iptables save

将当前规则储存到 /etc/sysconfig/iptables:                 [  确定  ]

以上几种方法只使用某种即可.

若要自定义脚本,可直接使用iptables命令编写一个规则脚本,并在启动时执行:

例如若规则使用脚本文件名/etc/fw/rule, 则可以在/etc/rc.d/rc.local中加入以下代码:

if [-x /etc/fw/rule]; then /etc/fw/sule; fi;

这样每次启动都执行该规则脚本,如果用这种方法,建议NTSYSV中停止IPTABLES.

******************************************************************************

实例:

链基本操作:

# iptables -L -n

(列出表/链中的所有规则,包过滤防火墙默认使用的是filter表,因此使用此命令将列出filter表中所有内容,-n参数可加快显示速度,也可不加-n参数。)

iptables -F

(清除预设表filter中所有规则链中的规则)

iptables -X

(清除预设表filter中使用者自定义链中的规则)

ptables -Z

(将指定链规则中的所有包字节计数器清零)

******************************************************************************

设置链的默认策略,默认允许所有,或者丢弃所有:

# iptables -P INPUT ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -P FORWARD ACCEPT

(以上我们在不同方向设置默认允许策略,若丢弃则应是DROP,严格意义上防火墙应该是DROP然后再允许特定)

******************************************************************************

向链中添加规则,下面的例子是开放指定网络接口(信任接口时比较实用):

# iptables -A INPUT -i eth1 -j ACCEPT

# iptables -A OUTPUT -o eth1 -j ACCEPT

# iptables -A FORWARD -i eth1 -j ACCEPT

# iptables -A FORWARD -o eth1 -j ACCEPT

******************************************************************************

使用用户自定义链:

# iptables -N brus

(创建一个用户自定义名叫brus的链)

# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP

(在此链中设置了一条规则)

# iptables -A INPUT -s 0/0 -d 0/0 -j brus

(向默认的INPUT链添加一条规则,使所有包都由brus自定义链处理)

******************************************************************************

基本匹配规则实例:

匹配协议:

iptables -A INPUT -p tcp

(指定匹配协议为TCP)

iptables -A INPUT -p ! tcp

(指定匹配TCP以外的协议)

匹配地址:

iptables -A INPUT -s 192.168.1.1

(匹配主机)

iptables -A INPUT -s 192.168.1.0/24

(匹配网络)

iptables -A FORWARD -s ! 192.168.1.1

(匹配以外的主机)

iptables -A FORWARD -s ! 192.168.1.0/24

(匹配以外的网络)

匹配接口:

iptables -A INPUT -i eth0

iptables -A FORWARD -o eth0

(匹配某个指定的接口)

iptables -A FORWARD -o ppp+

(匹配所有类型为ppp的接口)

匹配端口:

iptables -A INPUT -p tcp --sport www

iptables -A INPUT -p tcp --sport 80

(匹配单一指定源端口)

iptables -A INPUT -p ucp --dport 53

(匹配单一指定目的端口)

iptables -A INPUT -p ucp --dport ! 53

(指定53端口以外)

iptables -A INPUT -p tcp --dport 22:80

(指定端口范围,这里我们实现的是22到80端口)

******************************************************************************

指定IP碎片的处理:

# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT

# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT

# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

ACCEPT     tcp  --  192.168.1.0/24       192.168.1.234      tcp dpt:http

ACCEPT     tcp  -f  192.168.1.0/24       192.168.1.234      tcp dpt:http

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

******************************************************************************

设置扩展的规测匹配:

(希望获得匹配的简要说明,可使用: iptables -m name_of_match --help)

多端口匹配扩展:

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80

(匹配多个源端口)

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80

(匹配多个目的端口)

iptables -A INPUT -p tcp -m multiport --port 22,53,80

(匹配多个端口,无论是源还是目的端口)

******************************************************************************

TCP匹配扩展:

iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN

(表示SYN、ACK、FIN的标志都要被检查,但是只有设置了SYN的才匹配)

iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK

(表示ALL:SYN、ACK、FIN、RST、URG、PSH的标志都被检查,但是只有设置了SYN和ACK的才匹配)

iptables -p tcp --syn

(选项--syn是以上的一种特殊情况,相当于“--tcp-flags SYN,RST,ACK SYN”的简写)

******************************************************************************

limit速率匹配扩展:

# iptables -A FORWARD -m limit --limit 300/hour

(表示限制每小时允许通过300个数据包)

# iptables -A INPUT -m limit --limit-burst 10

(--limit-burst指定触发时间的值(默认为5),用来比对瞬间大量数据包的数量。)

(上面的例子用来比对一次同时涌入的数据包是否超过十个,超过此上限的包将直接被丢弃)

# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3

(假设均匀通过,平均每分钟3个,那么触发值burst保持为3。如果每分钟通过的包的数目小于3,那么触发值busrt将在每个周期(若每分钟允许通过3个,则周期数为20秒)后加1,但最大值为3。每分钟要通过的包数量如果超过3,那么触发值busrt将减掉超出的数值,例如第二分钟有4个包,那么触发值变为2,同时4个包都可以通过,第三分钟有6个包,则只能通过5个,触发值busrt变为0。之后,每分钟如果包数量小于等于3个,则触发值busrt将加1,如果每分钟包数大于3,触发值busrt将逐渐减少,最终维持为0)

(即每分钟允许的最大包数量等于限制速率(本例中为3)加上当前的触发值busrt数。任何情况下,都可以保证3个包通过,触发值busrt相当于是允许额外的包数量)

******************************************************************************

基于状态的匹配扩展(连接跟踪):

每个网络连接包括以下信息:源和目的地址、源和目的端口号,称为套接字对(cocket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些叫做状态(stateful)。能够监测每个连接状态的防火墙叫做状态宝过滤防火墙,除了能完成普通包过滤防火墙的功能外,还在自己的内存中维护一个跟踪连接状态的表,所以拥有更大的安全性。

其命令格式如下:

iptables -m state --state [!] state [,state,state,state]

state表示一个用逗号隔开的的列表,用来指定的连接状态可以有以下4种:

NEW:该包想要开始一个连接(重新连接或将连接重定向)。

RELATED:该包属于某个已经建立的连接所建立的新连接。例如FTP的数据传输连接和控制连接之间就是RELATED关系。

ESTABLISHED:该包属于某个已经建立的连接。

INVALID:该包不匹配于任何连接,通常这些包会被DROP。

例如:

# iptables -A INPUT -m state --state RELATED,ESTABLISHED

(匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包)

# iptables -A INPUT -m state --state NEW -i ! eth0

(匹配所有从非eth0接口来的连接请求包)

下面是一个被动(Passive)FTP连接模式的典型连接跟踪

# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

下面是一个主动(Active)FTP连接模式的典型连接跟踪

# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT

# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

******************************************************************************

日志记录:

格式为: -j LOG --log-level 7 --log-prefix "......"

# iptables -A FORWARD -m tcp -p tcp -j LOG

# iptables -A FORWARD -m icmp -p icmp -f -j LOG

# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG

# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"





     本文转自 wqmsl 51CTO博客,原文链接:http://blog.51cto.com/wqmsl/404283,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注