歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux防火牆對P2P流量的限制(1)

看到一則報道說盡管某寬帶公司現有技術可以容納的網絡用戶容量為400至600萬用戶,可是目前,在容納了45萬用戶的情況下,網絡已經擁擠不堪,時常出現斷網情況,一到上網高峰,網速就會急劇下降。為何網絡會如此擁擠不堪?這是因為自從出現諸如電驢、Kazaa、BT等P2P軟件之後,海量的數據文件(如大容量文件交換、視頻文件下載等)逐漸占據了大部分的網絡帶寬。P2P這一新應用給用戶帶來了前所未有的方便和豐富的資源,但同時也引發了網絡帶寬和安全問題。如何在發揮P2P強大功能的情況下對其進行一些必要的限制呢?本文將介紹在Linux中如何利用netfilter/iptables實現對P2P應用流量的限制。升級內核由於在公開發布的Linux內核文件中,有關iptables的各種參數裡沒有關於P2P屬性的參數,所以必須通過升級Linux內核和iptables來打上這個補丁,使其支持P2P屬性設置。在具體操作之前,先要了解一下升級內核補丁需要的一些相關軟件:linux-2.4.20-8.tar.gz、patch-o-matic- 20040609.tar.bz2、iptables-1.2.8.tar.bz2、iptables-p2p-0.3.0a.tar.gz和ipp2p -0.5c.tar.gz。這裡的測試環境為Red Hat 9.0,內核為2.4.20-8。由於2.4.*是一個穩定的內核,因此不能把當前開發的一些新功能提交到主內核中去,而只能首先在patch-o- matic中測試,然後打補丁到內核中。在CVS中可以找到最新的patch-o-matic包—Patch-o-matic- 20040609.tar.bz2。有了內核支持後,還需要iptables支持,其中iptables-p2p-0.3.0a.tar.gz為netfilter/iptables組織開發的專門支持P2P的iptables擴展軟件包;ipp2p-0.5c.tar.gz為Eicke Friedrich開發的一個支持P2P的iptables擴展包。這兩個擴展包各有特色,後面將會分別介紹。裝載模塊首先在/usr/src下解壓軟件包:

#bzip2 -d patch-o-matic-20040609.tar.bz2生成patch-o-matic-20040609.tar.out。

#tar xvf patch-o-matic-20040609.tar.out生成補丁目錄patch-o-matic-20040609。Red Hat 9.0中默認的內核目錄為/usr/src/linux-2.4。進入補丁目錄/usr/src/patch-o-matic-20040609,由於支持P2P協議控制選項需要CONNMARK模塊,該模塊在extra子目錄下,因此需要運行如下命令來升級內核補丁。

#KERNEL_DIR=/usr/src/linux-2.4 ./runme extra運行該命令後會出現一個模塊選擇界面,界面有兩個區域,一個給出相關的模塊名、模塊功能、用法和語法實例;另一個給出各種選項,如N/y/b/r.../q/?,其中第一個為大寫字母,表示缺省選項,n表示下一個模塊,y表示確定,b表示上一個模塊,q表示退出。 首先應該確定當前的模塊是否需要,不需要就按“N”鍵後回車,繼續顯示下一個模塊的相關信息。當出現需要的模塊時,按“Y”鍵確認,同時應該將裡面的相關語法實例抄錄下來以備用。選擇完所有需要的模塊後,按“Q”鍵退出。 編譯內核 進入內核文件所在目錄/usr/src/linux-2.4,開始編譯內核:

#make mrproper #make xconfig(或#make menUConfig)注意,在配置選項中必須選擇Networking options→IP:Netfilter Configuration→Connection mark tracking support和CONNMARK target support兩個選項。確保關鍵文件在正確位置:

#make dep 編譯大內核: <CENTER><ccid_nobr> <table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> <tr> <td bgcolor="e6e6e6" class="code" > <pre><ccid_code> #make bzImage編譯選擇的模塊:

#make modules將編譯後的模塊轉移到系統標准位置:

#make modules_install讓系統自動修改啟動配置文件grub.conf:

