日记 [2008年03月23日]不编译内核给iptables增加模块

TFTP上传所需软件包到 /usr/src/ 目录下
ipp2p-0.8.2.tar.gz
patch-o-matic-ng-20060509
iptables-1.3.5.tar.bz2
l7-protocols-2006-10-18.tar.gz
kernel-2.6.9-42.EL.src.rpm
netfilter-layer7-v2.6.tar.gz
这里说一下 因为ipp2p0.8.2不支持iptabls1.3.6 所以选用1.3.5
patch-o-matic-ng-20060509 这个补丁包里面的模块是我自己选的
在 patchlets/ 目录下 把自己需要的模块留下 其他删除既可
这个配置文件要保留patchlets/config
另外需要注意一点20060509这个包里的 time模块在2.6下编译时是出错的,但在2.4内核上编译就没问题,你可以用20050801 这个包内的time模块来安装或者你就直接用这个补丁包来安装也一样,只要你找到自己用的模块将模块放在patchlets/ 里即可
L7的就没什么说的啦 都是最新的
kernel-2.6.9-42.EL.src.rpm 这个内核源码包你可以去网上下或在光盘里找
解开所有压缩包
# tar zxvf ipp2p-0.8.2.tar.gz
# tar zxvf l7-protocols-2006-10-18.tar.gz
# tar zxvf netfilter-layer7-v2.6.tar.gz
# tar xvjf iptables-1.3.5.tar.bz2
修正rpm包安装key警告问题
# rpm --import /usr/share/doc/centos-release-4/RPM-GPG-KEY*
建立内核源码包安装所需用户
# useradd  buildsvn
安装源码包 考一份内核到 /usr/src/linux-2.6.9做编译使用,如果编译失败 可以删除后再考新的所以不建议做软连接操作
# rpm -ivh kernel-2.6.9-42.EL.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec
# cp -a /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 /usr/src
修改拷贝的内核与当前系统内核版本一致(很重要,否则编译出来的模块不能被当前内核使用)
# cd /usrs/src/linux-2.6.9
# vi Makefile
修改 EXTRAVERSION = -prep
该成EXTRAVERSION = -42.EL
保持跟uname -r 的版本一致 检测一下
# uname -r
2.6.9-42.EL
# head -n4 Makefile
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 9
EXTRAVERSION = -42.EL
# make mrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
# make menuconfig
直接保存退出,生成 .config 文件。
为内核打补丁并添加模块
# cd  /usr/src/patch-o-matic-ng-20060509
设置内核和iptables的环境变量
# export KERNEL_DIR=/usr/src/linux-2.6.9
# export IPTABLES_DIR=/usr/src/iptables-1.3.5
添加模块
# ./runme time
# ./runme ipp2p
# ./runme iprange(已经自带)
其实你若明确了 patchlets/ 下的模块后
可以用 ./runme xxxx 随意字符 然后它会自动到patchlets/ 下检测每一个模块提示你
添加Layer-7模块
# cd /usr/src/linux-2.6.9
# patch -p1 < /usr/src/netfilter-layer7-v2.6/for_older_kernels/kernel-2.6.9-2.6.10-layer7-1.2.patch
# cd /usr/src/iptables-1.3.5
# patch -p1 < /usr/src/netfilter-layer7-v2.6/iptables-layer7-2.6.patch
# chmod +x extensions/.layer7-test
l7-filter模块加入完成
为内核选择新添加的模块
# cd /usr/src/linux-2.6.9
# make menuconfig
路径:Device Drivers  --->
             Networking support  --->
                  Networking options  --->
                     Network packet filtering (replaces ipchains)  --->
                        IP: Netfilter Configuration  --->
新加入的模块都在这里 选中新加入的模块
<M>   Layer 7 match support (EXPERIMENTAL)
[ ]     Layer 7 debugging output (NEW)    (这个debug 就不要选啦)                          
(2048)  Buffer size for application layer data (NEW)
保存退出
编译netfilter模块
 # cd /usr/src/linux-2.6.9
 # make modules_prepare
  # make M=net/ipv4/netfilter
这里不用make来编译整个内核,只需要把我们新加入的模块编译出来就可以了
编译完成netfilter模块后拷贝编译完成的模块到当前系统netfilter中(
因为alise里面定义了cp = cp -i 所以在命令前面加一个\就可以了.)
#\cp -f /usr/src/linux-2.6.9/net/ipv4/netfilter/*.ko /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/
# chmod +x /lib/modules/2.6.9-42.EL/kernel/net/ipv4/netfilter/*.ko
# depmod -a
安装l7协议
# cd /usr/src/l7-protocols-2006-10-18
# make install
安装新的 iptables
(这个注释不明白是什么意思)
# vi /usr/src/linux-2.6.9/include/linux/config.h
用 // 把下面的中间三行注释掉
#include <linux/autoconf.h>
//#if !defined (__KERNEL__) && !defined(__KERNGLUE__)
//#error including kernel header in userspace; use the glibc headers instead!
//#endif
#endif
保存退出
# cd /usr/src/iptables-1.3.5
# export KERNEL_DIR=/usr/src/linux-2.6.9
# export IPTABLES_DIR=/usr/src/iptables-1.3.5
保证有这两个环境变量存在(前面我们已经做过,可用 echo $ KERNEL_DIR和echo $ IPTABLES_DIR 查看目录设置是否正确)然后安装
# make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
更新ipp2p模块,使他支持更多的协议
# cd /usr/src/ipp2p-0.8.2
# make
备份原模块 # cp /lib/iptables/libipt_ipp2p.so /
# cp /usr/src/ipp2p-0.8.2/libipt_ipp2p.so /lib/iptables

你可能感兴趣的:(职场,iptables,休闲,不编译内核)