在2.6內核下不編譯內核給iptables添加模塊
看了platinum兄弟寫的在2.4內核下給iptables添加模塊,想在2.6的內核下也試試,經過一天半的努力,並參考platinum兄弟的文章,
終於成功,寫下來跟CU的兄弟們分享,我的系統爲fedora2+linux-2.6.5-1.358
1,安裝kernel源碼
[root@jiecho]# yum install kernel-source
2,下載iptables-1.3.3.tar.bz2和patch-o-matic-ng-20050810.tar.bz2並解包,爲了方便,我們都放在/usr/src下,
並把kernel和iptables做符號鏈接.
[root@jiecho]# cd /usr/src
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/iptables/iptables-1.3.3.tar.bz2
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# tar -jxvf iptables-1.3.3.tar.bz2
[root@jiecho]# tar -jxvf patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# ln -s linux學習-2.6.5-1.358 linux學習
[root@jiecho]# ln -s iptables-1.3.3 iptables
3,給netfilter打補丁,選擇你要的模塊,爲了測試我就選擇了ipp2p和time
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make mrproper
[root@jiecho]# make menuconfig
什麼不做,保存退出,然後把Makefile改一下
[root@jiecho]# vi Makefile
把EXTRAVERSION = -1.358custom更改爲EXTRAVERSION = -1.358
保持跟uname -a 的版本一致(可詳細參考platinum兄弟的文章)
[root@jiecho]# cd /usr/src/patch-o-matic-ng-20050810
[root@jiecho]# ./runme ipp2p
[root@jiecho]# ./runme time
因爲事先做好了符號鏈接,等問你kernel和iptables的位置的時候直接回車就行,
提示你是否添加ipp2p和time模塊是就y確定,至此,netfilter的補丁打完了,如果你需要別的模塊可以根據需要加上.
4,編譯kernel的modules
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make menuconfig
在Device Drivers->;Networking support->;Networking options->;Network packet filtering (replaces ipchains)
->;IP: Netfilter Configuration中把下面的兩項M選中.
<M>; TIME match support
<M>; IPP2P match support
然後保存退出
4,編譯安裝模塊
下面就是最重要的步驟了,因爲我們的原則是節省時間,不重新編譯內核,而只編譯其中的模塊,
這點2.4的內核跟2.6的內核有所不同,鬱悶了我一整天,2.4內核的模塊是以*.o形式的,而2.6內核是以*.ko形式的,
這有個改變的方法,參考:http://blog.chinaunix.net/article.php?articleId=40742&blogId=2662
[root@jiecho]# make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/conmakehash
HOSTCC scripts/kallsyms
CC scripts/empty.o
HOSTCC scripts/mk_elfconfig
MKELF scripts/elfconfig.h
HOSTCC scripts/file2alias.o
HOSTCC scripts/modpost.o
HOSTCC scripts/sumversion.o
HOSTLD scripts/modpost
HOSTCC scripts/pnmtologo
HOSTCC scripts/bin2c
到這裏就可以ctrl+c中止了,因爲我們不是要編譯所有的模塊,這樣太浪費時間,而僅僅是netfilter的模塊,
但是如果你直接執行make modules SUBDIRS=net/ipv4/netfilter就會出錯,這就是2.4和2.6的區別,
我們先生成了scripts目錄下的一系列需要的文件後就可以make modules SUBDIRS=net/ipv4/netfilter,
並用modpost等等把*.o文件生成爲*.ko文件.
[root@jiecho]# make modules SUBDIRS=net/ipv4/netfilter
編譯完成netfilter的模塊後拷貝編譯完成的模塊
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_ipp2p.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_time.ko
[root@jiecho]# depmod -a
5,編譯iptables
[root@jiecho]# cd /usr/src/iptables
參照INSTALL文件我們進行編譯安裝
[root@jiecho]# make KERNEL_DIR=/usr/src/linux
會有錯誤編譯不過
/usr/src/linux/include/linux/config.h:6:2: [root@jiecho]#error including kernel header in userspace; use the glibc headers instead!
我google了半天也沒有找到是什麼原因,就自己動手解決
[root@jiecho]# vi /usr/src/linux/include/linux/config.h把下面的三行註釋掉
//#ifndef __KERNEL__
//#error including kernel header in userspace; use the glibc headers instead!
//#endif
然後重新編譯安裝
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
完成安裝以後測試一下
[root@jiecho]# iptables -V
[root@jiecho]# modprobe ipt_time
[root@jiecho]# modprobe ipt_ipp2p
[root@jiecho]# lsmod
ipt_time 2432 0
ipt_ipp2p 7552 0
ipt_REJECT 4736 1
ipt_state 1536 1
ip_conntrack 24968 1 ipt_state
iptable_filter 2048 1
ip_tables 13440 5 ipt_time,ipt_ipp2p,ipt_REJECT,ipt_state,iptable_filter
battery 6924 0
ipv6 184288 10
3c59x 30376 0
binfmt_misc 7176 1
nls_utf8 1536 4
ntfs 81516 4
dm_mod 33184 0
uhci_hcd 23708 0
button 4504 0
asus_acpi 8472 0
ac 3340 0
ext3 102376 4
jbd 40216 1 ext3
測試iptables
[root@jiecho]# iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
[root@jiecho]# iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri
[root@jiecho]# iptalbes -L
纔看到這個帖子,2.6下kernel的makefile做了不少改動,所以按照以前2.4的編譯方式有些地方就不太一樣了,尤其是模塊編譯
樓主前面的步驟都沒問題,只是在make modules這部其實不用按ctrl+c,
將這部替換成
make modules_prepare
然後SUBDIRS其實也可以不用了,2.6用更簡潔的方式代替,下一步可以這樣寫:
make M=net/ipv4/netfilter
然後其它步驟照舊即可。
這些都是通過看Makefile對比得出來的,我已經用過很多次了,都沒有問題。
終於成功,寫下來跟CU的兄弟們分享,我的系統爲fedora2+linux-2.6.5-1.358
1,安裝kernel源碼
[root@jiecho]# yum install kernel-source
2,下載iptables-1.3.3.tar.bz2和patch-o-matic-ng-20050810.tar.bz2並解包,爲了方便,我們都放在/usr/src下,
並把kernel和iptables做符號鏈接.
[root@jiecho]# cd /usr/src
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/iptables/iptables-1.3.3.tar.bz2
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# tar -jxvf iptables-1.3.3.tar.bz2
[root@jiecho]# tar -jxvf patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# ln -s linux學習-2.6.5-1.358 linux學習
[root@jiecho]# ln -s iptables-1.3.3 iptables
3,給netfilter打補丁,選擇你要的模塊,爲了測試我就選擇了ipp2p和time
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make mrproper
[root@jiecho]# make menuconfig
什麼不做,保存退出,然後把Makefile改一下
[root@jiecho]# vi Makefile
把EXTRAVERSION = -1.358custom更改爲EXTRAVERSION = -1.358
保持跟uname -a 的版本一致(可詳細參考platinum兄弟的文章)
[root@jiecho]# cd /usr/src/patch-o-matic-ng-20050810
[root@jiecho]# ./runme ipp2p
[root@jiecho]# ./runme time
因爲事先做好了符號鏈接,等問你kernel和iptables的位置的時候直接回車就行,
提示你是否添加ipp2p和time模塊是就y確定,至此,netfilter的補丁打完了,如果你需要別的模塊可以根據需要加上.
4,編譯kernel的modules
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make menuconfig
在Device Drivers->;Networking support->;Networking options->;Network packet filtering (replaces ipchains)
->;IP: Netfilter Configuration中把下面的兩項M選中.
<M>; TIME match support
<M>; IPP2P match support
然後保存退出
4,編譯安裝模塊
下面就是最重要的步驟了,因爲我們的原則是節省時間,不重新編譯內核,而只編譯其中的模塊,
這點2.4的內核跟2.6的內核有所不同,鬱悶了我一整天,2.4內核的模塊是以*.o形式的,而2.6內核是以*.ko形式的,
這有個改變的方法,參考:http://blog.chinaunix.net/article.php?articleId=40742&blogId=2662
[root@jiecho]# make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/conmakehash
HOSTCC scripts/kallsyms
CC scripts/empty.o
HOSTCC scripts/mk_elfconfig
MKELF scripts/elfconfig.h
HOSTCC scripts/file2alias.o
HOSTCC scripts/modpost.o
HOSTCC scripts/sumversion.o
HOSTLD scripts/modpost
HOSTCC scripts/pnmtologo
HOSTCC scripts/bin2c
到這裏就可以ctrl+c中止了,因爲我們不是要編譯所有的模塊,這樣太浪費時間,而僅僅是netfilter的模塊,
但是如果你直接執行make modules SUBDIRS=net/ipv4/netfilter就會出錯,這就是2.4和2.6的區別,
我們先生成了scripts目錄下的一系列需要的文件後就可以make modules SUBDIRS=net/ipv4/netfilter,
並用modpost等等把*.o文件生成爲*.ko文件.
[root@jiecho]# make modules SUBDIRS=net/ipv4/netfilter
編譯完成netfilter的模塊後拷貝編譯完成的模塊
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_ipp2p.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_time.ko
[root@jiecho]# depmod -a
5,編譯iptables
[root@jiecho]# cd /usr/src/iptables
參照INSTALL文件我們進行編譯安裝
[root@jiecho]# make KERNEL_DIR=/usr/src/linux
會有錯誤編譯不過
/usr/src/linux/include/linux/config.h:6:2: [root@jiecho]#error including kernel header in userspace; use the glibc headers instead!
我google了半天也沒有找到是什麼原因,就自己動手解決
[root@jiecho]# vi /usr/src/linux/include/linux/config.h把下面的三行註釋掉
//#ifndef __KERNEL__
//#error including kernel header in userspace; use the glibc headers instead!
//#endif
然後重新編譯安裝
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
完成安裝以後測試一下
[root@jiecho]# iptables -V
[root@jiecho]# modprobe ipt_time
[root@jiecho]# modprobe ipt_ipp2p
[root@jiecho]# lsmod
ipt_time 2432 0
ipt_ipp2p 7552 0
ipt_REJECT 4736 1
ipt_state 1536 1
ip_conntrack 24968 1 ipt_state
iptable_filter 2048 1
ip_tables 13440 5 ipt_time,ipt_ipp2p,ipt_REJECT,ipt_state,iptable_filter
battery 6924 0
ipv6 184288 10
3c59x 30376 0
binfmt_misc 7176 1
nls_utf8 1536 4
ntfs 81516 4
dm_mod 33184 0
uhci_hcd 23708 0
button 4504 0
asus_acpi 8472 0
ac 3340 0
ext3 102376 4
jbd 40216 1 ext3
測試iptables
[root@jiecho]# iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
[root@jiecho]# iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri
[root@jiecho]# iptalbes -L
纔看到這個帖子,2.6下kernel的makefile做了不少改動,所以按照以前2.4的編譯方式有些地方就不太一樣了,尤其是模塊編譯
樓主前面的步驟都沒問題,只是在make modules這部其實不用按ctrl+c,
將這部替換成
make modules_prepare
然後SUBDIRS其實也可以不用了,2.6用更簡潔的方式代替,下一步可以這樣寫:
make M=net/ipv4/netfilter
然後其它步驟照舊即可。
這些都是通過看Makefile對比得出來的,我已經用過很多次了,都沒有問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.