#make install重新啟動系統,選擇Red Hat Linux(2.4.20-8custom)選項,則啟動了新編譯的內核。 升級iptables 安裝iptables-1.2.8 首先解壓iptables-1.2.8.tar.bz2文件:

#bzip2 -d iptables-1.2.8.tar.bz2 #tar xvf iptables-1.2.8.tar.out編譯iptables-1.2.8:

#make KERNEL_DIR=/usr/src/linux-2.4 #make install KERNEL_DIR=/usr/src/linux-2.4 #make install-devel拷貝可執行文件到相應目錄:

#cp iptables iptables-save iptables-restore /sbin安裝iptables-p2p軟件 首先解壓iptables-p2p-0.3.0a.tar.gz:

#tar zxvf iptables-p2p-0.3.0a.tar.gz #cd iptables-p2p-0.3.0a拷貝iptables-1.2.8的頭文件到適當的目錄:

#cp -a /usr/src/iptables-1.2.8/include/* /usr/include運行“make”編譯iptables-p2p,並拷貝相關文件到相應的目錄:

#make #cp kernel/ipt_p2p.o /lib/modules/2.4.20-8custom/kernel/net/ipv4/netfilter/ #cp iptables/libipt_p2p.so /lib/iptables/安裝ipp2p軟件 首先修改Makefile文件中的源目錄、內核目錄和netfilter版本號,將以下內容:

IKERNEL = -I/usr/src/linux/include IUSER = -I/usr/src/iptables-1.2.7a/include NETFILTER_VERSION = \"1.2.7a\"改為:

IKERNEL = -I/usr/src/linux-2.4/include IUSER = -I/usr/src/iptables-1.2.8/include NETFILTER_VERSION = \"1.2.8\"編譯軟件,並拷貝庫文件到相應的目錄:

#make #cp libipt_ipp2p.so /lib/iptables裝入模塊:

#insmod ipt_ipp2p QQRead.com 推出數據恢復指南教程 數據恢復指南教程 數據恢復故障解析 常用數據恢復方案 硬盤數據恢復教程 數據保護方法 數據恢復軟件 專業數據恢復服務指南 看到一則報道說盡管某寬帶公司現有技術可以容納的網絡用戶容量為400至600萬用戶,可是目前,在容納了45萬用戶的情況下,網絡已經擁擠不堪,時常出現斷網情況,一到上網高峰,網速就會急劇下降。為何網絡會如此擁擠不堪?這是因為自從出現諸如電驢、Kazaa、BT等P2P軟件之後,海量的數據文件(如大容量文件交換、視頻文件下載等)逐漸占據了大部分的網絡帶寬。P2P這一新應用給用戶帶來了前所未有的方便和豐富的資源,但同時也引發了網絡帶寬和安全問題。如何在發揮P2P強大功能的情況下對其進行一些必要的限制呢?本文將介紹在Linux中如何利用netfilter/iptables實現對P2P應用流量的限制。升級內核由於在公開發布的Linux內核文件中,有關iptables的各種參數裡沒有關於P2P屬性的參數,所以必須通過升級Linux內核和iptables來打上這個補丁,使其支持P2P屬性設置。在具體操作之前,先要了解一下升級內核補丁需要的一些相關軟件:linux-2.4.20-8.tar.gz、patch-o-matic- 20040609.tar.bz2、iptables-1.2.8.tar.bz2、iptables-p2p-0.3.0a.tar.gz和ipp2p -0.5c.tar.gz。這裡的測試環境為Red Hat 9.0,內核為2.4.20-8。由於2.4.*是一個穩定的內核,因此不能把當前開發的一些新功能提交到主內核中去,而只能首先在patch-o- matic中測試,然後打補丁到內核中。在CVS中可以找到最新的patch-o-matic包—Patch-o-matic- 20040609.tar.bz2。有了內核支持後,還需要iptables支持,其中iptables-p2p-0.3.0a.tar.gz為netfilter/iptables組織開發的專門支持P2P的iptables擴展軟件包;ipp2p-0.5c.tar.gz為Eicke Friedrich開發的一個支持P2P的iptables擴展包。這兩個擴展包各有特色,後面將會分別介紹。裝載模塊首先在/usr/src下解壓軟件包:

