Centos 5.3 环境下编译iptables,下面介绍下内容。
一 相关内容介绍
CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。介绍地址http://zh.wikipedia.org/zh-cn/CentOS
iptables或netfilter(网络过滤器) 是一个用户态的防火墙应用软件,允许系统管理员可以调整设定X表(Xtables)提供相关的系统表格(目前主要是在 iptables/netfilter 底下)以及相关的“键”与“规则”来管理网络封包的流动与转送的动作。介绍详见 http://zh.wikipedia.org/zh-cn/Iptables
patch-o-matic是iptables的扩展模块,默认安装的iptables并不安装这些模块,扩展模块功能强大,能够很好提高iptables的使用效率。介绍详见 http://www.netfilter.org/projects/patch-o-matic/pom-external.html
ipp2p,Layer 7都是iptables的扩展模块,通过它可以限制网络中的BT流量,多种下载工具以及其他一些异常网络行为。介绍详见 http://www.ipp2p.org/ http://l7-filter.sourceforge.net/
#p#
二 下载相关程序
一般通过光盘安装的centos5.3 内核版本为2.6.18-128.el5 ,iptables版本为1.3.5,由于其默认安装的iptables没有我们需要的模块,即Layer 7 ipp2p,扩展模块patch-o-matic,我们需要通过编译系统内核,重新安装新内容的iptables。
1. kernel 2.6.18(官方版本)下载地址 http://www.kernel.org/pub/linux/kernel/v2.6/
kernel 2.6.18-128.el5(redhat 修改的版本) http://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/
注:kerne官网提供的下载格式为tar.gz 及tar.bz2 ,这是由于linux发行版本众多,打包压缩格式是标准的发布方式。kernel也有src.rpm的格式, 是RedHat发布的,主要是在官方发布的kernel基础上打了好多的补丁,主要可以提高他的一些性能,并增加了一些设备的驱动,其及其它一些功能。RedHat 的版本号 2.6.18-128.el5 表示是从kernel.org 官方公布的 2.4.18 版本的基础上修改而来的。-128 表示是第128次build。因为我们采用的操作系统是centos,其内核本是经红帽修改的,所以推荐下载 src.rpm版本的内核源码
2.iptables 1.3.5(官方版本)下载地址 http://www.netfilter.org/projects/iptables/downloads.html
3.Layer 7 仔细阅读 http://l7-filter.sourceforge.net/HOWTO-kernel
注:这里我们要下载两个文件,一个是L7-filter-kernel version ,http://sourceforge.net/projects/l7-filter/files/
一个是protocol definitions http://sourceforge.net/projects/l7-filter/files/
注意这两个文件的发布时间,下载接近的版本。在这里我们选择下载最新版本
netfilter-layer7-v2.22.tar.gz Mon Jul 13 2009 22:55
l7-protocols-2009-05-28.tar.gz Thu May 28 2009 21:48
4. ipp2p 下载地址 http://linux.chinaunix.net/bbs/viewthread.php?tid=914377&extra=page%3D1&page=1
这里我们推荐安装CU网友修改的过的IPP2P 0.99.15 ,新增了对迅雷的限制。当然我们也可以去官网下载0.82版本 地址为 http://www.ipp2p.org/ 在这里我们选择下载最新版本。
5 patch-o-matic 下载地址 http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
在写这篇文章之前,我还没查清iptabels版本与 patch-o-matic 之间的对应关系 有兴趣的朋友可以研究一下
在这里我们下载 patch-o-matic-ng-20080214
二 解压安装
把下载的打包压缩文件全都解压到/usr/src目录下,内核源码文件不用
# tar zxvf ipp2p-0.99.15.tar.gz -C /usr/src/ / / ipp2p模块的
# tar zxvf l7-protocols-2008-02-20.tar.gz -C /usr/src/ / /L7协议
# tar zxvf netfilter-layer7-v2.17.tar.gz -C /usr/src/ / /L7内核及iptables的补丁
# tar xvjf iptables-1.3.5.tar.bz2 -C /usr/src/ / /iptables源码
#tar jxvf patch-o-matic-ng-20071120.tar.bz2 -C /usr/src/ / /iptables扩展
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 / /修正rpm包安装key警告问题
# useradd mockbuild / /建立内核源码包安装所需用户
# rpm -ivh kernel-2.6.18-128.el5.src.rpm / /安装内核源码
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec
# cp -a /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 /usr/src/linux-2.6.18 //安装源码包 考一份内核到 /usr/src/linux-2.6.18做编译使用,如果编译失败 可以删除后再考新的所以不建议做软连接操作
# cd /usr/src/linux-2.6.18
# vi Makefile
修改 EXTRAVERSION = -prep / /修改拷贝的内核与当前系统内核版本一致(很重要,否则编译出来的
该成 EXTRAVERSION = -128.el5 模块不能被内核所使用)
# uname -r
2.6.18-128.el5
# head -n4 Makefile / /保持跟uname -r 的版本一致 检测一下
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 18
EXTRAVERSION = -128.el5
# make mrproper / /该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
#make oldconfig / /该命令是生成就的内核配置文件,运行完后就会有.config文件了
#p#
三 为内核打L7补丁并添加iptables扩展模块
注意:一定要设置内核和iptables的环境变量,否则会出错
# export KERNEL_DIR=/usr/src/linux-2.6.18 / /设置内核源码路径
# export IPTABLES_DIR=/usr/src/iptables-1.3.5 / /设置iptables-1.3.5源码路径
# cd /usr/src/linux-2.6.18
# patch -p1 < /usr/src/netfilter-layer7-v2.22/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch
/ /给内核打补丁L7补丁 1 是数字1 不是字母l
注意:仔细查看netfilter-layer7-v2.22目录下的README文件,不同版本的内核和iptables使用的文件不一样,请仔细查找相符合的版本,如错误则编译内核时会出错。
#cd /usr/src/patch-o-matic-ng-20080214
#./runme –download / /首先下载相关的扩展
#./runme time / /安装iptables netfilter的扩展项(我安装了以下项目)
#./runme connlimit / / 不要安装ROUTER扩展 这个版本的会出错有BUG
#./runme u32
#./runme geoip
四 配置内核选项,增加新模块
# cd /usr/src/linux-2.6.18
# make menuconfig / /进入内核配置
选项路径1:Loadable module support --->
source checksum for all modules 这项去掉 !!!不检查模块源
选项路径2:Networking --->
Networking options --->
Network packet filtering (replaces ipchains) --->
IP: Netfilter Configuration --->
新加入的模块都在这里 选中新加入的模块
Layer 7 match support (EXPERIMENTAL) \选中L7\
[ ] Layer 7 debugging output (NEW) (这个debug 不要选啦)
TIME match support
Connections/IP limit match support
U32 match support
geoip match support
把time、 Connectionslimit 、u32,geoip 选上
保存退出
五 重新编译内核
#mv /lib/modules/2.6.18-53.el5 /lib/modules/2.6.18-53.el5.old / /在重新编译内核之前,我们需要把现有的模块目录改名。这样,即使编译失败,只要把模块目录名改回成原来,系统还和以前一样的
#make bzImage / /字母“I”是大写的 (大约30分钟)
#make modules / /编译各个模块
#make modules_install / /安装模块
2.6的kernel的编译不需要cp 内核和System.map,修改Grub.conf的步骤,统统make_install搞定了
#reboot //重新启动,使用新内核
六、安装新版本iptables以及layer7iptables补丁和协议
#cd /usr/src/iptables
# export KERNEL_DIR=/usr/src/linux-2.6.18 / /设置内核源码路径
# export IPTABLES_DIR=/usr/src/iptables-1.3.5 / /设置iptables-1.3.5源码路径
#patch -p1 < ./usr/src/netfilter-layer7-v2.22.1/iptables-1.3-for-kernel-pre2.6.20-layer7-2.16.1.patch
#chmod +x ./extensions/.layer7-test
#make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install //安装新版本iptables
#cd /usr/src/l7-protocols-2008-02-20
#make install / /安装l7-filter协议文件
# cd /usr/src/ipp2p-0.99.15 //安装ip2p2模块
# vi Makefile
把 $(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o
改成 ld -shared -o libipt_ipp2p.so libipt_ipp2p.o
#make
#cp libipt_ipp2p.so /lib/iptables \\将编译好的libipt_ipp2p.so模块复制过去\\
#cp ipt_ipp2p.ko /lib/modules/2.6.18-53.el5/kernel/net/ipv4/netfilter/ \\将编译好的ipt_ipp2p.ko模块复制过去\\
#depmod -a \\更新内核模块的依赖关系\\
安装结束
通过文章的介绍,我们不难发现Centos 5.3 环境下编译iptables是比较简单的,相信大家都能掌握!
【编辑推荐】
- CentOS+iptables+squid透明代理+防火墙设置
- centos IPTables 配置方法
- 创建iptables NAT 规则
- Ubuntu iptables 初始化的实现
- Ubuntu iptables 内网端口映射
- 如何使用 ubuntu iptables 防止IP攻击
- ubuntu防火墙iptables使用指南