iptables 實現應用層過濾

    在linux環境中,工作于內核空間的netfilter和工作于用戶空間的iptables共同組成了其功能強大且操作靈活的防火墻系統,對進出主機或內外網之間的流量基于IP地址、通信協議、端口以及連接狀態等進行管控,然而,對于一些使用非固定端口或者通信協議的應用程序,默認是沒有辦法做限制的,比如聊天軟件QQ、下載工具迅雷等,不過我們可以通過增添模塊的方式來實現應用程序管控。

    一、實驗拓撲

        主機A使用網卡eth0通過路由器接入公網(internet),使用網卡eth1與主機B相連,主機B網關指向主機A的eth1網卡的ip地址,通過A代理訪問internet。 

      blob.png   

    二、實驗環境

       (1)、實驗平臺:Vmware Workstation 10

       (2)、系統平臺:

               主機A:CentOS 6.5 x86_64

                  eth0:192.168.1.209

                  eth1:192.168.2.1

               主機B:Windows 7 64位旗艦版

                  eth0:192.168.2.2

    三、用到的軟件以及版本 

        blob.png   

    四、實驗目的

        在主機A上面給新內核打上l7layer netfilter補丁并進行編譯,提供支持layer7的iptables,在主機A上配置l7layer過濾,使主機B不能登錄QQ,以此來驗證其應用層過濾功能。

    五、在主機A上做如下配置

        (1)、給內核打補丁

               由于我們下載的內核時rpm格式,首先我們先安裝它,注意,此處需創建mockbuild用戶,否則無法安裝內核rpm包。

               blob.png

               安裝完以后,在當前目錄下生成目錄 ~/rpmbuild,進入到./rpmbuild/SOURCES/目錄下,查看其中文件

               blob.png

               將該目錄中的內核歸檔文件展開至/usr/src下,并創建符號鏈接文件為linux

               # tar -xf linux-2.6.32-431.11.2.e16.tar.bz2 -C /usr/src 

               blob.png

               查看解壓后的內核文件

               blob.png

               如上圖我們可以看到Makefile文件,我們可以修改此文件來給我們新編譯的內核做標記,以便在多內核同時存在的情況下啟動系統是能到一眼認出我們需要啟動的內核,做以下修改后,為本文新編譯的內核添加-silently后綴。

               blob.png

               將blob.png補丁文件展開至/usr/src目錄下并查看,

               blob.png

                使用上圖標出的補丁文件對內核打補丁,注意,打補丁時將當前工作目錄切換至內核文件所在目錄(即本文上面創建的符號鏈接文件linux中)

                blob.png

                注意 此處打補丁命令patch的選項“-p1”是指當前工作目錄相對需打補丁的文件目錄有幾層(本文件中切換至需打補丁文件所在目錄,即僅有當前目錄這一層,因此為p1)

        (2)、編譯內核(注意,一下操作均在打完補丁后的內核文件所在目錄中執行,本文即/usr/src/linux目錄下)

                為方便實驗基于當前系統的內核配置文件修改后進行編譯,當前內核配置文件存在于/boot/下

                blob.png                

                啟動menuconfig圖形界面配置內核

                blob.png

                依下圖順序分別去掉模塊簽名認證和內核編譯時的簽名認證,如不取消,由于redhat內置密鑰驗證機制,編譯玩的內核將會出現安裝不通過的情況

                選擇“啟用模塊裝卸載支持”,回車進入

                blob.png

                選定圖示行,按空格鍵取消“模塊裝載前面認證”

                blob.png

                返回到首頁,選擇圖示行,回車進入

                blob.png

                選擇“內核簽名認證選項”,空格鍵取消

                blob.png

                返回首頁,依下圖順序,選定l7laye netfilter模塊,使新編譯的內核擁有該模塊

                blob.png

                blob.png

                blob.png

                blob.png  

                blob.png

                保存退出。

                一次執行如下操作,編譯安裝內核

                # make -j 2                 //指定使用兩個cpu核心并行執行make操作

                # make modules_install      //安裝內核配置文件種指定模塊

                # make install              //安裝新內核

                安裝完成后,查看/boot/grub/grub.con,看以看到新內核已經生成配置信息。

                blob.png

                重啟系統選擇新內核啟動。

                blob.png

        (3)、提供支持7layer模塊的iptables,本文介紹兩種方式,一種是編譯安裝,另一種是制作成rpm包來安裝。

            A、將打完補丁后的iptables原文件制作成rpm包進行升級安裝 

              本方式使用blob.png

              1、安裝目標rpm包(本文使用iptables-1.4.7-11.e16.src.rpm

               # rpm -ivh iptables-1.4.7-11 //此步會在當前目錄下生成rpmbuild目錄

              2、為iptables打補丁使其支持7layer netfileter

               # cd rpmbuild/SOURCE/下    //此目錄中有iptables的歸檔文件

               # tar -xf iptables-1.4.7.tar.bz2 //展開歸檔文件

               # cd iptables-1.4.7       //cd進展開后目錄

               # cp /usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* ./extensions/  //拷貝補丁文件至目標目錄

              3、將打完補丁的新版本文件重新歸檔至~/rpmbuild/SOURCE/中(注意此處需提前移除源歸檔文件)

               # mv ~/rpmbuild/SOURCE/iptables-1.4.7.tar.bz2 /     //移除原歸檔文件 

               # tar -jcf iptables-1.4.7.tar.bz2 ~/rpmbuild/SOURCE/iptables-1.4.7/*  //將打完補丁后的文件重新打包成歸檔文件。

              4、修改spec文件,以便新做成的rpm包可以適用于我們新編譯的內核

               # vim ~/rpmbuild/SPECS/iptables.spec

               blob.png

               blob.png

               blob.png

               blob.png

               上述修改完成后,謹記保存退出,然后創建rpm安裝包

               # rpmbuild iptables.spec

               待執行完成后,查看rpmbuild目錄

               # ls ~/rpmbuild

               blob.png

               上圖示,創建rpm安裝包是新創建的目錄

               blob.png 

               上圖可以看到,RPM包已經創建成功

              5、升級iptables為我們新創建的版本

               blob.png

               查看升級生成文件確認支持7layer netfilter模塊

               # rpm -ql iptables 

               blob.png

               查看iptables詳細安裝信息,確認版本

               blob.png

            B、編譯安裝iptables

               本方式使用blob.png

              1、解壓iptables源碼歸檔包并為其打支持layer7 netfilter支持補丁

               # tar -xf iptables-1.4.20.tar.bz2

               # cd iptables-1.4.20

               \\注意,此處打補丁不同于上文為內核打補丁的方式,此處只需將/usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/=目錄下的所有文件拷貝至~/iptables-1.4.20/extensions/目錄下即可

               # cp /usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* ~/iptables-1.4.20/extensions/ 

              2、備份系統已安裝iptables的服務腳本文件和配置文件

               blob.png

               忽略依賴方式卸載舊版本iptables,為編譯安裝新iptables做準備

               blob.png

              3、編譯安裝iptables 

               # ./configure –prefix=/usr –with-ksource=/usr/src/linux

               # make && make install 

               還原服務腳本文件和主配置文件,注意,由于此編譯安裝的iptables版本安裝路徑不同于其默認安裝路徑,因此要對服務腳本文件做以下修改

               # cp /root/iptables /etc/rc.d/init.d/iptables 

               # cp /root/iptables-config /etc/sysconfig/iptables-config 

               # vim /etc/etc/rc.d/init.d/iptables 

               blob.png

    六、測試iptables應用層過濾

        (1)裝載應用層過濾所需模塊    

              1、為應用層過濾提供特征碼(每個應用程序都有其特征碼,netfilter增加了l7layer模塊支持后,就是依此特征碼來做流量過濾的)

               # tar -xf tar -xf l7-protocols-2009-05-28.tar.gz

               # cd  l7-protocols-2009-05-28

               # make install 

               blob.png

              2、由于l7layer過濾功能依賴于nf_conntract模塊,故需要將其裝載

               blob.png

               修改配置文件,啟用nf_conntract模塊,使其永久有效

               # vim /etc/sysctl.conf

               blob.png

               # sysctl -p //確認此模塊生效

               blob.png

    

        (2)、編輯/etc/sysctl.conf,啟用主機路由功能

               # vim /etc/sysctl.conf

               blob.png

               # sysctl -p //確認路由功能開啟并生效       

               blob.png

               添加防火墻策略,讓主機A成為主機B的上網代理服務器

               # iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT –to-source 192.168.1.211 

               blob.png

               測試主機C能正常上網以及登錄QQ

               上網正常

               blob.png

               QQ也能正常登錄

               blob.png

               在FORWARD鏈上配置netfilter策略,拒絕qq流量通過

               # iptables -A FORWARD -m layer7 –l7proto qq -j REJECT

               然后小退qq,重新登錄

               blob.png

               可以看到,qq已經無法登錄,查看相應規則

               blob.png

               看到有匹配到響應報文,應用層過濾已實現!

   

           

               

原創文章,作者:Silently,如若轉載,請注明出處:http://www.www58058.com/6181

(0)
SilentlySilently
上一篇 2015-07-09
下一篇 2015-07-13

相關推薦

  • N26-第一周作業-邢巖

     馬哥門徒-N26-邢巖    悲催了! 首次使用這個博客,居然連續未保存刪除了兩次,這可是我用了四個小時才寫好的?。∷查g藍瘦香菇了!感覺就像是Linux中使用了rm -rf / 一樣。    還是重新開始寫吧,第一次接觸Linux是在8年之前了,當時弄到了一張紅帽的光盤,可是怎么也裝不上系統,就放…

    Linux干貨 2017-02-05
  • 推薦-Centos常用的進程管理和資源查看工具

    一、pstree     pstree命令以樹狀圖的方式展現進程之間的派生關系 -a:顯示每個程序的完整指令,包含路徑,參數或是常駐服務的標示;  -c:不使用精簡標示法;  -G:使用VT100終端機的列繪圖字符;  -h:列出樹狀圖時,特別標明現在執行的程序;  -H<…

    Linux干貨 2016-04-05
  • lvs-keepalived

    keepalived: vrrp協議:Virtual Redundant Routing Protocol        術語:        虛擬路由器:Virtual Router &n…

    Linux干貨 2017-05-13
  • 淺談技術管理(轉載,講的非常不錯,技術和產品都值得一看)

      針對這些年旁觀和經歷過的技術產品場景,做一些個人的總結和判定,盡量不涉及爭議性話題,比如對一個互聯網公司而言,技術重要還是產品重要之類的,這種話題一扯開,各有道理,誰也別指望說服誰。     此外,加一個前綴,主要針對非技術領導者所面臨的技術管理困境,在很多從傳統企業轉型或個人站轉型的互聯網企業里,這個問…

    Linux干貨 2015-04-04
  • 測試so接口函數的腳本 [python]

    下面是一個測試solib庫中調用函數的測試腳本,但該腳本還存在這一些問題,我目前無法理解和解決; 問題: 1.我定義了logging采用日志滾動的方式,寫日志,并且每個日志的大小是20M,但測試結果發現日志連1M都沒到就開始輪轉了,并且在輪轉過程中,還出現logging寫日志,卻發現,日志輪轉了,結果竟然報了,輪轉日志不存在。 Traceback (most…

    Linux干貨 2016-01-05
  • 軟鏈接,硬鏈接區別

    軟硬鏈接涉及文件系統inode, 區分于inode號,硬鏈接inode號與鏈接文件相同,且創建鏈接不占空間.而軟鏈接占名稱字節個空間,且inode號與鏈接文件不同; 兩者查找inode號命令都可查找inode號,命令為ls -i,如需查找本目錄要加d; 在創建鏈接環境上,硬鏈接只能在同分區創建一個,不能跨分區創建;而軟鏈接可以跨分區創建多個鏈接文件且可以多個…

    Linux干貨 2016-10-20
欧美性久久久久