论坛风格切换切换到宽版
  • 787阅读
  • 4回复

[问题求助]iptables L7 howto 翻译第一版(恳请指正) [复制链接]

上一主题 下一主题
 
发帖
2037
C币
-235268
威望
387
贡献值
1
银元
0
铜钱
4662
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
这两天在研究iptables layer7的文档,窃以为这个模块会弥补iptables在应用层控制方面的一些短处,今天闲来无事,恰巧一位故人也提到了layer7这个东西,干脆花了大半天的.时间,.把howto翻译成了中文,呵呵,水平有限,意译而已,大家看了发现什么bug和.我联系阿.。。。(广告)

layer7 filt.er howto(广告)
注意:linux 2.6.9/10.和layer7会发生一个严重的内存泄露问题导致系统在几分钟之内down掉,看起来这好像是内核堆栈.的问题,在2.6.11登台之前,.还是用2.6.0-2.6.8.1的内核和L7 0.9.1一起工作吧            杀毒

目录

1、介绍

2、你需要得到什么

3、内核补丁

4、iptables补丁

5、协议定义

6、实务

1、介绍

L7是一个linux内核包分.类器,和其他的分类器不同,l7不仅仅看上去是对协议的端口定义,他的表达式和应用层协议匹.配,以此检验包使用的何种协议学习

因为l7对于处理器和内.存很敏感,我们建议当您存在下列.情况时才考虑使用l7    美容

*你需要匹配一些使用未预先定义的协议端.口(主要见于p2p.文件共享应用).

*你相信一些有意义的通讯使用了非标准的端..口(例如http协议使用1111端口)教育

符合以上两个问题的其中之一吗,好吧,l.7项目中有三个组成部分,一个内核补丁,一个iptables补丁,一个协议定义文.件,本文一.下部分就来解释你如何处理他们。服务器

2、你需要获取的:

*从ke.rnel..org得到2.4或者2.6的内核源代码    美容

*从n.etfilter.o.rg得到iptables的源代码<性病>

*我们的Layer7 补丁包

*我们的协议定义包

3、内核补丁

针对专家的缩写版:应用.我们的内核补丁,在netfilter中打开新.的匹配选项。电影

从Laye.r 7 paches包中选择适当的内核补丁,并给linux内核打补丁(请阅读包里面的read.m.e文件选择合适的文件)。或者根据你的需要设置其他内核版本。电影

打开EXPERIMENTAL(Device Drivers->;Networking support->;Networking Options->;Network packet filtering),接下来打开connection tracking(Network. packet fi.lte.ring->;IP:Netfilter Configuration->;Connection trac.king)。在同一屏,同样打开Connection tracking flow .accounting 和IP .tables support。           女人

打开Layer 7 match support,你需要打.开.其他一些Netfilter选项,比较显而易见的如Ftp support。如果你还.不太了解具体的选项含义,那么就打开所有的Layer 7 mach support服务器

向平常一样编译并安装新内核(我们.的代码会导致一个警告,不管它^_^),.重启,并加载合适的内核。             电子

如何给源代码树加载补丁。

下面给出.一个一般适用于任意内核源码的方法。首先把下载.得到的补丁源码解压投资

g.unzip layer7-kernel-patch-v.X.Y.Z.p.atch.gz    外汇

bunzip2 lay.er7-kernel-.patch-v.X.Y.Z.patch.bz2外贸

接下来打补丁,在源码.的根目录中:域名

patch -p1 < .layer7-kernel-patch.-vX.Y.Z.patch          婚庆

你也会.看到别人告诉你"gzip -cd ../patch.gz | patch -p1",这也.是管用的。学习

4、Iptables补丁

给专家的.缩写版本:应用我们的iptables补丁,这样添加:"-m layer7 --17proto [http.|ftp|etc...]"[成人用品]

使.用layer7 p.atches包中的补丁文件给iptables.代码打补丁,完成后,运行chmod +x extensions/ .layer7-test.

编译iptables,"make KERNEL_.DIR=/path/to/pathed/kernel"。接着用root身份运行"make install KERNEL_DIR.=/path/to/pathed/kernel"(确保在.运行这一步骤前已经给内.核打过补丁)。.

