(十三)洞悉linux下的Netfilter&iptables:爲防火牆增添功能模塊【實戰】

爲netfilter/iptables增添新功能模塊:ipp2p

    一個防火牆功能模塊包含兩部分:內核空間的ko模塊和用戶空間的so模塊。如下:

 

    而且文件的命令都非常有講究。例如我們有個模塊名叫AAA,那麼內核中該模塊的文件名一般爲ipt_AAA.c和ipt_AAA.h;對應的用戶空間模塊叫libipt_AAA.c。今天我通過簡單的向防火牆添加ipp2p擴展功能模塊的例子,向大家展示一下相關操作和注意事項。

 

下載ipp2p源碼:http://www.ipp2p.org/

    最新版的ipp2p-0.8.2.tar.gz支持的內核2.6.17,iptables支持1.3.1。不過這個不影響,我們稍對其源文件進行修改就可以適應我們2.6.21平臺了。修改後的源碼從“  ipp2p-0.8.2.zip ”下載。

   下載後對其解壓,然後進到ipp2p目錄下。接下來有兩種方式來編譯模塊:

1、  直接在該目錄下執行make。(備註:該目錄下的Makefile我已經改過了)

執行完make後ipt_ipp2p.ko和libipt_ipp2p.so就都生成了。

chmod x ipt_ipp2p.ko

2、  依次按下列步驟來操作:

仍然是在ipp2p-0.8.2解壓目錄裏,我係統中如下:

然後將每個文件拷貝到對應的目錄下:

在我機器上,內核源碼在/usr/src/linux-2.6.21,iptables源碼在/usr/src/iptables-1.4.0目錄下。

接下來修改/usr/src/linux-2.6.21/net/ipv4/netfilter/ipt_ipp2p.c文件:

同樣修改/usr/src/iptables-1.4.0/extensions/libipt_ipp2p.c文件如下:

 

    接換到內核源碼目錄/usr/src/linux-2.6.21目錄下

    先備份net/ipv4/netfilter/目錄下原來的Makefile文件,然後照着下面自己寫個新的Makefile。如下所示:

    ipt_ipp2p.ko就已經編譯出來了,加上執行權限後將其拷貝到/lib/modules/2.6.21目錄裏。

 

    最後編譯用戶空間的so模塊,進入到/usr/src/iptables-1.4.0:

 

    因爲我係統中有兩個版本的iptables 1.3.5和1.4.0,其中1.3.5的庫文件位於/lib/iptables目錄;1.4.0我將其放置在/lib/iptables-1.4.0/iptables目錄。

    最後我們來使用一下ipp2p模塊,執行iptables -m ipp2p -h應該可以看到下列提示:

 

 

    加載ipp2p內核模塊:

    insmod /lib/modules/2.6.21/kernel/net/ipv4/netfilter/ipt_ipp2p.ko

 

 

    總結,雖然方法一干淨利落,犀利快捷,可是不利於我們理解netfilter/iptables代碼的組織架構。方法二雖然麻煩,但學的知識更多些。大家各取所需吧。

 

    網上還流傳另外一種通過補丁包的方式來爲iptables擴展功能模塊,這裏我簡單提一下,因爲那玩意兒更easy。一般是到ftp://ftp.netfilter.org/pub/patch-o-matic-ng/下載對應的補丁文件,在本地將其解壓後進入補丁文件夾,一般執行:./runme ipp2p,然後根據提示輸入一些配置路徑就OK了。它會自動幫你完成文件的拷貝,Makefile的修改,很方便。感興趣的朋友可以去試一下。

    未完,待續…

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章