防火墻之iptables使用

一、防火墻簡介   

       Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件;

       軟件防火墻(軟件邏輯):一般寄生在操作系統平臺。軟件防火墻是通過純軟件的的方式實現隔離內外部網絡的目的。

       硬件防火墻(硬件和軟件邏輯):系統是嵌入式的系統。一般開源的較多。硬件防火墻是通過硬件和 軟件的組合來達到隔離內外部網絡的目的。 硬件防火墻是流行趨勢,相比軟件防火墻除成本外很有優勢。

       本文只對軟件防火墻進行介紹

           主機防火墻:服務范圍為當前主機

           網絡防火墻:服務范圍為某個局域網

       iptables的基本認識:

            1、netfilter組件被稱為內核空間,它被集中在內核中。netfilter是一種內核中用于擴展各種網絡服務的結構化底層框架。它是在內核中選取五個位置放了五個hook function,這五個hook function 向用戶開放,用戶可以通過工具(iptables)向其寫規則。

            2、iptables是一個工作在用戶層用來寫規則的工具,寫好的規則被送往netfilter。這些規則告訴內核中的netfilter組件如何處理信息包

       iptables的組成:

          iptables是由四個表和五個鏈組成

          1、四表:

               filter:過濾,防火墻;

               natnetwork address translation;用于修改源IP或目標IP,也可以改端口;(從而達到隱藏后臺服務器的目的)

               mangle:拆解報文,做出修改,并重新封裝起來;(除了該地址之外的其它數據,  如協議)

               raw:關閉nat表上啟用的連接追蹤機制;

              實際上還有第五個表:security 此表用于強制訪問控制(MAC)網絡規則,一般很少很少用到此表

           2、五鏈:

                PREROUTING:對數據包作路由選擇前應用此鏈中的規則(所有的數據包進來的時侯都先由這個鏈處理)

                INPUT:進來的數據包應用此規則鏈中的策略

                OUTPUT:外出的數據包應用此規則鏈中的策略

                POSTROUTING:對數據包作路由選擇后應用此鏈中的規則(所有的數據包出來的時侯都先由這個鏈處理)

                FORWARD:轉發數據包時應用此規則鏈中的策略

           3、表與鏈的關系         

                rawPREROUTING, OUTPUT

                manglePREROUTING,INPUTFORWARD,OUTPUTPOSTROUTING

                natPREROUTING,[INPUT,]OUTPUT,POSTROUTINGcentos6上沒有INPU

                filterINPUT,FORWARD,OUTPUT

                功能生效先后次序raw –>mangle–>nat–>filter

          4、如何寫規則

                添加規則時的考量點:

                      (1) 要實現哪種功能:判斷添加到哪個表上;

                      (2) 報文流經的路徑:判斷添加到哪個鏈上;

               鏈:鏈上的規則次序,即為檢查的次序;因此,隱含一定的應用法則:

                      (1) 同類規則(訪問同一應用),匹配范圍小的放上面;

                      (2) 不同類的規則(訪問不同應用),匹配到報文頻率較大的放在上面;

                      (3) 將那些可由一條規則描述的多個規則合并起來;

                      (4) 設置默認策略;

          

