Netfilter的Mangle机制

来源:互联网 发布:益盟爱炒股软件 编辑:程序博客网 时间:2024/06/05 18:34

Mangle是一个比较容易被人忽略的机制,而且Mangle的使用机会并不是很多,但如果需要时又不懂Mangle机制,也是件很麻烦的事,在此还是要说明一下Mangle机制。

Mangle通过标记特定的IP数据流后,为Filter、NAT和、路由、Queue提供标记后的IP数据流。

Mangle特点

不管是QoS、防火墙、nat规则和路由,在许多特殊的应用中都会使用Mangle标记(如routingmark、connection-mark、packet-mark)

Mangle在RouterOS中起到一个标记和分类的作用;

掌握RouterOS的高级应用,必须了解Mangle在RouterOS中的运用原理;

理解了Mangle,也就理解了路由、防火墙和QoS的应用。

当一个数据包“穿过”防火墙时,我们可以通过Mangle的机制来修改数据包的内容,至于修改范围有多大?就得看Mangle机制里模块的支持程度。目前支持Mangle机制的模块并不多,所以我们的选择范围也不大,为什么需要修改路过防火墙数据包的内容呢?下面将用两个示例来说明Mangle目前能提供的功能及用途。

修改IP包头的TTL值:

由于每一种操作系统所生成的数据包的IP包头内TTL的默认值都不一样,因此我们只需要通过ping这个命令,就可检查出某一台主机所使用的操作系统是什么。为了增加黑客的入侵难度,可以修改所有由Linux主机所发送的数据包,将这些数据包内的TTL值改为128,让黑客误以为是Windows操作系统;也可以将所有由Windows操作系统所送出的数据包TTL值改为64,让黑客误以为是Linux系统。

修改IP包头的DSCP值或对特定的数据包设置特征:

在网络应用中,有时对某些特定通信协议会有特别的需求。例如,在网络电话的应用环境里,我们会希望“不管网络多么拥塞,VoIP的数据包都要能在不延迟的情况下发送出去”。因此就有了QOS(Quality of Service)机制,QOS机制可以让我们在有限的带宽中,有效分配不同的带宽给不同的协议来使用。如图2-43所示,总带宽是1.5MB/s,我们可以将其分为几部分:512KB/s给HTTP协议来使用、384KB/s给SMTP协议使用、256KB/s给Voice的数据包使用,最后剩下来的带宽则留给未定义的协议。


 
图2-43 QOS带宽分配图

QOS机制是由两个不同部分组成,其一为“数据包分类器”,其二为“带宽分配器”。如图2-44所示,当一个数据包进入“数据包分类器”之后,数据包即会被加以分类,被分类后的数据包接着进入“带宽分配器”,再由带宽分配器来决定各类数据包可以使用多少网络带宽,问题是如何分类数据包呢?我们至少可以运用Mangle机制中的两个模块来达到此目的,如下。

通过IP包内的DSCP值来分类:

我们可以通过Mangle机制来修改IP包内的DSCP值,例如,把DSCP值改为0000-01,接着在“带宽分配器”上设置,如果数据包内的DSCP值为0000-01的话,就给予64KB/s的带宽。

使用Mangle机制为数据包标示识别码:

Mangle机制可以为特定的数据包来标示不同的识别码,例如,如果数据包内的SourcePort为80,就标示该数据包的识别码为80。接着在“带宽分配器”上设置,如果数据包的识别码为80,就给予512KB/s的带宽,如此也可以达到带宽分类的目的。


 
图2-44 QOS结构图

图2-45是Mangle机制的结构图,从图中不难发现,Mangle机制的链很多,但你必须要了解,不管是filter、nat、mangle或是稍后会提到的raw机制,它们的链都各自独立。因此,filter机制的INPUT链内容与Mangle机制的INPUT链内容绝对是不相同的,请务必认清这一点。而数据包在图2-45中的处理方式则与filter及NAT相同,因此如果想要改变本机进程所生成的数据包内的DSCP值,就必须将规则放置于OUTPUT链之中,或是POSTROUTING链之内都可以达到我们的目的,因为本机进程所产生的数据包,除了会流经OUTPUT链之外,也会经过POSTROUTING链,因此,这两个链都可供使用。

 
图2-45 Mangle的结构

最后以“修改数据包的DSCP值”为例进行讨论。我们希望在QOS机制中将SSH协议的数据包设置为较为优先传输的数据包,因此使用Mangle机制来修改数据包内的DSCP值。在尚未修改DSCP值之前,先抓取几个数据包来分析,图2-46即为数据包IP包头的内容,其中表示.的位置就是DSCP值,默认值为0000-00。
 

图2-46 Linux系统默认的DSCP值


接着在本机使用Mangle机制修改本机进程所产生的数据包,并且设置所要修改的数据包为SSH协议的数据包,而修改后的DSCP值为43,其规则如下。


iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43

图2-47为使用Mangle机制修改后的数据包,并且我们从标示.的位置看到DSCP值已被修改为1010-11,而1010-11的十进制刚好就是43,以上即可证明Mangle机制真的可以修改数据包的内容。  



图2-47 修改后的DSCP值

原创粉丝点击