與一般的 Packet Filter 防火牆不同,應用層防火牆是在 OSI Model 中的第七層(應用層)運作,因此它可以針對各種應用程式的封包進行過濾。比較常見的應用有阻擋 MSN 通訊、限制 P2P 連線使用的頻寬、限制網路電視等等,只要是應用層防火牆有支援的協定皆可以管控。Linux 預設的情況下是不支援 L7 filter(應用層防火牆)功能的,必須要自己 patch kernel 與 netfilter 才能讓 Linux 支援此項功能。 所需套件: 1.kernel source (eg. linux-2.6.22.tar.gz) 官方網站: http://kernel.org/ 2.netfilter source (eg. iptables-1.3.8.tar.bz2) 官方網站: http://netfilter.org/ 3.l7-filter kernel version (eg. netfiilter-layer7-v2.13.tar.gz) 官方網站: http://sourceforge.net/project/showf...group_id=80085 4.Protocol definitions (eg. l7-protocols-2007-07-27.tar.gz) 官方網站: http://sourceforge.net/project/showf...group_id=80085 各個套件的用途如下。 1. kernel source:Linux 的核心原始程式碼 2. netfilter source:Linux 防火牆(netfilter)的原始程式碼 3. l7-filter kernel version:kernel 版的 l7 filter。(也有 userspace 版的) 4. Protocol definitions:定義各種應用層的協定的檔案。 註: l7-filter 完整的支援協定列表可參考此網址: http://l7-filter.sourceforge.net/protocols 實做的步驟: Patch, Configure and Compile KernelPatch and Compile Netfilter安裝Layer 7 Protocol定義檔設定防火牆 一、Patch, Configure and Compile Kernel 假設使用的 kernel 版本為 2.6.22。 1. 將下載回來的 kernel source 解壓縮後,放到 /usr/src/kernels 目錄中 引用: tar zxvf linux-2.6.22.tar.gz mv linux-2.6.22 /usr/src/kernels 2. 將下載回來的 l7-filter kernel version 解壓縮 引用: tar zxvf netfiilter-layer7-v2.13.tar.gz 裡面有幾個比較重要的檔案: iptables-for-kernel-2.6.20forward-layer7-2.13.patch ==>netfilter 的 patch 檔,適用於 kernel-2.6.20 之後的版本 iptables-for-kernel-pre2.6.20-layer7-2.13.patch ==>netfilter 的 patch 檔,適用於 kernel-2.6.20 之前的版本 kernel-2.4-layer7-2.13.patch ==>kernel 的 patch 檔,適用於 kernel-2.4 kernel-2.6.22-layer7-2.13.patch ==>kernel 的 patch 檔,適用於 kernel-2.6.22 3. 將 kernel 的 patch 檔複製到 kernel source tree 的根目錄(/usr/src/kernels/linux-2.6.22) 引用: cp kernel-2.6.22-layer7-2.13.patch /usr/src/kernels/linux-2.6.22 4. Patch Kernel 引用: cd /usr/src/kernels/linux-2.6.22 patch -p1 < kernel-2.6.22-layer7-2.13.patch 5. 設定 kernel Patch Kernel 後,現在我們手上所擁有的 Kernel 已經可以支援 Layer 7 Filter,接下來我們必須要 "啟用" 此項功能。 引用: cd /usr/src/kernels/linux-2.6.22 make menuconfig Code maturity level options ---> Prompt for development and/or incomplete code/drivers Networking ---> Networking options ---> Network packet filtering framework --> 將 Core Netfilter Configuration 與 IP: Netfilter Configuration 這兩個項目中所有的項目皆啟用。 註: 最重要的項目分別是 Netfilter Xtables support、Netfilter connection tracking support、Layer 7 match support,但官方手冊建議最好把與 netfilter 有關的選項都開啟。 6. 編譯與安裝 kernel 引用: make clean 清除已前complie留下的舊檔案,由於我們是第一次compile,此指令可有可無。 引用: make bzImage 編譯 Linux 系統核心。 引用: make modules 編譯模組。 引用: make modules_install 安裝模組,預設會安裝到 /lib/modules/2.6.22 目錄下。 引用: make install 安裝 Linux 系統核心,會自動進行下列事項: a. 將 bzImage 改名為 vmlinuz-2.6.22 並複製到 /boot b. 建立 initrd-2.6.22.img 並複製到 /boot c. 將 System.map 複製到 /boot 並改名為 System.map-2.6.22 d. 修改 /boot/grub/grub.conf 二、Patch and Compile Netfilter 假設使用的 netfilter 版本為 1.3.8。 1. 將下載回來的 netfilter source 解壓縮後,放到 /usr/local/src 目錄中 引用: tar jxvf iptables-1.3.8.tar.bz2 mv iptables-1.3.8 /usr/local/src 2. Patch Netfilter 引用: cp iptables-for-kernel-2.6.20forward-layer7-2.13.patch /usr/local/src/iptables-1.3.8 cd /usr/local/src/iptables-1.3.8 patch -p1 < iptables-for-kernel-2.6.20forward-layer7-2.13.patch 3. 編譯 netfilter 引用: make KERNEL_DIR=/usr/src/kernels/linux-2.6.22 註:KERNEL_DIR 必須要指到我們之前已經 patch 好的 kernel source 4.安裝 netfilter 引用: make install KERNEL_DIR=/usr/src/kernels/linux-2.6.22 這裡務必要注意,netfilter 預設是會安裝到 /usr/local/sbin 目錄下,不會覆蓋系統原來的版本(在 /sbin 目錄),所以當你執行 "iptables" 這個指令時會使用到的依然是系統原來的版本,而不是你自己編譯的版本。若要使用自己編譯的 netfilter 務必要使用絕對路徑來呼叫,例如 /usr/local/sbin/iptables。 當kernel與netfilter都編譯與安裝完成後,記得要重新開機並使用新的系統核心啟動Linux。 三、安裝Layer 7 Protocol定義檔 tar zxvf l7-protocols-2007-07-27.tar.gz] cd l7-protocols-2007-07-27 make install 註:定義檔預設會安裝到 /etc/l7-protocols。 四、設定防火牆 當一切都準備就緒時就可以使用netfilter來過濾Layer 7的封包,指令格式如下: 引用: iptables [specify table & chain] -m layer7 --l7proto [name of protocol] -j [action] 例如若我們要阻擋MSN通訊,則可以使用以下指令: 引用: iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP iptables -A FORWARD -m layer7 --l7proto msn-filetransfer -j DROP 发表于: 2007-09-24,修改于: 2007-09-24 20:13 已浏览357次,有评论2条 推荐 投诉 网友评论 本站网友 时间:2008-06-04 16:30:59 IP地址:218.22.21.★ 楼主,我照你的步骤进行到make bzlmage时,出现下列信息: HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/kxgettext.o HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/confscripts/kconfig/conf -s arch/i386/Kconfigmake: *** 没有规则可以创建目标“bzlmage”。 停止。