使用 l7-filter 來過濾封包內容
以往網路管理者在擋如 eDonkey、eMule、kazaa... 等 P2P 軟體或是 MSN、ICQ、Yahoo Messenger...
等即時通訊軟體時, 都是消極的阻擋該軟體所使用的通訊埠。
但是大多數的軟體都可以更改所使用的埠號, 或是直接使用網頁伺服器所使用的 80 埠。
因此阻擋的成效多半不是很好。
另外由於 iptables 是屬於 OSI 模型中的第 3 層, 因此不能阻擋特定應用程式的封包, 這也就是為什麼
網路管理者只能使用阻擋 4662 埠的方式來阻擋 eDonkey 或 eMule 了。
因為這種效果不好, 所以目前有個針對 iptables 所做的子系統, 專案名稱叫 l7-filter。
其名稱為 Layer 7 Filter 的意思, 它可以做到 OSI 第 7 層 (Application Layer) 的封包過濾。
每個網路程式所產生的封包內容都會有特定的字串, 藉由檢視這些字串可以找出想要過濾軟體的封包,
進而達到阻擋的功能。
l7-filter 是 iptables 的子系統, 一定要在 NAT 上使用。NAT 伺服器是區域網路內部連到網際網路必經的地方,
l7-filter 在此處才能達到過濾的功能。
使用 l7-filter 來過濾 P2P 或即時通訊軟體
因為 l7-filter 只是 iptables 的子系統, 僅在 iptables 的功能上作延伸, 因此封包過濾的方法
和原本的 iptables 並沒有太大的不同。
7-filter 的語法格式
l7-filter 的語法與 iptables 類似, 在使用上差不多, 其格式大致如下:
iptables -t mangle -I POSTROUTING -m layer7 --l7proto http -j DROP
─┬── ───┬──── ──┬── ───┬───
使用 mangle 表格 │ 符合 Layer 7 的封包 │
使用 POSTROUTING 鏈 Layer 7 封包的通訊協定
其中比較需要注意的只有 --l7proto 參數後面所使用的 Layer 7 封包通訊協定, 它就是我們所要阻擋的封包類型。
至於如何知道該填哪些名稱, 可由我們所安裝的 l7-filter 樣式檔得知。
請檢視 /etc/l7-protocols 目錄下的 file_types、 protocols、weakpatterns、extra 及 malware 子目錄下
附檔名為 pat 的檔案, 它們就是 l7-filter 的樣式檔。
裡面有簡單的說明, 告訴您這個樣式檔可以過濾哪些類型網路軟體的封包, 以及它的過濾規則。
而 --l7proto 參數後面僅需填樣式檔的名稱即可 (不含附檔名)。
以下是筆者所檢視的 msnmessenger.pat 檔, 您只要將 --l7proto http 換成 --l7proto msnmessenger 即可阻擋 MSN。
筆者檢視 /etc/l7-protocols/protocols/msnmessenger.pat 檔的內容如下:
# MSN Messenger - Microsoft Network chat client
↑由說明可知是阻擋 MSN 的樣式檔
# Pattern quality: good Messenger
#
# Usually uses port 1863
#
http://www.hypothetic.org/docs/msn/index.php
#
# This pattern has been tested and is believed to work well.
# If it does not work for you, or you believe it could be
# improved, please
# post to
[email protected] . This list may be
# subscribed to at
#
http://lists.sourceforge.net/lists/listinfo/l7-filter-
# developers
msnmessenger
# ver: allow versions up to 99.
# usr (in case ver didn't work):
^(ver [0-9]+ msnp[1-9][0-9]? [\x09-\0d -~]* cvr|usr md5 i [ -~]*)
↑符合的封包字串
過濾常見的即時通訊軟體
常見的即時通訊軟體有 MSN Messenger、Yahoo Messenger 和 ICQ, 若要擋下這些軟體,
所需要用到的 l7-filter 樣式檔有 /etc/l7-protocols/protocols/ 目錄下的 msnmessenger.pat、yahoo.pat 與 aim.pat。
其中因為 ICQ 已經賣給 AOL (American online), 所以亦叫 AIM (AOL instant messenger)。
知道要使用哪些 l7-filter 樣式檔之後, iptables 的寫法如下:
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto msnmessenger -j DROP
↑阻擋 MSN Messenger
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto yahoo -j DROP
↑阻擋 Yahoo Messenger
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto aim -j DROP
↑阻擋 ICQ
設定好後, 可如下檢視:
[root@free ~]# iptables -t mangle -L POSTROUTING
↑檢視 mangle 表格的 POSTROUTING 鏈
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere LAYER7 l7proto aim
DROP all -- anywhere anywhere LAYER7 l7proto yahoo
DROP all -- anywhere anywhere LAYER7 l7proto msnmessenger
↑阻擋常見的即時通訊軟體
此後,只要使用者開啟即時通訊軟體時, 就會發現無法連上網路:
過濾常見的 P2P 軟體
常見的 P2P 軟體有 eMule、eDonkey、Kazaa 與 Bittorrent...等, 要擋這些軟體需要用到的 l7-filter 樣式檔有
/etc/l7-protocols/protocols 目錄下的 bittorrent.pat 與 fasttrack.pat 和 /etc/l7-protocols/weakpatterns 目錄下的
edonkey.pat 檔。
其中 bittorrent.pat 可以阻擋所有使用 bittorrent 通訊協定的軟體, 如 ABC、Bitcomet ...等。
fasttrack.pat 可以阻擋 kazaa。edonkey.pat 可以阻擋所有使用 eDonkey 通訊協定的軟體, 如 eDonkey 與 eMule... 等。
設定方式如下:
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto bittorrent -j DROP ←阻擋 bittorrent 通訊協定
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto fasttrack -j DROP ←阻擋 kazaa
[root@free ~]# iptables -t mangle -I POSTROUTING -m layer7
--l7proto edonkey -j DROP ←阻擋 eDonkey
檢視 mangle 表格的 POSTROUTING 鏈:
[root@free ~]# iptables -t mangle -L POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere LAYER7 l7proto edonkey
DROP all -- anywhere anywhere LAYER7 l7proto fasttrack
DROP all -- anywhere anywhere LAYER7 l7proto bittorrent
DROP all -- anywhere anywhere LAYER7 l7proto aim
DROP all -- anywhere anywhere LAYER7 l7proto yahoo
DROP all -- anywhere anywhere LAYER7 l7proto msnmessenger
這樣 P2P 軟體使用時會發生連線錯誤,日後也不能使用了。
l7-filter 還可以過濾很多的封包, 比方說可以限制傳輸 jpg 或 gif 格式的圖檔。
當然還有其他更多的功能, 您可以自行閱讀 /etc/l7-protocols/ 目錄下的 l7-filter 樣式檔的說明
以取得相關資訊。