5、定义协议(模版文件)

那些文件告诉iptables 和内核如何把协议名.称对应到正则表达式,例如FTP表示为"^220[\09-\x0d -~*.ftp|331[.\x09-\xod -~]*password"             电子

解压"rotocol Definitions"并创建目的目录/etc/17-protocolshttp://upload.bbs.csuboy.com/Mon_1004/126_6642_4f4b5a14d6d2379.gif[/img]              乙肝

现在你.可以使用如下命令匹配应用层数据了虚拟主机

i.ptables -t m.angle -A POSTROUTING -m layer7 --17proto http -j MARK --set-m.ark 1             电子

(例子中我们使用man.gle表的POSTROUTING链因为.这是一个任何包都会通过的链,参阅包通路图).

注:给不愿.意循规蹈矩的人^_^学习

你也可以把模版安.装到自定义的路径中,如果你这样做,必须定义--l7dir:参.数<性病>

例如:iptables [...] -m layer7 --l.7dir /home/bob./patterns --l7proto http [...]投资

--l7dir参数必须在.l7proto参数前指定!--------------彩票

注:给模版文件的编写者

编写您自己的模版文.件相当容易,并且这对我们的项目也相当有建设性,更多的信息请参阅The Patte.rn Writing HOWTO    美容

iptables会在目录 /etc/l7-protols 或者指定目录中查找模版文件,于是,.他会找到/etc/l7-protocols/http.pat 和/etc/l7-protocols/protocols/http.pat,但不会.找到/etc/l7-protoc.ols/foo/b.ar/http.pat.

6、实务

现在你可以实际的做一些包.匹配的实验了,如果你正在阅读这篇文章,可能有两件事情你比较感兴趣,1,阻断某些协议 2,控制带宽使用.。服务器

首先,一个提醒,因为你在使用l7-fi.lter,你不需要处理所有包的分类,也许大多数.匹配需求可以通过其他更低要求的方法实现。若我们提供了正常工作的例如http,imap协议匹配方法,你也许只需要使用l7-f.ilter处理p2p程序或类似应用。.

阻断

不!为什么?

*l7-filter 匹配并非万无一失,他也许同时.不能确定(有的到时候一个协议看起.来和另一个差不了太多)也不能否定(应用程序可以做出些我们不清楚的令人费解的东西.^_^)(广告)

*用l7-filter阻断不安全,因为某些原因,被检测到的.人可以轻易逃避.过去。教育

*很多潜伏着.的程.序能够使用端口跳转的手段回应我们的阻断,在很多方面,这会使判断新的数据流非常困难。投资

作为替代简单的扔掉封包的操作,我们建议使用QoS限.制他们的带宽使用,参.阅下一节.

如果你坚持使用l7-f.ilter来丢弃封包,确保你已经研究过其他的方法,例如你的http代理服务器(对于蠕虫和红色代码等很有.效)

还在看这一节?好吧,其实阻断非常简单,在行尾使用"-j. .DROP "或者"-j REJECT"             电子

带宽限制

要控制协议的带宽占用,你可以使用Net.filter来"标记."封包然后使用QoS过滤带有标记的封包(广告)

标记封包:.iptables -t mangle .-A POSTROUTING -m layer7 --l7proto i.map -j MARK --set-mark 3--------------彩票

数字3是任意输入的一个32位的整数,接下来你就可以使用"tc"命令(."traffic control",一个用.户态的linux QoS工具,是iproute2包.的一部分)来过滤被标记的封包。    美容

tc filter add .dev eth0 protocol ip parent 1:0 pr.io 1 handle 3 fw flowid 1:3.

你理解最后一条命.令了么,可以试着读一下"the linux advanc.ed routing and traffic control howto(Linux高级路由和通讯控制HOWTO)"文档受点启发,这样也许可以更好的理解现在你所做的一切,但是不幸的是,.tc 命令非常模糊,也许你需要.一个封装的很好的脚本,好吧,到(广告)

