Centos 5.3 環境下編譯iptables
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使用指南