天天看點

iptables之三:基于iptables實作7層通路過濾

一、實作方法

   iptables它是一個典型的網絡防火牆,也就是說,它最多也就隻能過濾TCP/IP協定棧,對于像QQ,迅雷,酷狗,大智慧等這樣的應用層協定,iptables是沒有用武之地的;可什麼事情都不是絕對的,這不,美國的一個大牛程式員就為iptables/netfilter開發了一個更新檔,隻要為核心打上layer7這個更新檔,那麼你就不會再為過濾QQ等應用層協定而憂愁了,實作起來就是分分鐘鐘的事。因為netfilter是工作于核心空間的,是以我們為其打上更新檔後需重新編譯核心。而目前官網提供的layer7版本比較低,如果想要實作其功能,隻有兩個方法:第一為核心降級,第二需編譯核心源碼。

二、實作必備軟體包

1、核心源碼包

2、layer7核心更新檔

3、iptables源碼包

4、l7-protocols協定包

   為了友善,我們把需要的包都放到/root/app下

<a href="http://s3.51cto.com/wyfs02/M02/23/B1/wKiom1M-nTLzmFu3AAAYXUiLtz4591.png" target="_blank"></a>

三、經驗分享,血淋淋的教訓(2天錯誤總結)

1、要同步系統時間到目前日期

 此時需要執行:

find . -type f | xargs -n 5 touch

    make clean

    make

2、保證磁盤空間要足夠大

3、IPv4連接配接追蹤功能要編譯成子產品,而非編入核心

四、實作過程

1、擷取并編譯核心

1)安裝核心源碼包需建立一個mockbuild使用者,否則會報錯

2)# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm

   安裝核心rpm包後會在/root下生成一rpmbuild目錄,在/root/rpmbuild/SOURCES下就會有核心源碼包和一堆config

3)進入~/rpmbuild/SOURCES目錄,解壓tar包

<a href="http://s3.51cto.com/wyfs02/M01/23/B2/wKioL1M-nSfCdB53AACcsjvUlY8024.png" target="_blank"></a>

 為解壓後的目錄建立軟連結,友善以後使用

<a href="http://s3.51cto.com/wyfs02/M00/23/B1/wKiom1M-nYvjAkWbAAAr7W7QZ78808.png" target="_blank"></a>

2、解壓更新檔包,拿到etfilter-layer7更新檔

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKioL1M-naTiopFZAABPl9jba0I286.png" target="_blank"></a>

3、進入核心源碼目錄,為其打上layer7更新檔

<a href="http://s3.51cto.com/wyfs02/M01/23/B1/wKiom1M-nfDjSAwhAACM6A35nVE569.png" target="_blank"></a>

4、以本地核心配置檔案為模闆,編譯核心

1

2

<code>[root@nmshuishui linux]</code><code># cp /boot/config-2.6.32-358.el6.x86_64 .config</code>

<code>[root@nmshuishui linux]</code><code># make menuconfig</code>

(1)裝載核心配置子產品layer7

Networking support---&gt;Networking options---&gt;Network packet filtering framework(Netfilter)---&gt;core Netfilter Configuration---&gt;"layer7" match support

<a href="http://s3.51cto.com/wyfs02/M02/23/B1/wKiom1M-nhLy9xPbAACETnoX1hE197.png" target="_blank"></a>

(2)開啟連接配接追蹤

Networking support---&gt;Networking options---&gt;Network packet filtering framework(Netfilter)---&gt;core Netfilter Configuration---&gt;Netfilter connection tracking support

<a href="http://s3.51cto.com/wyfs02/M00/23/B1/wKiom1M-niiDSwBHAACAAJsqOJE306.png" target="_blank"></a>

(3)開啟IPv4的NAT連接配接追蹤功能

Networking support---&gt;Networking options---&gt;Network packet filtering framework(Netfilter)---&gt;IP:Netfilter Configuration---&gt;IPv4 connection tracking support (required for NAT)

(4)取消子產品簽名認證

   redhat的簽名認證,是一種反盜版機制,如果不取消,則拒絕編譯

Enable loadable module support---&gt;Module signature verification(EXPERIMENTAL)

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKioL1M-nmKR_aXfAABh6oyZUPQ500.png" target="_blank"></a>

(5)關閉核心簽名檢查

Cryptographic API---&gt;In-kernel signature checker(EXPERIMENTAL)

<a href="http://s3.51cto.com/wyfs02/M01/23/B2/wKiom1M-nqfSysxEAABcSI-7M9I031.png" target="_blank"></a>

(6)儲存退出

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKioL1M-npDRcYHwAAATwN9PZu8931.png" target="_blank"></a>

5、編譯并安裝核心

3

<code># make -j 4</code>

<code># make modules_install</code>

<code># make install</code>

經過漫長的兩個小時的編譯,居然還沒有編譯完事,端起來電腦看,螢幕一直在滾動,終于發現了它好像一直就在那一個頁面循環啊!

<a href="http://s3.51cto.com/wyfs02/M01/23/B2/wKioL1M-nq7g6U5qAAB54EnNGu0158.png" target="_blank"></a>

又經過了漫長的一夜的等待,回頭一看,居然又報錯了,真是天理難容啊!

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKiom1M-nu_imc0nAAA0LFZm5v4572.png" target="_blank"></a>