http://l7-filter.sourceforge.net/l7-netfilter-example.

http://l7-filter.sourceforge.net/l7-netfilter-example-nonbridge           女人

可以找到一些编写好.的脚本。如果你的需求和我的不太相同,也许你需要简单编辑一下,但这些脚.本无疑是一个更好的起点。(        游戏          )

处理ftp,irc等等

一些协议会开启子连接来传输数据,FTP就是个.例子,如果你加载了ip_conntrack_ftp内核模块,l.7-filter把ftp和所有的子连接全部认为ftp,irc和irc-d.cc也是同样。学习

如果你想要单独检查子连接,使用标准的ip.tables "helper"匹配,你可.以使用"-m --helper ftp"来匹配ftp子连接,注意,这在2.6.8版本前有.效,helper匹配会忽略"!"参数,并且不提供"any"匹配。.

"未知"匹配

l7-filter把已经放弃匹.配的连接标记成"未知",相比之下,未被定义且仍被检查的链结是没有分类的。你可以把."未知"当作一个普通的协议来处理。    外汇

这是很有用的,你也许想要对未分类的连接进行操作,但因为l7-filt.er通常必须在匹配某一连接之前检.查很多封包,你必须小心,你不能说"如果不是http,而且不是dns,那么执行x操作",因为这样.,x操作也会执行到http的握手操作上,这也许不是你想要看到的。你应该说:"检查http.和dns协议,如果是"为定义"分类.,执行x操作",实际操作:.

iptables -t mangle -A .POSTROUTING -m layer7 --l.7proto http           鲜花

iptables -.t mangle -A POS.TROUTING -m layer7 --l7proto dns.

i.ptables -t mangl.e -A POSTROUTING -m layer7 --l7proto unknown -j[...]<性病>

这个特征只在2.6版本有效,2..4版本,没有定义的.连接永远不会拥有一个分类。(广告)

其他应该知道的:

*一些模版需要能够观察连接..的两端以便进行匹配,这对于netfilter很容易,默认的,在mangle表的POSTROUTING链的策略会应用到两端,但是output链只能看到本地生成的封包,所以,output链并.不是一个好的选择。(广告)

*如果想要更新协议,.你需要清空iptables规则并且重新输入他们,因为模版文.件只被iptables读取,不能被内核读取。电脑

*.默认的,l7-filter只价差前8个包或者2kb,这样小了一点,你可以通过修改/proc/net/layer7_n.umpackets文件修改这个数字,例如:echo "12" .>; /proc/net/layer7_numpackets ,你也可以通过使用更大的"buffer size for application layer. data"参数重新编.译内核来修改最大数据大小。            杀毒

*也许这样很罕见,但是连接匹配不止一个模版也是.可能的,模版按照.你在iptables 中指定的顺序进行校验,如果匹配,则不再继续对连接进行校验,所以,更改规则的顺序可.以改变校验的结果。--- 印刷

*有些时候,信息写入系统日志比显示在你工作的终端上更为重要,例如一些.包含正则表达式.未匹配或者tc报错的消息。一个有用的命令是"tail. -f /var/log/messages".

请阅读FAQ获取更多消息。

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
发帖
1963
C币
-140722
威望
350
贡献值
1
银元
-2
铜钱
4425
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:iptables
顶,我虽然只看懂了一点点,嘿嘿,明天做做看

离线陈茵茵.
发帖
1977
C币
-235565
威望
344
贡献值
1
银元
-4
铜钱
4356
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:iptables
不错,好文章被我翻出来了。

离线junbao99.
发帖
2069
C币
-152526
威望
375
贡献值
1
银元
-2
铜钱
4703
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
这样的文章 很早就有!而且有些重要的东西你没有指出,比如这个东东用在2.6.9系的内核会出现至命的情况!

离线lun0412.
发帖
2057
C币
-132078
威望
382
贡献值
1
银元
-2
铜钱
4590
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:iptables
2.6.9的问题LZ的文章也有提到,给出的文章是一个大体的操作流程和一些关于使用l7-filter需要了解的东西,这些就够了。具体的应用就看使用者的心得了。
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个