Centos 5.3 環(huán)境下編譯iptables
Centos 5.3 環(huán)境下編譯iptables,下面介紹下內(nèi)容。
一 相關(guān)內(nèi)容介紹
CentOS(Community ENTerprise Operating System)是Linux發(fā)行版之一,它是來(lái)自于Red Hat Enterprise Linux依照開(kāi)放源代碼規(guī)定釋出的源代碼所編譯而成。由于出自同樣的源代碼,因此有些要求高度穩(wěn)定性的服務(wù)器以CentOS替代商業(yè)版的Red Hat Enterprise Linux使用。兩者的不同,在于CentOS并不包含封閉源代碼軟件。介紹地址http://zh.wikipedia.org/zh-cn/CentOS
iptables或netfilter(網(wǎng)絡(luò)過(guò)濾器) 是一個(gè)用戶(hù)態(tài)的防火墻應(yīng)用軟件,允許系統(tǒng)管理員可以調(diào)整設(shè)定X表(Xtables)提供相關(guān)的系統(tǒng)表格(目前主要是在 iptables/netfilter 底下)以及相關(guān)的“鍵”與“規(guī)則”來(lái)管理網(wǎng)絡(luò)封包的流動(dòng)與轉(zhuǎn)送的動(dòng)作。介紹詳見(jiàn) http://zh.wikipedia.org/zh-cn/Iptables
patch-o-matic是iptables的擴(kuò)展模塊,默認(rèn)安裝的iptables并不安裝這些模塊,擴(kuò)展模塊功能強(qiáng)大,能夠很好提高iptables的使用效率。介紹詳見(jiàn) http://www.netfilter.org/projects/patch-o-matic/pom-external.html
ipp2p,Layer 7都是iptables的擴(kuò)展模塊,通過(guò)它可以限制網(wǎng)絡(luò)中的BT流量,多種下載工具以及其他一些異常網(wǎng)絡(luò)行為。介紹詳見(jiàn) http://www.ipp2p.org/ http://l7-filter.sourceforge.net/
#p#
二 下載相關(guān)程序
一般通過(guò)光盤(pán)安裝的centos5.3 內(nèi)核版本為2.6.18-128.el5 ,iptables版本為1.3.5,由于其默認(rèn)安裝的iptables沒(méi)有我們需要的模塊,即Layer 7 ipp2p,擴(kuò)展模塊patch-o-matic,我們需要通過(guò)編譯系統(tǒng)內(nèi)核,重新安裝新內(nèi)容的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官網(wǎng)提供的下載格式為tar.gz 及tar.bz2 ,這是由于linux發(fā)行版本眾多,打包壓縮格式是標(biāo)準(zhǔn)的發(fā)布方式。kernel也有src.rpm的格式, 是RedHat發(fā)布的,主要是在官方發(fā)布的kernel基礎(chǔ)上打了好多的補(bǔ)丁,主要可以提高他的一些性能,并增加了一些設(shè)備的驅(qū)動(dòng),其及其它一些功能。RedHat 的版本號(hào) 2.6.18-128.el5 表示是從kernel.org 官方公布的 2.4.18 版本的基礎(chǔ)上修改而來(lái)的。-128 表示是第128次build。因?yàn)槲覀儾捎玫牟僮飨到y(tǒng)是centos,其內(nèi)核本是經(jīng)紅帽修改的,所以推薦下載 src.rpm版本的內(nèi)核源碼
2.iptables 1.3.5(官方版本)下載地址 http://www.netfilter.org/projects/iptables/downloads.html
3.Layer 7 仔細(xì)閱讀 http://l7-filter.sourceforge.net/HOWTO-kernel
注:這里我們要下載兩個(gè)文件,一個(gè)是L7-filter-kernel version ,http://sourceforge.net/projects/l7-filter/files/
一個(gè)是protocol definitions http://sourceforge.net/projects/l7-filter/files/
注意這兩個(gè)文件的發(fā)布時(shí)間,下載接近的版本。在這里我們選擇下載最新版本
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網(wǎng)友修改的過(guò)的IPP2P 0.99.15 ,新增了對(duì)迅雷的限制。當(dāng)然我們也可以去官網(wǎng)下載0.82版本 地址為 http://www.ipp2p.org/ 在這里我們選擇下載最新版本。
5 patch-o-matic 下載地址 http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
在寫(xiě)這篇文章之前,我還沒(méi)查清iptabels版本與 patch-o-matic 之間的對(duì)應(yīng)關(guān)系 有興趣的朋友可以研究一下
在這里我們下載 patch-o-matic-ng-20080214
二 解壓安裝
把下載的打包壓縮文件全都解壓到/usr/src目錄下,內(nèi)核源碼文件不用
# 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協(xié)議
# tar zxvf netfilter-layer7-v2.17.tar.gz -C /usr/src/ / /L7內(nèi)核及iptables的補(bǔ)丁
# 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擴(kuò)展
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 / /修正rpm包安裝key警告問(wèn)題
# useradd mockbuild / /建立內(nèi)核源碼包安裝所需用戶(hù)
# rpm -ivh kernel-2.6.18-128.el5.src.rpm / /安裝內(nèi)核源碼
# 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 //安裝源碼包 考一份內(nèi)核到 /usr/src/linux-2.6.18做編譯使用,如果編譯失敗 可以刪除后再考新的所以不建議做軟連接操作
# cd /usr/src/linux-2.6.18
# vi Makefile
修改 EXTRAVERSION = -prep / /修改拷貝的內(nèi)核與當(dāng)前系統(tǒng)內(nèi)核版本一致(很重要,否則編譯出來(lái)的
該成 EXTRAVERSION = -128.el5 模塊不能被內(nèi)核所使用)
# uname -r
2.6.18-128.el5
# head -n4 Makefile / /保持跟uname -r 的版本一致 檢測(cè)一下
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 18
EXTRAVERSION = -128.el5
# make mrproper / /該命令確保源代碼目錄下沒(méi)有不正確的.o文件以及文件的互相依賴(lài)。
#make oldconfig / /該命令是生成就的內(nèi)核配置文件,運(yùn)行完后就會(huì)有.config文件了
#p#
三 為內(nèi)核打L7補(bǔ)丁并添加iptables擴(kuò)展模塊
注意:一定要設(shè)置內(nèi)核和iptables的環(huán)境變量,否則會(huì)出錯(cuò)
# export KERNEL_DIR=/usr/src/linux-2.6.18 / /設(shè)置內(nèi)核源碼路徑
# export IPTABLES_DIR=/usr/src/iptables-1.3.5 / /設(shè)置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
/ /給內(nèi)核打補(bǔ)丁L7補(bǔ)丁 1 是數(shù)字1 不是字母l
注意:仔細(xì)查看netfilter-layer7-v2.22目錄下的README文件,不同版本的內(nèi)核和iptables使用的文件不一樣,請(qǐng)仔細(xì)查找相符合的版本,如錯(cuò)誤則編譯內(nèi)核時(shí)會(huì)出錯(cuò)。
#cd /usr/src/patch-o-matic-ng-20080214
#./runme –download / /首先下載相關(guān)的擴(kuò)展
#./runme time / /安裝iptables netfilter的擴(kuò)展項(xiàng)(我安裝了以下項(xiàng)目)
#./runme connlimit / / 不要安裝ROUTER擴(kuò)展 這個(gè)版本的會(huì)出錯(cuò)有BUG
#./runme u32
#./runme geoip
四 配置內(nèi)核選項(xiàng),增加新模塊
# cd /usr/src/linux-2.6.18
# make menuconfig / /進(jìn)入內(nèi)核配置
選項(xiàng)路徑1:Loadable module support --->
source checksum for all modules 這項(xiàng)去掉 !!!不檢查模塊源
選項(xiàng)路徑2:Networking --->
Networking options --->
Network packet filtering (replaces ipchains) --->
IP: Netfilter Configuration --->
新加入的模塊都在這里 選中新加入的模塊
Layer 7 match support (EXPERIMENTAL) \選中L7\
[ ] Layer 7 debugging output (NEW) (這個(gè)debug 不要選啦)
TIME match support
Connections/IP limit match support
U32 match support
geoip match support
把time、 Connectionslimit 、u32,geoip 選上
保存退出
五 重新編譯內(nèi)核
#mv /lib/modules/2.6.18-53.el5 /lib/modules/2.6.18-53.el5.old / /在重新編譯內(nèi)核之前,我們需要把現(xiàn)有的模塊目錄改名。這樣,即使編譯失敗,只要把模塊目錄名改回成原來(lái),系統(tǒng)還和以前一樣的
#make bzImage / /字母“I”是大寫(xiě)的 (大約30分鐘)
#make modules / /編譯各個(gè)模塊
#make modules_install / /安裝模塊
2.6的kernel的編譯不需要cp 內(nèi)核和System.map,修改Grub.conf的步驟,統(tǒng)統(tǒng)make_install搞定了
#reboot //重新啟動(dòng),使用新內(nèi)核
六、安裝新版本iptables以及l(fā)ayer7iptables補(bǔ)丁和協(xié)議
#cd /usr/src/iptables
# export KERNEL_DIR=/usr/src/linux-2.6.18 / /設(shè)置內(nèi)核源碼路徑
# export IPTABLES_DIR=/usr/src/iptables-1.3.5 / /設(shè)置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協(xié)議文件
# 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模塊復(fù)制過(guò)去\\
#cp ipt_ipp2p.ko /lib/modules/2.6.18-53.el5/kernel/net/ipv4/netfilter/ \\將編譯好的ipt_ipp2p.ko模塊復(fù)制過(guò)去\\
#depmod -a \\更新內(nèi)核模塊的依賴(lài)關(guān)系\\
安裝結(jié)束
通過(guò)文章的介紹,我們不難發(fā)現(xiàn)Centos 5.3 環(huán)境下編譯iptables是比較簡(jiǎn)單的,相信大家都能掌握!
【編輯推薦】
- CentOS+iptables+squid透明代理+防火墻設(shè)置
- centos IPTables 配置方法
- 創(chuàng)建iptables NAT 規(guī)則
- Ubuntu iptables 初始化的實(shí)現(xiàn)
- Ubuntu iptables 內(nèi)網(wǎng)端口映射
- 如何使用 ubuntu iptables 防止IP攻擊
- ubuntu防火墻iptables使用指南