Centos5.1的核心源碼路徑為:/usr/src/kernels/2.6.18-8.el5-i686,這是個很堅挺的系統,經過長時間的檢驗效果還不錯。
因為國外的那個ipp2p產品停止開發了,所以現在只有國內的高手自己出的修正版。在這裡,我們用的是ipp2p-0.99.15。作業系統上內建的iptables版本是1.3.5。我們今天就把它們配合起來燉鍋粥,啊,錯了,是為防火牆加入反p2p功能。根據高手的說法,他是在2.6.23核心 + iptables-1.3.8下做的。於是,我前期吃了不少苦頭。滿螢幕錯誤一次又一次讓我瘋狂,不過現在我已經處驚不變了,因為我的心臟已經鍛煉的很堅強。當出現:
gcc -O3 -Wall -DIPTABLES_VERSION=/"1.3.5/" -I/root/iptables-1.3.5/include -fPIC -c libipt_ipp2p.cld -shared -o libipt_ipp2p.so libipt_ipp2p.o
這個無錯誤提示的時候,我很平靜,真的很平靜,平靜的猶如西門吹雪剛吃完老婆餅蹲在院子裡端詳他的劍。我已經不年輕了……如果在一年前,我可能還會罵出該死的GCC,破爛的防火牆模組,挨千刀的誰寫的那麼複雜的東西之類的話……而現在,我不會了。
江湖中的牛人是這樣說的:
1.解壓縮.tar.gz檔案後,進入源碼目錄。
2.修改Makefile檔案,主要是其中的KERNEL_SRC和IPTABLES_SRC,使他們指向具體的核心原始碼目錄和iptables的原始碼目錄。(核心必須要設定正確,因為通常編譯的核心都不會開啟“Module versioning support”選項;但是iptables的目錄不是必須的,只要iptables.h檔案在系統的include目錄(通常是/usr/include)中就可以)
3.如果提示編譯libipt_ipp2p.so有錯誤,請將Makefile中的“$(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o”修改為“ld -shared -o libipt_ipp2p.so libipt_ipp2p.o”。(1.3.5版的iptables使用ld沒問題;但是1.3.8版的使用ld就不行了,只能使用gcc)
4.將編譯好的libipt_ipp2p.so複製到iptables的模組目錄下(通常為/lib/iptables);將ipt_ipp2p.ko複製到核心的netfilter目錄下(通常為/lib/modules/核心名稱/kernel/net/ipv4/netfilter)
5.運行depmod -a,更新核心模組的依賴關係。
6.停止iptables服務,rmmod ipt_ipp2p,啟動iptables服務。
步驟看上去很簡單,但是實際操作的時候很多問題。唉……