L7-filter 安裝實錄 -- Jamyy‘s Weblog

来源:百度文库 编辑:神马文学网 时间:2024/04/30 06:01:56
L7-filter 安裝實錄
L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的外掛模組, 它能讓 Linux 的 iptables 支援 Layer 7 (Application 應用層) 封包過濾功能, 限制 P2P、即時通訊等使用動態埠口的網路軟體.
以下是在 Fedora Core 3 的安裝過程:
下載 Layer 7 Patches & Protocol definitions
下載點:
http://sourceforge.net/project/showfiles.php?group_id=80085
(Ref:http://l7-filter.sourceforge.net/HOWTO#Get)
分別下載並解包至 /usr/local/src, 本篇以 l7-protocols-2005-12-16 和 netfilter-layer7-v2.0 為例
先安裝 Layer 7 Protocol definitions:
cd /usr/local/src/l7-protocols-2005-12-16
make install
安裝 kernel source
依需求選擇下載點:
http://www.kernel.org/pub/linux/kernel/ (Linux kernel source 官方下載點)ftp://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/3/SRPMS/ (FC3 原始核心原碼下載)ftp://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/updates/3/SRPMS/ (FC3 新版核心原碼下載)
Fedora Core 系列 kernel.src.rpm 操作備忘:
wgetftp://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/3/SRPMS/kernel-2.6.9-1.667.src.rpm
rpm -ivh kernel-2.6.9-1.667.src.rpm
cd /usr/src
tar -jxf ./redhat/SOURCES/linux-2.6.9.tar.bz2
ln -s linux-2.6.9 linux
重新編譯、安裝 Layer 7 Patches 更新過的 kernel source
cd /usr/src/linux
patch -p1 < /usr/local/src/netfilter-layer7-v2.0/kernel-2.6.13-2.6.14-layer7-2.0.patch (選用與核心版本對應的 patch 檔)
make oldconfig (如果之前已經有編譯過 kernel source, 需先執行 make mrproper)
重點: Layer 7 match support (EXPERIMENTAL)... [N/m/?] (NEW) -> m
(亦可全部按 Enter 接受預設值, 再 make menuconfig 進行調整)
make menuconfig (若需進一步設定 kernel config 才執行; make menuconfig 需求套件: ncurses-devel)
重點 (以 kernel 2.6.13 為例, 不同的核心版本排列方式不一定相同):
Code maturity level options --> [*] Prompt for development and/or incomplete code/drivers
Networking --> Networking options -->
[*] Network packet filtering (replaces ipchains) -->
IP: Netfilter Configuration -->
Connection tracking (required for masq/NAT)
[*] Connection tracking flow accounting
IP tables support (required for filtering/masq/NAT)
Layer 7 match support
make bzImage (kernel 2.4 需先執行 make dep)
make modules
make modules_install
make install
安裝 Layer 7 Patches 更新過的 iptables
至http://netfilter.org/ 下載 iptables source
解包至 /usr/local/src, 本篇以 iptables-1.3.4 為例
cd /usr/local/src/iptables-1.3.4
patch -p1 < ../netfilter-layer7-v2.0/iptables-layer7-2.0.patch
chmod +x ./extensions/.layer7-test
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
若原本已安裝 iptables 套件的處理
cd /sbin
mv iptables iptables.old
ln -s /usr/local/sbin/iptables iptables
chkconfig iptables on
vi /boot/grub/menu.lst (改成預設以新的 kernel 開機)
reboot
使用 iptables layer-7 filter
iptables -t mangle -A PREROUTING -m layer7 --l7proto yahoo -j DROP (禁止 Yahoo! Messenger 封包)
L7-filter 支援的所有通訊協定:L7-filter Supported Protocols
亦可使用 -j MARK 參數搭配 QoS 頻寬管理, 詳情可參考:cbq.init 設定手札
iptables 封包過濾圖:http://linux-ip.net/nf/nfk-traversal.png
後記 1. - make oldconfig 的奧秘
make oldconfig 會比對舊的 kernel config, 帶入先前的設定值來產生新的 kernel config, 這樣就不用在 make menuconfig 的時候改太多設定. 舊的 kernel config 通常可以在這兩個地方找到:
/boot/config-2.x.x-x /usr/src/linux/.config (如果這個 kernel source 之前有編譯過的話)
後記 2. - Trustix 2.2 安裝備忘
以 swup 安裝 kernel source 需先修改 swup 設定檔:
vi /etc/swup/swup.conf --> 註解 exclude_pkg_regexp = "kernel.*"
swup --install kernel-source
經前述程序安裝完成後, iptables 使用 layer7 參數時會出現錯誤訊息:
iptables v1.3.4: Couldn‘t load match `layer7‘:/usr/local/lib/iptables/libipt_layer7.so: undefined symbol: __guard
任何版本的 iptables 都會出現相同的錯誤訊息, 目前尚未找出解決辦法...
參考資料:
鳥哥的 Linux 新手討論區 - 打造 Linux 具有 L7-Filter Function?Layer 7 Classifier HOWTO
相關網頁:
Application Layer Packet Classifier for LinuxL7-filter Supported ProtocolsNetfilter Packet Traversal
Posted by Jamyy at 2005年12月26日 16:33
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/153
Listed below are links to weblogs that referenceL7-filter 安裝實錄:
»網管的利器 - L7-filter from 瓶水相逢 - CHHuang
 
[Read More]
Tracked on 2006年07月01日 11:31
Comments
你好,我是初學者,看到你發表的文章覺得收獲良多,感謝你的分享
我現在因為要用l7-filter,在網路上看來看去你寫的最清楚
我是用fedora5 kernel 2.6.15-1 ,netfilter-layer7-v2.2,iptables-1.3.5
我照你的方法做完全部
最後重開機後,下iptables -t mangle .....等
出現error
iptables unknow error 4294967295
不知從這錯誤你可以看出是什麼問題嗎?
謝謝...高手...不吝賜教.....
Posted by: eric at 2006年05月19日 11:22
您好!
我最近剛好也在 Fedora Core 5 (kernel 2.6.15-1.2054_FC5)
安裝了 iptables 1.3.5 和 l7-filter
不過並沒有發生你說的那種問題
以下提供幾個參考方向:
1. 若只有部份的 iptables -m layer7 --l7proto 有問題,
應該是參數錯誤所致. 請查明參數的確實用法,
或將無法執行的 iptables 指令告訴我,
我再幫您看看是哪邊出問題
2.執行 find /lib/modules/$(uname -r) -name "*layer7*"
和 find /usr/local/lib -name "*layer7*"
正常的話可以找到 ipt_layer7.ko 和 libipt_layer7.so 這兩個檔案,
而且執行 modprobe ipt_layer7 應該不會有錯誤訊息
如果找不到檔案, 或 modprobe 執行後出現錯誤訊息
就得重新安裝 l7-filter 和 iptables 了
以上兩點是我目前可以想到的狀況, 如果都不能解決您的問題
請將您所執行的 iptables 指令告訴我, 我再幫您查查看
Posted by: Jamyy at 2006年05月19日 13:14
你所遇到的trustix的layer7模塊加載錯誤是因爲你在trustix的kernel modules編譯的時候沒有加上 CC="gcc -fno-stack-protector"參數
詳細的説明可以看trustix的官方FAQ:
http://www.trustix.org/wiki/index.php/TrustixFAQ#I_have_problems_compiling_the_kernel_and_certain_other_packages.__I_get_some___guard_error_message.
Posted by: coolzsb at 2006年06月21日 12:12
請教一下~
是不是一定要用新的Kernal去重新編譯~
假如我先使用yum下載更新了新版的Kernal後~
可不可直接用現有的Kernal呢?
Posted by: casper at 2006年09月06日 11:12
如果您想用當前版本的 kernel 來編譯 L7-Filter 其實也是可以的,
不過還是得要有 kernel source 才行.
我的方法是:
假設您使用的是 Fedora Core 5, 已經將 kernel 更新到 2.6.17-1.2174
ftp 到 ftp.isu.edu.tw, 進入 /Linux/Fedora/linux/core/updates/5/SRPMS
下載 kernel-2.6.17-1.2174_FC5.src.rpm, 並安裝之.
接著您可以在 /usr/src/redhat/SOURCES 路徑中找到 linux-2.6.17.tar.bz2
將它解包到 /usr/src, 然後建立一個 soft link (ln -s) /usr/src/linux 指到剛剛解包的路徑
接著 cd /usr/src/linux, vi Makefile, 設定 EXTRAVERSION = -1.2174 (也就是 2.6.17 後面那一串)
這樣就能以目前的 kernel 版本來安裝 L7-Filter 了.
Posted by: Jamyy at 2006年09月06日 17:39
您好~
冒味再教請一下~
我最近照著上面的步驟去作過後~
把l7 filter的drop指令寫到/etc/rc.d/rc.local中,
可是我發覺每次開機時都沒法成功,
必須開機完成後,再重下一次才會把條件式寫入到iptables內~
不知您有沒有遇到過相同的問題~
Posted by: casper at 2006年09月14日 15:46
抱歉~
我找到問題了~
是我的iptables有問題...
我再新再作ln -s的鏈結就ok了~
好奇想問您個問題...
您有沒有OpenLDAP來替代NT的經驗~
Posted by: casper at 2006年09月14日 16:39
您也可以用 iptables-save > filename 和 iptables-restore < filename 來存取 iptables 設定
這樣您的 rc.local 會更簡潔有力
不過缺點是, 日子久了可能會忘記當初的指令是怎麼打的 :P
說實在的, 我對 LDAP 一點概念都沒有...
哪天心血來潮時再來研究看看 :)
Posted by: Jamyy at 2006年09月14日 17:19
站長您好,小弟也做好了l7-filter,也成功的檔住了該擋的東東,但發現個問題,就是msn傳檔的檔不下來,就是可以登msn.但不讓傳檔,我的指令是:iptables -t mangle -I POSTROUTING -m layer7 --l7proto msn-filetransfer -j DROP
但是還是可以傳檔,我測的是msn 8~不知站長是否有試過?
Posted by: ken at 2006年09月28日 22:44
剛剛試了一下, 真的無效耶
用 iptables -L -v 參數下去看
msn_filetransfer 規則的 pkgs 和 bytes 都是 0
windows 下的 netstat 只看到 1863 port
難道 msn 已經將 msn_filetransfer 整合到 msnmessenger 的 1863 port 了嗎? (不解)
我測試的是 msn 7.5 和 msn 8
不曉得這篇是否有幫助:
http://www.hypothetic.org/docs/msn/client/file_transfer.php
Posted by: Jamyy at 2006年09月29日 00:22
你好喔,請問一下
我灌在一台有apache 的主機上,
kernel-2.6.13 iptable-1.3.5 l7-filter灌好了,過程中也都沒錯誤!
iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j DROP
我下這樣的rule,
但是我從另台電腦取存主機上的網頁,
還可是可以ㄟ,這樣是有可能是什麼問題呢?
[root@localhost ~]# iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j DROP
[root@localhost ~]# iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere LAYER7 l7proto http
===============我檢查的結果====
Posted by: kotowy at 2006年09月29日 17:35
ㄝ... 殺雞不需要用到牛刀啦
如果要限制瀏覽本機的網站
在 httpd.conf 的 裡面設定:
Order deny,allow
Deny from xxx
Allow from xxx
或是用 iptables -A INPUT -p tcp --dport 80 -s 來源 -j DROP 也可以
l7filter 在這裡無效的原因, 我想可能是因為它無法對目的地為本機 (INPUT) 的封包做管制吧? (猜的)
Posted by: Jamyy at 2006年09月29日 17:50
站長~請教您一下...
我最近在運行L7-filter時,發生了一個好怪的問題~
只要我下了這段執行...
iptables -t mangle -I POSTROUTING -m layer7 --l7proto skypeout -j DROP
很多網站就會連不進去...會停頓非常久...
例如這個網址
http://www.jfrich.com.tw/cgi-bin/jfonline/home/guest_home.jsp
不知您有沒有遇到這樣相同的情形~
Posted by: casper at 2006年11月03日 16:08
真的會讓網頁瀏覽速度變得很慢耶!
用 iptables -t mangle -L -n -v 來看
真的有封包被那行 rule 給擋下來
Posted by: Jamyy at 2006年11月03日 17:32
沒錯~
超怪的....
我今天又試了一次....
只要加上那行規則...
連看這個blog的網頁都變慢了...
真是怪~~~
Posted by: casper at 2006年11月05日 15:01
站長大人...
因為小弟剛開始接觸iptables的指令,有點不熟悉...
我想請教您一個作法...
假如我要封鎖整個網段使用MSN,然後在這個網段裡只開放幾台使用MSN....
要怎麼做才合適呢?
Posted by: casper at 2006年11月09日 12:42
您好!
假設 Linux 電腦是 Gateway, 區域網路的網段是 192.168.1.0/24
只想開放給 192.168.1.100 和 192.168.1.123 這兩台電腦使用 msn
iptables -A FORWARD -s 192.168.1.100 -m layer7 --l7proto msnmessenger -j ACCEPT
iptables -A FORWARD -s 192.168.1.123 -m layer7 --l7proto msnmessenger -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
Posted by: Jamyy at 2006年11月09日 15:36
站長:
我試過您的方法了~還是不行...
後來我用iptables -t mangle -L -n -v去看了一下...
改成這樣就ok了...
就可以單獨開放一台上線....
iptables -t mangle -A POSTROUTING -d 192.168.1.123 -m layer7 --l7proto msnmessenger -j ACCEPT
iptables -t mangle -A POSTROUTING -s 192.168.1.123 -m layer7 --l7proto msnmessenger -j ACCEPT
iptables -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
不過我本來想偷懶...想把-d 和-s 下在同一行...結果不行~
Posted by: casper at 2006年11月09日 18:21
對吼! 還有進來的封包也要允許才是 ^^‘
不過, 為什麼你在 filter 的 FORWARD 裡不能 work 呢?
(雖然官方網站也說, 放在 mangle 的 POSTROUTING 最保險)
http://l7-filter.sourceforge.net/HOWTO
Posted by: Jamyy at 2006年11月09日 19:33
我後來有試過了~其實放在FORWARD裡也是可以的....
只是因為寫習慣在POSTROUTING裡了...呵
現在還在研究把MSN傳檔的功能擋下來的功能....
不知你有沒有什麼好的建議....
Posted by: casper at 2006年11月10日 00:04
試過 L7-Filter 的 msn-filetransfer 不行
以 tcpdump 觀察, 發現 MSN 會從 tcp port: 3401 開始往上逐一找 port 將檔案傳出去, 所以無法以擋 port 的方式防治
微軟官方文件 (http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/worki01.mspx) 指出, File Transfer 使用 6891-6900. 可是看了標題才知道, 這是 "Windows Messenger" 的文件 -_-"
在合勤 ZyWALL 70 UTM 的 IDP 設定: MSN File Transfer - "Drop Session", 結果也是無效
結論: 同志仍須努力...
Posted by: Jamyy at 2006年11月10日 16:38
的確是要努力的~~~我搞了一個週末和週日都還弄不出個所以然來~~
請教一下前輩~
當我使用iptables -t mangle -L -n -v時~
雖然可以看到mangle表格裡各規則的狀況~
那麼有沒有方法可以看到是那個ip現在在使用規則呢?
例如我把skype封鎖起來..那要如何知道現在是那個IP在嚐試使用skype而被我drop掉~
Posted by: casper at 2006年11月13日 11:29
這真是一個好問題!
man iptables 發現了這個線索: ipt_account
(http://www.svn.barbara.eu.org/ipt_account/wiki)
安裝方式和 l7filter 一樣, 只要 patch kernel & iptables 就行了
以下是應用範例:
iptables -A FORWARD -m layer7 --l7proto skypetoskype -m account --aaddr 192.168.1.0/24 --aname skype -j DROP
cat /proc/net/ipt_account/skype 就能查詢統計結果
Posted by: Jamyy at 2006年11月13日 13:17
原來還要重新patch kernel~
待我試試...
感謝您提供這麼寶貴的意見~
Posted by: casper at 2006年11月13日 13:41
請問我在make modules出現下列錯誤訊息,該如何解決?
我是用FC4 and kernel-2.6.11-1.1369_FC4.src.rpm ...Thks!
[root@localhost linux]# make modules
CHK include/linux/version.h
make[1]: `arch/i386/kernel/asm-offsets.s‘ is up to date.
CC [M] drivers/i2c/i2c-core.o
In file included from drivers/i2c/i2c-core.c:29:
include/linux/i2c.h:58: error: array type has incomplete element type
include/linux/i2c.h:197: error: array type has incomplete element type
drivers/i2c/i2c-core.c: In function ‘i2c_transfer’:
drivers/i2c/i2c-core.c:594: error: type of formal parameter 2 is incomplete
drivers/i2c/i2c-core.c: In function ‘i2c_master_send’:
drivers/i2c/i2c-core.c:620: error: type of formal parameter 2 is incomplete
drivers/i2c/i2c-core.c: In function ‘i2c_master_recv’:
drivers/i2c/i2c-core.c:649: error: type of formal parameter 2 is incomplete
make[2]: *** [drivers/i2c/i2c-core.o] Error 1
make[1]: *** [drivers/i2c] Error 2
make: *** [drivers] Error 2
Posted by: Nolan at 2006年12月08日 09:48
執行 make menuconfig
到 Device Drivers --> I2C support
將 <*> I2C support 改成 I2C support 試試
Posted by: Jamyy at 2006年12月08日 11:53
Posted by: Jamyy at 2006年11月09日 19:33
我後來有試過了~其實放在FORWARD裡也是可以的....
只是因為寫習慣在POSTROUTING裡了...呵
現在還在研究把MSN傳檔的功能擋下來的功能....
不知你有沒有什麼好的建議....
--------------------------
請問你喔,在FORWARD下rule你是怎麼辦到的呢?
Posted by: Anonymous at 2007年01月22日 15:02
你是說 filter table 裡的 FORWARD chain 嗎?
就一般的寫法, 只是 -m 載入 layer7 而已囉~
ex. iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
Posted by: Jamyy at 2007年01月22日 15:26
你好.我依照此文章安裝l7 filter
不過在make modules(on FC4)之後也出現
make[2]: *** [drivers/i2c/i2c-core.o] Error 1
make[1]: *** [drivers/i2c] Error 2
make: *** [drivers] Error 2
雖然我也有進入menuconfig將I2C support改成模組
不過依然不行
後來使用FC3重灌看看
出現另一個問題 ,qla_os.o錯誤
請問這問題該如何解決呢?
難道是因為我用的netfilter是2.9的關係嗎?
Posted by: saiz at 2007年01月31日 12:32
若遇到 i2c error 取消勾選 i2c support 即可
qla_os.o 是 scsi 的東西
到 scsi 的 qla 相關項目中, 把 QLogic ISPxxx 的東西都拿掉即可 (亦可直接編輯 .config, 以 QLA 為關鍵字, 把它們最前面加上 # 就行了)
Posted by: Jamyy at 2007年01月31日 15:55
可以了.不過不是將QLogic ISPXXX給取消掉
我是用yum updates kernel*
將kernel更新到2.6.12-1.1381_FC3
在make modules部份就沒問題了
給有此問題的人另一個解決方法
Posted by: saiz at 2007年02月01日 22:11
原來換一個 kernel version 也能排除這個問題
謝謝您的分享 :)
Posted by: Jamyy at 2007年02月02日 10:47
现在好像L7已经挡不住Emule了哦,以前可以但,但emule升到了0.47C后就挡不了了;(
Posted by: spritecat at 2007年03月19日 11:21
您好~
我依照上述步驟,我可以選到 "[*] Connection tracking flow accounting " 但就是找不到 " Layer 7 match support" 這個選項,可否麻煩你幫我解答.
kernel : linux-2.6.19.7
l7 : netfilter-layer7-v2.9
我自己運行的步驟是:
1:[root@fw tmp]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.gz
2:[root@fw tmp]# cd /usr/src/
3:[root@fw src]# tar -zxvf /tmp/linux-2.6.19.7.tar.gz
4:[root@fw src]# ln -s linux-2.6.19.7/ /linux
5:取得netfilter 解壓並放在 /usr/src/netfilter-layer7-v2.9/
6:回到linux 內並執行patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch
7:再執行 make menuconfig
但是就是無法找到 Layer 7 MATCH 選項,請問我的步驟上有誤嗎?或是有漏的地方,麻煩您指點指點..謝謝.
Posted by: Bill at 2007年03月29日 11:56
您好! 請參考
http://l7-filter.sourceforge.net/HOWTO-kernel#Kernel
勾選相關項目後, Layer7 的選項就會出現了
Posted by: Jamyy at 2007年03月30日 09:56
您好
我的kernel 為 2.6.18
iptables 為 1.3.7
在 patch iptables 後
make 的過程中 會因為缺少 libipt_tcpmss.so 檔而 stop
請問是哪個部份出錯了呢?
謝謝
Posted by: litmay at 2007年04月18日 19:06
您好
我用相同的版本測試後, 並沒有出現如您所說的情況
能否請您列出完整錯誤訊息與操作過程?
Posted by: Jamyy at 2007年04月19日 08:46
前輩~
請教一個很笨的問題~
我最近因為重灌負責netfilter-layer7的主機,突然發現一個狀況~
現在netfilter-layer7只更新到v2.9,而v2.9所支援的Kernel只到kernel-2.6.19,可是當我重灌主機時,都會習慣更yum -y update的完整更新,這時kernel就是升到2.6.20的版本了,我試著安裝netfilter-layer7時,都無法作pach,所以想請教前輩~
1.yum -y update可不可以跳過Kernel的安裝~
2.現在netfilter有釋放出一套軟體叫l7-filter-userspace,好像是用來取代netfilter-layer7的,可是我怎麼裝都會出現缺少其他套件的狀況,不知前輩有沒有玩過呢?
謝謝
Posted by: casper at 2007年04月27日 17:01
from: http://cha.homeip.net/blog/archives/2005/12/l7filter.html#more