二、iptables的基本使用

      iptables [-t 表名] <-A|-D|-I|-R…> 鏈名 [規則編號] [-i|-o 網卡名稱] [-p 協議類型] [-s 源IP地址|源子網] [–sport 源端口] [-d 目標地址|子網地址] [–dport 目標端口] <-j 處理動作>     

        1、-t table

             raw, mangle, nat, [filter](默認是filter鏈)

        2、鏈管理

             PREROUTING,INPUTFORWARD,OUTPUTPOSTROUTING 

            -Nnew, 自定義一條新的規則鏈;

                 防火墻之iptables使用

            -Xdelete,刪除自定義的規則鏈;

                 注意:只有具備以下全部條件才能刪除鏈

                         用戶自定義的

                         空的

                         引用計數為0

                       必須符合以上三個條件才能刪除

                 防火墻之iptables使用  

           -PPolicy,設置默認策略;對filter表中的鏈而言,其默認策略有:

                 ACCEPT:接受(內建)

                 DROP:丟棄(內建)

                 REJECT:拒絕(擴展)

           -E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也 不能被刪除;

        3、規則管理:

             -Aappend,追加;

             -Iinsert, 插入,要指明位置,省略時表示第一條;

                  防火墻之iptables使用

            -Ddelete,刪除;

                  防火墻之iptables使用

            -R:replace,替換指定鏈上的指定規則;

                  防火墻之iptables使用

            -Fflush,清空指定的規則鏈;

                 防火墻之iptables使用

            -Zzero,置零;

                 iptables的每條規則都有兩個計數器:

                 (1) 匹配到的報文的個數;

                 (2) 匹配到的所有報文的大小之和;

         4、查看:

             -Llist, 列出指定鏈上的所有規則;必須寫在后面

             -nnumberic,以數字格式顯示地址和端口號;

             -vverbose,詳細信息;

                  -vv, -vvv

            -xexactly,顯示計數器結果的精確值;

            –line-numbers:顯示規則的序號;

                 防火墻之iptables使用

         5、匹配條件:

             (1)基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供;

                    [!] -s, –source  address[/mask][,…]:檢查報文中的源IP地址是否符合此處指定的地址或范圍;

                    [!] -d, –destination address[/mask][,…]:檢查報文中的目標IP地址是否符合 此處指定的地址或范圍;

                        匹配所有地址:0.0.0.0

                   [!] -p, –protocol protocol(四層協議)

                       protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  “all”

                   [!] -i, –in-interface name:數據報文流入的接口;只能應用于數據報文流入 的環節,只能應用于PREROUTING,INPUT和 FORWARD鏈;

                   [!] -o, –out-interface name:數據報文流出的接口;只能應用于數據報文流 出的環節,只能應用于FORWARD、OUTPUT和 POSTROUTING鏈;

             (2)擴展匹配條件 需要加載擴展模塊,方可生效;又分為隱式擴展和顯示擴展

                     隱式擴展:不需要手動加載擴展模塊;因為它們是對協議的擴展,所以,但凡使 用-p指明了協議,就表示已經指明了要擴展的模塊;

                            常用的協議

                              tcp:

                                   [!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;

                                   [!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端 口范圍;

                                   [!] –tcp-flags  mask  compmask is the flags which we should examine,  written as a comma-separated list,例如 SYN,ACK,FIN,RST

                                           comp is a comma-separated list  of  flags  which must be set,例如:SYN

                                   例如:–tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要檢查的標志位為 SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;

                                   [!] –syn:用于匹配第一次握手,相當于”–tcp-flags  SYN,ACK,FIN,RST  SYN

                                   防火墻之iptables使用

                        “; udp

                                   [!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;

                                   [!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;

                                   防火墻之iptables使用

                             icmp

                                  [!] –icmp-type {type[/code]|typename}

                                          echo-request8 (回顯請求)

                                          echo-reply0     (回顯響應)

                                   防火墻之iptables使用

          6處理動作:

               -j targetname [per-target-options]

                  ACCEPT

                  DROP

                  REJECT

                  RETURN:返回調用鏈;

                  REDIRECT:端口重定向;

                  LOG:記錄日志;

                  MARK:做防火墻標記;

                  DNAT:目標地址轉換;

                  SNAT:源地址轉換;

                  MASQUERADE:地址偽裝;

                  …

                 自定義鏈:

三、擴展模塊

      1、multiport擴展:以離散方式定義多端口匹配;最多指定15個端口;

          [!] –source-ports,–sports port[,port|,port:port]…:指定多個源端口;

          [!] –destination-ports,–dports port[,port|,port:port]…:指定多個目標端口;

          [!] –ports port[,port|,port:port]…:指明多個端口;

               防火墻之iptables使用         

     2iprange擴展:指明連續的ip地址范圍;

          [!] –src-range from[-to]:源IP地址;

          [!] –dst-range from[-to]:目標IP地址;

               防火墻之iptables使用

     3string擴展:對報文中的應用層數據做字符串模式匹配檢測;

          –algo {bm|kmp}:字符串匹配檢測算法;

                   bmBoyer-Moore

                   kmpKnuth-Pratt-Morris

         [!] –string pattern:要檢測的字符串模式;

         [!] –hex-string pattern:要檢測的字符串模式,16進制格式;

              防火墻之iptables使用     4、time擴展:根據將報文到達的時間與指定的時間范圍進行匹配;

          –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

          –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

          –timestart hh:mm[:ss]

          –timestop hh:mm[:ss]

           [!] –monthdays day[,day…]

           [!] –weekdays day[,day…]

          –kerneltz:使用內核上的時區,而非默認的UTC

                防火墻之iptables使用

     5、connlimit擴展根據每客戶端IP做并發連接數數量匹配;

          –connlimit-upto n:連接的數量小于等于n時匹配;

          –connlimit-above n:連接的數量大于n時匹配;

            防火墻之iptables使用

    6、limit擴展:基于收發報文的速率做匹配;

        令牌桶過濾器;

        –limit rate[/second|/minute|/hour|/day](速率)

        –limit-burst number(定義桶最大收集多少個令牌)

            防火墻之iptables使用

     7、state擴展(在并發訪問量很大時,不建議開啟此功能)

         state模塊是contract模塊的子集:根據”連接追蹤機制“去檢查連接的狀態;

         conntrack機制:追蹤本機上的請求和響應之間的關系;狀態有如下幾種:

               NEW:新發出請求;連接追蹤模板中不存在此連接的相關信息條目,因此, 將其識別為第一次發出的請求;

               ESTABLISHEDNEW狀態之后,連接追蹤模板中為其建立的條目失效之前 期間內所進行的通信狀態;(established)

               RELATED:相關聯的連接;如ftp協議中的數據連接與命令連接之間的關 系

               INVALID:無效的連接;

               UNTRACKED:未進行追蹤的連接;

             防火墻之iptables使用

三、iptables之forward配置

       

         防火墻之iptables使用

       1、 客戶端配置

             1)配置網絡橋接模式 ip 172.16.254.187

             2)設置默認路由

                  route add default gw 172.16.251.210

             3ping測試

                  防火墻之iptables使用 

                  172.16.251.210 ping

                  防火墻之iptables使用

                  192.168.70.139 ping

                  防火墻之iptables使用

                  192.168.70.138 不通

         2、 web服務器配置

                 1)配置網絡為僅主機模式 ip192.168.70.138

                 2)添加默認路由

                       route add default gw 192.168.70.139

                 3)測試

                      防火墻之iptables使用  

                      192.168.70.139

                      防火墻之iptables使用

                      172.16.251.210

                      防火墻之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服務

                       安裝服務

                       修改主頁面 vim /var/www/html/index.html

                       啟動服務

                       防火墻之iptables使用 

         3、 iptables服務器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (開啟內核轉發功能)

                      測試:

                        172.16.254.178(客戶端)主機

                         防火墻之iptables使用

                         

                       192.168.70.138web服務器)主機

                         防火墻之iptables使用

                         

               書寫規則鏈

                        防火墻之iptables使用

         4、測試

                          防火墻之iptables使用

                          能正常訪問web服務器

