iptables 添加模块 (for kernel 2.6)

发表于:2007-07-04来源:作者:点击数: 标签:
感谢platinum的文档; 下面是我在 Linux 上的试验步骤,可能不那么准确。 由于我是使用word来编辑的而且不太会排版,附件是word文档,希望大家能继续完善并分享成果(下载后改后缀为.rar),望大家见谅: ========================

感谢platinum的文档;
下面是我在Linux上的试验步骤,可能不那么准确。
由于我是使用word来编辑的而且不太会排版,附件是word文档,希望大家能继续完善并分享成果(下载后改后缀为.rar),望大家见谅:
===============================
Iptables添加模块 Howto
For kernel 2.6
准备工作:
1,最新的patch-o-matic-ng,在下面的地址可以下载到最新的:
http://ftp.netfilter.org/pub/patch-o-matic-ng/
2,最新的iptables源代码:
http://www.netfilter.org
3,内核源代码:
http://www.kernel.org
4,L7-filter 补丁以及协议描述文件:
http://sourceforge.net/project/showfiles.php?group_id=80085
测试系统环境及软件版本:
1,GCC 3.4.2
2,Kernel 2.6.9
3,Iptbles 1.3.1
4,l7-protocols 2005-02-06
5,netfilter-layer7 v1.0
6,patch-o-matic-ng 20050309
安装步骤:
1,解压kernel到/usr/src: #tar –jxvf kernel-2.6.9.tar.bz2 –C /usr/src
2,使用上面类似的命令解压其余的文件到/source/temp下:
为kernel打补丁:
Cd /usr/src/linux-2.6.9
Make menuconfig(注意生成.config)
cd /source/temp/patch-o-matic-ng-20050309
KERNEL_DIR=/usr/src/linux-2.6.9 IPTABLES_DIR=/source/temp/iptables-1.3.1 ./runme time
  (注:runme后跟需要添加的模块,不要使用base或其它的命令,会导致后面iptables不能编译通过。我编译的模块有:time ipv4options psd mport ipp2p quota。很遗憾的是string模块不支持kernel-2.6版本)
##这里是与l7-filter有关的(你可以不做这里的):
Cd /usr/src/linux-2.6.9
Patch –p1 </source/temp/netfilter-layer7-v1.0/kernel-2.6-layer7-1.0.patch
Cd /source/temp/iptables-1.3.1
Patch –p1 </source/temp/netfilter-layer7-v1.0/iptables-layer7-1.0.patch
##这里是与l7-filter有关的结束
Cd /usr/src/linux-2.6.9
Make menuconfig (在这里选择你添加的netfilter的模块)
Make 
Make modules_install
修改grub或lilo使用新的kernel来启动Linux
编译iptables:
Cd /source/temp/iptables-1.3.1
Export KERNEL_DIR=/usr/src/linux-2.6.9
Export IPTABLES_DIR=/source/temp/iptables-1.3.1
make PREFIX=/usr LIBDIR=/lib BINDIR=/sbin &&
make PREFIX=/usr LIBDIR=/lib BINDIR=/sbin install
安装l7-filter协议文件:
Cd /source/temp/l7-protocols-2005-02-06
Make install
测试是否成功:
Iptables –A OUTPUT –p tcp –m mport –sports 21:23,80 –j DROP
等等测试命令,如果你需要看帮助:
Iptables –m ip2p2 –help
参考文档:
http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter
http://www.netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO.html
platinum的HOWTO文档
=====================================

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">




 初学摄影 回复于:2005-03-10 12:35:17
Which versions office did you use? I use office 2K ,But I can't open your doc :em16:

 hongfengyue 回复于:2005-03-10 12:39:18
可以到这里下载附件:
http://www.linuxsir.org/bbs/showthread.php?p=1057823#post1057823
我的是word 2003

 platinum 回复于:2005-03-10 12:53:43
Make menuconfig (在这里选择你添加的netfilter的模块) 
Make 
Make modules_install 

不能单独编译netfilter的模块吗?

 mb 回复于:2005-03-10 13:05:11
天,怎么编译内核呀,不是说不编译内核的吗

 hongfengyue 回复于:2005-03-10 13:09:42