貌似是在說磁盤空間不足的問題,那就使用df -h查檢視吧

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKioL1M-ntbSJlOlAAAZk2WffXA442.png" target="_blank"></a>

   果然是100%了,哎,又沒做LVM,看來隻能重做個系統了,給根分大點,再重新來一次。

又經過漫長的一上午的艱苦等待,還是沒有成功,居然又給報了一個錯,說是找不到IPv4連接配接追蹤子產品?(氣的忘截圖了)突然想起來那我會編譯的時候是直接編譯到核心了,看來不行,那就改成子產品方式(上面步驟中已經改正),再來!……又過了好久好久 終于OK了!

6、重新開機系統,啟用新核心

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKioL1M-nv2CABYBAAAjrwWap5Y812.png" target="_blank"></a>

7、編譯iptables

(1)為iptables打更新檔

現在雖然核心支援layer7了,但是iptables并不支援layer7指令,是以我們還需要編譯iptables,為iptables打更新檔,讓其能夠支援layer7指令

<code># tar xf iptables-1.4.20.tar.gz</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKiom1M-n1KB592vAACBi6kTKTk996.png" target="_blank"></a>

(2)備份iptables的服務腳本及配置檔案

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKiom1M-n2Lw5o_RAAA4GRDRDkQ003.png" target="_blank"></a>

(3)解除安裝iptables

<code>rpm -e iptables iptables-ipv6 --nodeps</code>

(4)編譯安裝iptables

<code>.</code><code>/configure</code>  <code>--prefix=</code><code>/usr</code>  <code>--with-ksource=</code><code>/usr/src/linux</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKioL1M-n1_wZJ2kAAAwnNyjj6E488.png" target="_blank"></a>

   編譯時可能會出現這樣一個界面,直接略過

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKioL1M-4Qjij1YGAABZe-XfCMk850.png" target="_blank"></a>

(5)make &amp;&amp; make install

(6)為編譯安裝的iptables提供腳本及配置檔案

<code>cp</code> <code>/root/app/iptables</code> <code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code>

<code>cp</code> <code>/root/app/iptables-config</code> <code>/etc/sysconfig/</code>

8、為layer7子產品提供其所識别的協定的特征碼

<code># tar zxvf l7-protocols-2009-05-28.tar.gz</code>

<code># cd l7-protocols-2009-05-28</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKioL1M-n3ihvxxhAABYFuy5kDo253.png" target="_blank"></a>

9、如何使用layer7子產品

(1)檢視iptables的版本

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKiom1M-n7XCdp_9AAAWZBs0YOw494.png" target="_blank"></a>

(2)修改iptables的腳本

因為我們在編譯安裝的時候修改了腳本的安裝路徑,是以我們複制前的那個腳本中的會有一些問題需要改改

<code>vim </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/iptables</code>

(3)ACCT的功能已經可以在核心參數中按需啟用或禁用。此參數需要裝載nf_conntrack子產品後方能生效。

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKiom1M-n_yBG7Y5AAA2ka0uZX4540.png" target="_blank"></a>

(4)啟用連接配接追蹤功能

這裡需要在/etc/sysctl.conf中添加一條

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKioL1M-n-3AAKRmAAATP073Lts704.png" target="_blank"></a>

(5)iptables應用層過濾文法

因為我們為iptables打了更新檔,使其能夠支援應用層的過濾,是以就支援了新的文法格式

<code># iptables [specify table &amp; chain] -m layer7 --l7proto [protocol name] -j [action]</code>

五、應用層過濾測試(基于iptables實作應用層QQ協定過濾)

1、内網用戶端環境

内網用戶端win7一台,處于VMnet5段中

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKiom1M-p0iwM1qzAAB1JbqWlhg940.png" target="_blank"></a>

2、伺服器端配置

(1)網卡配置設定

伺服器配置兩塊網卡,一塊用于外網(eth0:172.16.251.93),一塊用于外網(eth1:192.168.1.104)

<a href="http://s3.51cto.com/wyfs02/M00/23/B2/wKiom1M-p5CBnmLXAABuVIecSMY018.png" target="_blank"></a>

(2)開啟轉發功能

為了使内網用戶端能夠通過此伺服器上網,需開啟轉發功能

<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKioL1M-p5CRe9X_AAAaHlrGXjM441.png" target="_blank"></a>

這隻是臨時設定,重新開機失效,如果想永久生效,請修改配置檔案/etc/sysctl.conf

(3)設定iptables規則,使内網用戶端可以外網

方法一:設定源位址轉換

<a href="http://s3.51cto.com/wyfs02/M02/23/B2/wKiom1M-p-fwLngyAAA--_atdFE784.png" target="_blank"></a>

方法二:設定内網源位址僞裝

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKioL1M-p9uyYCUAAABIkjLsBB4067.png" target="_blank"></a>

(4)l7規則前,内網用戶端可正常登入QQ

<a href="http://s3.51cto.com/wyfs02/M01/23/B2/wKiom1M-qDqS8HdyAAVXPjeiI-s801.png" target="_blank"></a>

(5)基于iptables規則過濾QQ協定

<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKioL1M-qC_DvqihAAAlJV6Sduc903.png" target="_blank"></a>

(6)檢視過濾結果

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKioL1M-xNyDii20AAP95fcBvjs074.png" target="_blank"></a>

iptables之三:基于iptables實作7層通路過濾

本文轉自 nmshuishui 51CTO部落格,原文連結:http://blog.51cto.com/nmshuishui/1390828,如需轉載請自行聯系原作者

繼續閱讀