#bzip2 -d patch-o-matic-20040609.tar.bz2生成patch-o-matic-20040609.tar.out。

#tar xvf patch-o-matic-20040609.tar.out生成補丁目錄patch-o-matic-20040609。Red Hat 9.0中默認的內核目錄為/usr/src/linux-2.4。進入補丁目錄/usr/src/patch-o-matic-20040609,由於支持P2P協議控制選項需要CONNMARK模塊,該模塊在extra子目錄下,因此需要運行如下命令來升級內核補丁。

#KERNEL_DIR=/usr/src/linux-2.4 ./runme extra運行該命令後會出現一個模塊選擇界面,界面有兩個區域,一個給出相關的模塊名、模塊功能、用法和語法實例;另一個給出各種選項,如N/y/b/r.../q/?,其中第一個為大寫字母,表示缺省選項,n表示下一個模塊,y表示確定,b表示上一個模塊,q表示退出。 首先應該確定當前的模塊是否需要,不需要就按“N”鍵後回車,繼續顯示下一個模塊的相關信息。當出現需要的模塊時,按“Y”鍵確認,同時應該將裡面的相關語法實例抄錄下來以備用。選擇完所有需要的模塊後,按“Q”鍵退出。 編譯內核 進入內核文件所在目錄/usr/src/linux-2.4,開始編譯內核:

#make mrproper #make xconfig(或#make menuconfig)注意,在配置選項中必須選擇Networking options→IP:Netfilter Configuration→Connection mark tracking support和CONNMARK target support兩個選項。確保關鍵文件在正確位置:

#make dep 編譯大內核: <CENTER><ccid_nobr> <table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> <tr> <td bgcolor="e6e6e6" class="code" > <pre><ccid_code> #make bzImage編譯選擇的模塊:

#make modules將編譯後的模塊轉移到系統標准位置:

#make modules_install讓系統自動修改啟動配置文件grub.conf:

#make install重新啟動系統,選擇Red Hat Linux(2.4.20-8custom)選項,則啟動了新編譯的內核。 升級iptables 安裝iptables-1.2.8 首先解壓iptables-1.2.8.tar.bz2文件:

#bzip2 -d iptables-1.2.8.tar.bz2 #tar xvf iptables-1.2.8.tar.out編譯iptables-1.2.8:

#make KERNEL_DIR=/usr/src/linux-2.4 #make install KERNEL_DIR=/usr/src/linux-2.4 #make install-devel拷貝可執行文件到相應目錄:

#cp iptables iptables-save iptables-restore /sbin安裝iptables-p2p軟件 首先解壓iptables-p2p-0.3.0a.tar.gz:

#tar zxvf iptables-p2p-0.3.0a.tar.gz #cd iptables-p2p-0.3.0a拷貝iptables-1.2.8的頭文件到適當的目錄:

#cp -a /usr/src/iptables-1.2.8/include/* /usr/include運行“make”編譯iptables-p2p,並拷貝相關文件到相應的目錄:

#make #cp kernel/ipt_p2p.o /lib/modules/2.4.20-8custom/kernel/net/ipv4/netfilter/ #cp iptables/libipt_p2p.so /lib/iptables/安裝ipp2p軟件 首先修改Makefile文件中的源目錄、內核目錄和netfilter版本號,將以下內容:

IKERNEL = -I/usr/src/linux/include IUSER = -I/usr/src/iptables-1.2.7a/include NETFILTER_VERSION = \"1.2.7a\"改為:

IKERNEL = -I/usr/src/linux-2.4/include IUSER = -I/usr/src/iptables-1.2.8/include NETFILTER_VERSION = \"1.2.8\"編譯軟件,並拷貝庫文件到相應的目錄:

#make #cp libipt_ipp2p.so /lib/iptables裝入模塊:

#insmod ipt_ipp2p




Copyright © Linux教程網 All Rights Reserved