如果你是编译成模块那么就按照platinum 的做法就应该可以。
我是直接编译到kernel了,所以重新编译了kernel。

 双眼皮的猪 回复于:2005-03-10 13:11:13
谢谢红桃K.:)
但是"应该可以"...

 hongfengyue 回复于:2005-03-10 13:25:22
因为我没有试验编译成模块,所以没有发言权在这个问题上。

 hongfengyue 回复于:2005-03-10 13:26:27
因为我没有试验编译成模块,所以没有发言权在这个问题上。
因为我习惯将需要的编译到kernel,基本上不使用模块。也就不使用initrd.img了。

谢谢

 jsc_flying 回复于:2005-03-11 09:51:12
自己能实验吗,要有什么条件?

 jngxdzk 回复于:2005-03-11 11:32:09
正因为string不支持2.6的内核,所以我是在redhat 9.0(kernel 2.4.20)下编译的。用的非常爽,在代理服务器中禁止QQ:
iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" -j DROP
iptables -A FORWARD -p udp --dport 53 -m string --string "TENCENT" -j DROP,就两句就封死了udp、tcp登陆

 llzqq 回复于:2005-03-11 13:31:28
有时间实验一下

 hongfengyue 回复于:2005-03-11 13:37:54
如果你只是要封QQ,使用ipp2p或l7-filter就能实现。而且能过滤MSN,BT等

 kongdz 回复于:2005-03-11 15:53:27
最喜欢里面的字符串匹配功能:-m string,不过cpu占用率稍高。去年是在2.4.20的内核升级到2.6.9后试验的,当时看过string模块的代码,记得是里面的一个info文件里第4行对内核有版本要求:
Requires:linux<2.6.0
 手工改成<2.7.0后,运行runme -extra时出现了string选项。不过,后来可能因为其他步骤的错误,最后没补丁成功。再后来干脆退回2.4.20的内核上就全成功了。留下了一点遗憾,说不定改过此句后,在2.6内核中一样使用字符串匹配功能。没有-m string的patch-o-matic总觉得少些什么,哪位大侠可以在2.6的内核下试一试这个功能。

 diypig 回复于:2005-03-11 20:24:06
[quote:b60407505c="jngxdzk"]正因为string不支持2.6的内核,所以我是在redhat 9.0(kernel 2.4.20)下编译的。用的非常爽,在代理服务器中禁止QQ:
iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" -j DROP
iptables -A FO..........[/quote:b60407505c]
请问-m string可以匹配通配符吗?例如我想禁止下载qq*.exe的文件,但*不起作用,如果指定全部名字就工作就没有问题了.

 kongdz 回复于:2005-03-14 12:04:24
上面那个iptables规则是禁止解析含有"tencent"的域名。如果你是用的代理服务器的话,在squid中设置就可以了。-m string不支持通配符,而且过滤全部数据包时cpu开支不小。

 hongfengyue 回复于:2005-03-14 12:58:13
ipp2p比l7-filter的效能高。ipp2p的过滤规则是直接写入CODE中的,而l7-filter是将规则写入文件的。

 wsgtrsys 回复于:2005-03-20 12:25:22
我认为ipp2p比l7-filter的效能低。
ipp2p会检查每一个包。
而l7-filter只检查前面的八个包或者2K的内容。
而且l7-filter的灵活性要强得多,可以匹配更多的网络协议。
官方已经包含我写的模板文件,可以drop掉qq pp点点通 酷狗等国内典型的p2p软件。

 skylove 回复于:2005-03-20 12:33:48
楼上的兄弟...卡盟的解决方案想出来没?? 我想在dns做手脚了。..

 jzcjy 回复于:2005-03-21 11:44:23
天呀,现在的同志们个个是高手;

 wsgtrsys 回复于:2005-03-21 15:05:48
卡盟已经搞定了。

 diypig 回复于:2005-04-21 03:05:33
出错主要信息:
#error including kernel header in userspace; use the glibc headers instead! 
地址:http://bbs.chinaunix.net/forum/viewtopic.php?t=531410&highlight=diypig

原文转自:http://www.ltesting.net