弄了好几天总算是解决了配置OK后,iptables 服务无法启动的问题

 

1、下载所需要软件包

linux-2.6.28.tar.gz             
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz

iptables-1.4.5.tar.bz2          
http://netfilter.org/projects/iptables/files/iptables-1.4.5.tar.bz2

netfilter-layer7-v2.22.tar.gz   
http://sourceforge.net/projects/l7-filter/files/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz/download

l7-protocols-2009-05-28.tar.gz  
http://sourceforge.net/projects/l7-filter/files/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz/download


2、把以上内核和软件包解压到/usr/src下
tar -zxvf linux-2.6.28.tar.gz -C /usr/src
tar -zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src
tar -zxvf l7-protocols-2009-05-28.tar.gz -C /usr/src
tar -jxvf iptables-1.4.5.tar.bz2 -C /usr/src

3、备份iptable 相关文件

  cp /etc/rc.d/init.d/iptables ~/iptables

  cp /etc/sysconfig/iptables-config  ~/iptables-config

 

4、卸载原有的iptable

rpm -e iptables-ipv6  iptables iptstate --nodeps 

 

5、给新内核安装layer7补丁 
cd /usr/src/linux-2.6.28/

给新内核安装layer7补丁 
cd /usr/src/linux-2.6.28/
patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch

 

6、编译新内核,修改内核配置项 

make oldconfig 

注意:  
全部保持默认,直接回车。
(如果之前曾经编译过,需要先执行 make mrproper 。make oldconfig会自动对比之前的kernel config,根据之前版本的配置生成一个kernel config,这样方便我们在编译新核心的时候,无须在从头修改所有的核心设置)

make menuconfig  (*为编译到内核,M为编译成模块)

General setup  --->
Prompt for development and/or incomplete code/drivers  必选(M)

 

Networking  --->
Networking options  --->
Network packet filtering framework (Netfilter)  --->
Core Netfilter Configuration  --->   该项下的所有项目建议都选上(M)

<M> Netfilter connection tracking support  这个项目必需选上,下面才会出现layer7的选项
<M>   "layer7" match support         必选                               
          Layer 7 debugging output             必选 

IP: Netfilter Configuration  --->    该项下的所有 项目必需都选上(M)

 

7、编译并安装新内核 
make
make modules_install
make install

8、设置新内核为默认启动的内核
vi /etc/gurb.conf

default=1     把1改为0 
timeout=9     设置等候时间为9秒

保存退出,重新启动系统
reboot
编译内核重启后会报出 insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits,解决方法见下文。

重启登录后检查内核版本:uname -a

Linux bogon 2.6.28 #1 SMP Sat Aug 24 20:31:54 EDT 2013 i686 i686 i386 GNU/Linux

 

9、编译安装iptables并支持layer7 
cd /usr/src/iptables-1.4.5/
cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/*.* extensions/

./configure --prefix=/usr  --with-ksource=/usr/src/linux-2.6.28

make

make install

mv ~/iptables /etc/rc.d/init.d/

mv ~/iptables-config /etc/sysconfig/iptables-config  

ln –sv /usr/sbin/iptables /sbin/iptables

 

2.6.28.10 内核中 ip_conntrack_ftp 改名为 nf_conntrack_ftp

加模块: modprobe nf_conntrack_ftp

 

 

10、安装Layer7协议文件


cd l7-protocols-2009-05-28
make install

10、测试iptables版本是否生效 
/usr/local/sbin/iptables -V

显示如下,说明安装成功:
iptables v1.4.5

再来测试layer7模块是否安装成功
/usr/lptables -m layer7 --help

显示如下,说明安装成功:
[root@localhost src]# /usr/local/sbin/iptables -m layer7 --help
iptables v1.4.5

Usage: iptables -[AD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)
。。。。。。。。。。。。。
。。。。。。。。。。。。。
。。。。。。。。。。。。。

layer7 match options:
    --l7dir <directory> : Look for patterns here instead of /etc/l7-protocols/
                          (--l7dir must be specified before --l7proto if used)
[!] --l7proto <name>: Match named protocol using /etc/l7-protocols/.../name.pat

i_f05.gif至此安装过程完全完成。(看看你的iptables 能不能通过service iptables start 启动)

 

编译内核重启后会报出 insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits
其实不影响启动,解决方法如下:

1、解压initrd 
cp /boot/initrd-2.6.28.img /tmp 
cd /tmp/ 

mkdir newinitrd 
cd newinitrd/ 
zcat ../initrd-2.6.28.img | cpio -i 
11264 blocks 


2、编辑init,删掉其中重复的两行
echo "Loading dm-region-hash.ko module" 
insmod /lib/dm-region-hash.ko 
echo "Loading dm-region-hash.ko module" 
insmod /lib/dm-region-hash.ko 


3、重新打包initrd 
find . | cpio -c -o > ../initrd 
11169 blocks 

cd .. 
gzip -9 < initrd > initrd-2.6.28.img

initrd-2.6.28.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot就可以了,再reboot,就不会有之前的错误了。

 

以下是L7的限制语句

 iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP