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 14:16
下一篇 2015-07-13 16:46

相關推薦

  • 文件管理相關

     rename:對文件重命名     rename [options] expression replacement file        示例:          # rename -v cut.exe cut.exe3 cut.exe…

    Linux干貨 2017-02-25
  • 【社招】【小米-北京】大數據運維工程師

    【社招】【小米-北京】大數據運維工程師 【工作地點】北京市海淀區安寧莊東路72號科利源大廈 【薪酬福利】15k-30k  期權獎勵、六險一金、水果花茶、班車、健身房、食堂 【投遞方式】郵件主題“崗位+姓名”發送至lipengcheng3@xiaomi.com   工作職責: 1、負責大數據平臺相關系統的運維保障,包括:Hadoo…

    Linux干貨 2017-07-28
  • Linux下編譯內核

                           Linux下編譯內核 內核編譯: 編譯內核就是把內核的相關文件重新生成。   內核編譯前期準備: Linux kernel下載網址:https://www.kernel.or…

    系統運維 2016-09-21
  • linux 磁盤管理與文件掛載

        磁盤對于linux來說是至關重要的而且與它 的中心思想相關聯,一切皆文件,因此就把磁盤分為了好多類型, 如:塊設備,字符設備。對于每類磁盤的使用,我們對它進行了分區與規劃,這就用到我們的分區與查看工具 fdisk,理論上磁盤容量足夠時,可以建立任意數量的分區。  一.磁盤的管理與工具 1.  fdisk 強大的…

    2017-06-17
  • Acheng學習宣言

    我是Acheng,我參加了馬哥Linux運維網絡班,從2016年9月開始我將跟隨馬哥學習Linux技術。我的學習宣言是:再努力也不為過!朝著活學活用,做到做精的方向努力吧! 

    Linux干貨 2016-10-25
  • Centos6.9 配置靜態IP

    Centos6.9 配置靜態IP修改步驟

    2018-03-26
欧美性久久久久