Chinaunix首页 | 论坛 | 博客
  • 博客访问: 273601
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 276
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-28 23:52
文章分类

全部博文(72)

文章存档

2017年(20)

2014年(52)

分类: LINUX

2014-10-16 16:55:30

状态防火墙,即可以根据连接状态来进行报文处理的防火墙。

 

应用场景

当想拒绝外部网络主动连接内网,但同时又允许内网主动和外网发起通信,这样防火墙应该放行外网的回应报文,这种情况下该防火墙非常有用。

 

比如,防火墙只开放了目的端口是80的访问。当内网主机使用源端口1234访问外网web服务器时,防火墙放过,当web服务器回应该请求时,目的端口是1234。这样该回应到达防火墙就被拦截了,无法通过。

使用状态防火墙后,当内网使用源端口1234访问外网web服务器的报文到达防火墙时,防火墙会记录该连接记录,把它加入到防火墙内的连接状态表中。当外网web服务器的回应报文到达防火墙后,会先在防火墙的连接状态表里查找,发现该回应的请求连接是有记录的,防火墙就可以根据rule放行该回应了。

 

TCP这种面向连接的协议,源和目的的连接终止时,状态防火墙通过检查TCP头的控制标记注意到这个过程,并动态地将该连接从状态表中删除。

 

UDPICMP不是面向连接的协议,无法通过报文来判断连接是否终止。状态防火墙会把将UDP流量看成是有连接的,通过在状态表中设置一个定时器,来定期的老化删除一些无用连接。

 

期望连接:

一些协议,连接时会分为控制连接和数据连接,我们把数据连接称为是控制连接的期望连接。

我们以tftp协议为例来说明一下期望连接

 

 

如果,客户端先发起连接,使用熟知的69端口。因为69端口是分给了tftp server的,tftp server接收到连接请求后,会自己申请一个server主机上未用的端口1235(因为tftp server69端口还需要接收其他client发来的连接请求,所有不能使用69来传输数据),给tftp client发送回应。以后clientserver就使用端口1235来进行通信了。

 

现在来看,上面连接是两条不同的连接。我们把第二条连接是其一条连接的期望连接。

 

比如防火墙上只放开了目的端口号69的访问,当内网访问外网的tftp server时,回应报文就会被拦截,导致tftp 功能失效。状态防火墙提出期望连接,当回应报文根据目的端口号发现该回应是已存在连接的期望连接,防火墙放过该回应报文,这样tftp功能OK

 

做个实验:

在一台主机上配置如下规则:

iptables  -P  INPUT DROP   //丢弃所有到本机的报文

iptables -A INPUT -p udp --dport 69 -j ACCEPT //放行目的端口69的报文

 

这时把该主机当tftp client,从tftp server下载东西是无法下载的。

iptables -A INPUT -m conntrack --ctstatus EXPECTED -j ACCEPT//放行期望连接

这时tftp功能OK

 

 

上面介绍了状态防火墙,以及期望连接。现在我们来看看Netfilter是怎么实现状态防火墙的功能。

 

Ipv4 Netfilter 的状态防火墙实现的基础是IP conntrack,并且结合扩展match  conntrack,完成了整个状态防火墙的功能。


结合上面的说明,我们先来归纳一下Netfilter中连接跟踪需要实现哪些功能。

1、需要一张连接状态表,来存放连接记录

2、连接状态表中,需要有定时的垃圾回收机制

3、根据报文进行连接状态的建立及对已有连接状态的更新

4、期望连接的建立和关联

5、在连接跟踪上需要提供易于扩展的接口,来实现用户自定义的一些功能。

(未完待续)

阅读(870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~