Centos5.4升级内核+iptables+Layer7+ipp2p

 

Centos5.4 升级内核 +iptables+Layer7+ipp2p
一、安装前准备

1.所需要软件包
  linux-2.6.28..tar.gz                  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2
  iptables-1.4.5.tar.bz2             http://ftp.netfilter.org/pub/iptables/iptables-1.4.5.tar.bz2
  netfilter-layer7-v2.22.tar.gz        http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.22.tar.gz
 l7-protocols-2009-05-28.tar.gz       http://downloads.sourceforge.net/l7-filter/l7-protocols-2009-05-28.tar.gz
 
2.把以上内核和软件包解压到/usr/src下
tar -zxvf linux-2.6.28.7.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
 
二、安装l7-protocols
进入l7-protocols/下
Make install
 
三、编译新内核
1.给新内核打L7补丁
cd /usr/src/linux-2.6.28.7
patch -p1< /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
 
 
2.修改内核配置项
make mrproper  清理工作
 
 make menuconfig
     Networking  --->
       Networking options  --->
            Network packet filtering framework (Netfilter)  --->
                 Core Netfilter Configuration  --->  
该项下的所有项目建议都选上
                      <M> Netfilter connection tracking support  这个项目必需选上,下面才会出现layer7的选项
                            <M>   "layer7" match support         必选                             
                                  Layer 7 debugging output   (可不选)
        IP: Netfilter Configuration  --->    该项下的所有项目必需都选上
 
2.1编译并安装新内核
 Make
make bzImage
make modules
 make modules_install 
make install
 
 
 
2.2 设置新内核为默认启动的内核,如果是远程连接服务器,必须要修改这项,否则重启后默认加载旧的kernel
   vim /boot/grub/gurb.conf

default=1    
把1改为0
timeout=5    设置等候时间
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.24.7
                               
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.24.7 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.24.7.img
title CentOS (2.6.18-164.el5)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.18-164.el5.img
保存退出

 
 
 
3.编译安装iptables并支持layer7
 
cd /usr/src/iptables-1.4.5/
export KERNEL_DIR=/usr/src/linux-2.6.28/
export IPTABLES_DIR=/usr/src/iptables-1.4.5
 
4.进入到iptables的源码目录,将/usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward目录下的
 
libxt_layer7.c libxt_layer7.man 这两个文件拷贝到/usr/src/iptables-1.4.2/extensions目录下
 
cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/
 
注:如果有 patch可以打补丁
进入到iptables1.4.2源码目录执行以下命令给iptables1.4.2打补丁,由于没有针对我的2.6.25的补丁,所以就装了最新的2.6.20,其他版本的补丁没有试过
 
patch -p1 < ../netfilter-layer7-v2.20/iptables-1.4-for-kernel-2.6.20forward-layer7-2.20.patch
 
5、接下来就是安装打好补丁的iptables1.4.2了,进入到iptables1.4.2源码目录,执行以下命令:
./configure --with-ksource=/usr/src/linux-2.6.28
make KERNEL_DIR=/usr/src/linux BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man    
make install BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man
 
 
 
四、重新启动之后查看内核是否加载成功 以及iptables版本
[root@DB2 ~]# uname –a
Linux DB2 2.6.28 #1 SMP Thu Feb 24 11:19:41 CST 2011 x86_64 x86_64 x86_64 GNU/Linux
 
[ root@DB2 ~t ~]# iptables -V
iptables v1.4.5

 

五、编译加载ipp2p(这个步骤一定会出现一些问题,是新版本的内核和iptabels的改变导致的)
首先修改Makefile,编译
tar zxvf ipp2p-0.99.15.tar.gz
   cd ipp2p-0.99.15/
   vi Makefile        修改kernel_dir为/usr/src/linux-2.6.24.7
   make
如果完全按照上面的步骤操作,编译的时候遇到的第一个错误应该
是这样的:图一

 

 

这是版本差异造成的,需要修改代码:
修改libipt_ipp2p.c
找到报警的行:375,376,378,379
参考系统的libxt_mark.c修改相关代码如下:
static void
删除init(struct ipt_entry_match *m, unsigned int *nfcache)
添加init(struct xt_entry_match *m)
{
     struct ipt_p2p_info *info = (struct ipt_p2p_info *)m->data;
删除    *nfcache |= NFC_UNKNOWN;
  /*init the module with default values*/
     info->cmd = 0;
     info->debug = 0;
}

static int
parse(int c, char **argv, int invert, unsigned int *flags,
删除      const struct ipt_entry *entry,
删除      unsigned int *nfcache,
添加       const void *entry,
        struct xt_entry_match **match)
{
     struct ipt_p2p_info *info = (struct ipt_p2p_info *)(*match)->data;
static void
删除print(const struct ipt_ip *ip,
添加print(const void *ip,
         const struct xt_entry_match *match,
        int numeric)
{
static void
删除save(const struct ipt_ip *ip, const struct iptt_entry_match *match)
添加save(const void *ip, const struct xt_entry_match *match)
{
   struct ipt_p2p_info *info = (struct ipt_p2p_info *)match->data;
重新编译,make clean          make
成功编译!
 
将编译出的libipt_ipp2p.so(目录 ipp2p-0.99.15/下)复制到/lib/iptables/
 
cp libipt_ipp2p.so /lib/iptables/
 
cp ipt_ipp2p.ko /lib /modules/2.6.24.7/kernel/net/ipv4/netfilter
将ipt_ipp2p.ko复制到内核的 netfilter目录下
运行depmod -a,更新内核模块的依赖关系。
重启iptables服务
Service iptables restart
测试L7成功
Iptables –A FORWARD –m layer7 –l7proto q –j DROP
测试ipp2p成功
Iptables –A FORWARD –p tcp –m ipp2p –xunlei –j DROP

 

你可能感兴趣的:(linux,防火墙,iptables,内核,L7)