四、iptables之地址裝換法則

      1、NAT:網絡地址裝換。分為源地址轉換和目標地址裝換

          SNAT:修改IP報文中的源IP地址,讓本地網絡中的主機刻使用同一地址與外部主機通信,從而實現偽裝地址

          DNAT:修改IP報文的目的地址,讓本地網絡中的服務器使用統一的地址想歪提供服,但是隱藏自己的真實的地址。

          PNAT:端口轉換,一般與DNAT結合王城目標地址和端口的轉換

      2、SNAT的實現

           防火墻之iptables使用

        要求:隱藏客戶端地址

           客戶端配置

              1)配置網絡橋接模式 ip 172.16.254.187

              2)設置默認路由

                  route add default gw 172.16.251.210

              3ping測試

                  防火墻之iptables使用 

                  172.16.251.210 ping

                  防火墻之iptables使用

                  192.168.70.139 ping

                  防火墻之iptables使用

                  192.168.70.138 不通

               web服務器配置

                 1)配置網絡為僅主機模式 ip192.168.70.138

                 2)添加默認路由

                       route add default gw 192.168.70.139

                 3)測試

                      防火墻之iptables使用  

                      192.168.70.139

                      防火墻之iptables使用

                      172.16.251.210

                      防火墻之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服務

                       安裝服務

                       修改主頁面 vim /var/www/html/index.html

                       啟動服務

                       防火墻之iptables使用 

                iptables服務器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (開啟內核轉發功能)

                      測試:

                        172.16.254.178(客戶端)主機

                         防火墻之iptables使用

                         

                       192.168.70.138web服務器)主機

                         防火墻之iptables使用

                         

                   1)配置iptables規則

                        隱藏客戶端主機的IP地址為(192.168.70.139)   

                         防火墻之iptables使用   

                  2) 測試

                    在客戶端抓包

                     客戶端訪問web服務器

                      curl http://192.168.70.138

                        防火墻之iptables使用          

                       防火墻之iptables使用     

                      看到:在客戶端顯示:  172.16.254.187發出請求

                                            192.168.70.138響應請求

                     iptables服務器抓包

                          防火墻之iptables使用

                         防火墻之iptables使用

                       抓包ens37192.168.70.139

               看到發出請求報文的是 192.168.70.139而不是   172.16.254.187

 

                web服務器上抓包

                      防火墻之iptables使用    

                     看到發出請求報文的是 192.168.70.139而不是   172.16.254.187

              這樣就可以隱藏客戶端地址了

     3、DNAT配置

           防火墻之iptables使用

         要求:隱藏web服務端地址

            客戶端配置

             1)配置網絡橋接模式 ip 172.16.254.187

             2)設置默認路由

                  route add default gw 172.16.251.210

             3ping測試

                   防火墻之iptables使用 

                  172.16.251.210 ping

                   防火墻之iptables使用

                  192.168.70.139 ping

                  防火墻之iptables使用

                   192.168.70.138 不通

               web服務器配置

                  web服務器的地址隱藏為172.16.251.210                  

                 1)配置網絡為僅主機模式 ip192.168.70.138

                 2)添加默認路由

                       route add default gw 192.168.70.139

                 3)測試

                      防火墻之iptables使用  

                      192.168.70.139

                      防火墻之iptables使用

                      172.16.251.210

                      防火墻之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服務

                       安裝服務

                       修改主頁面 vim /var/www/html/index.html

                       啟動服務

                       防火墻之iptables使用 

                  iptables服務器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (開啟轉發功能)

                      測試:

                        172.16.254.178(客戶端)主機

                         防火墻之iptables使用

                         

                       192.168.70.138web服務器)主機

                         防火墻之iptables使用

                         

                   1)配置iptables規則

                        防火墻之iptables使用

                   2)測試

                       客戶端測試

                       防火墻之iptables使用

                      防火墻之iptables使用

                 可以看到客戶端發出的請求報文給172.16.251.210

                     iptables服務器上抓包

                      防火墻之iptables使用

                    可以看到客戶端發出的請求報文給自己了

              在web服務器上抓包

                     防火墻之iptables使用

                    可以看到客戶端給自己發的請求報文   

     4、在DNAT配置的基礎上擴展實現端口隱藏(PNAT)

           現在web服務器上把web服務的端口改為8080

                     防火墻之iptables使用

            重啟服務

         1)在iptables服務器上做規則

            iptables -t nat -A PREROUTING -d 172.16.251.210 -p tcp –dport 80 -j DNAT –to-destination 192.168.70.139:8080

                    防火墻之iptables使用

         2)抓包測試

                   防火墻之iptables使用

             在客戶端測試     

                  防火墻之iptables使用

                 客戶端顯示我們訪問的是172.16.251.21080端口     

             iptables測試

                 內網網卡(ens33

                 防火墻之iptables使用

                內網網卡顯示我們訪問的是172.16.251.21080端口     

          外網網卡(ens37

                 防火墻之iptables使用

                外網網卡顯示我們訪問的是192.168.70.1388080端口

          web服務器測試

                防火墻之iptables使用

              外網網卡顯示我們訪問的是192.168.70.1388080端口

         通過各個點的測試表明了 隱藏了服務器的端口,PNAT配置成功


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

(0)
zqzq
上一篇 2017-06-18 19:04
下一篇 2017-06-18 22:23

相關推薦

  • 詳解“FTP文件傳輸服務”配置實例

            詳解“FTP文件傳輸服務”配置實例 目錄 簡介 ftp工作原理 常見的FTP服務 Vsftpd服務器的安裝 Vsftpd.conf配置文件詳解 配置FTP服務器實例 實例:配置匿名 實例:配置本地用戶登錄 實例:配置虛擬用戶登錄(MySQL認證) 實例:控制用戶登…

    Linux干貨 2016-10-18
  • 磁盤冗余陣列 RAID

    一、磁盤冗余陣列 RAID(Redundant Array of Independent Disk)     RAID是一種把多塊獨立的硬盤(物理硬盤)按不同的方式組合起來形成一個硬盤組(邏輯硬盤),從而提供比單個硬盤更高的存儲性能和提供數據備份技術。根據磁盤陳列的不同組合方式,可以將RAID分為不同的級別。 其中提高傳輸速率和…

    Linux干貨 2016-09-07
  • N26 第一周作業

    1、計算機的組成及其功能     依據馮諾依曼架構,計算機由以下組件組成     圖片來源:Wikipedia Von Neumann Architecture 中央處理單元(Central Processing Unit) 控制單元(Control Unit, CU) 負責控制處理器中的數據流,并…

    Linux干貨 2017-01-14
  • linux下安裝配置DHCP服務器

    前提是已經安裝了 core 及 base 兩個組   1 2 3 4 5 # cat /etc/redhat-release   Red Hat Enterprise Linux Server release 6.8 (Santiago)&…

    Linux干貨 2017-05-03
  • shell基礎if與case

    1.read   使用read來把輸入值分配給一個或多個shell變量;   -p 指定要顯示的提示;例如 read -p "SHURU" num   -t TIMEOUT   read 從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量 2.流程控制   過程…

    Linux干貨 2016-08-18
  • 網絡第21期第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@localhost ~]# fdisk /dev/sdb WARNING: DOS-compatible m…

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