| 看了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,編譯安裝模塊 下面就是最重要的步驟了,因為我們的原則是節(jié)省時間,不重新編譯內核,而只編譯其中的模塊, 這點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的模塊, 但是如果你直接執(zhí)行make modules SUBDIRS=net/ipv4/netfilter就會出錯,這就是2.4和2.6的區(qū)別, 我們先生成了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
|
|