<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在本博客中,從理論到實踐,系統的介紹了iptables,如果你想要從頭開始了解iptables,可以查看iptables文章列表,直達鏈接如下 [iptables零基礎快速入門系列](http://www.zsythink.net/archives/tag/iptables/) 如果你看過前文,那么你一定知道,前文已經對"tcp擴展模塊"做過總結,但是只總結了tcp擴展模塊中的"--sport"與"--dport"選項,并沒有總結"--tcp-flags"選項,那么此處,我們就來認識一下tcp擴展模塊中的"--tcp-flags"。 注:閱讀這篇文章之前,需要對tcp協議的基礎知識有一定的了解,比如:tcp頭的結構、tcp三次握手的過程。 見名知義,"--tcp-flags"指的就是tcp頭中的標志位,看來,在使用iptables時,我們可以通過此擴展匹配條件,去匹配tcp報文的頭部的標識位,然后根據標識位的實際情況實現訪問控制的功能。 既然說到了tcp頭中的標志位,那么我們就來回顧一下tcp頭的結構,如下圖所示。 ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_1.png) 在使用iptables時,使用tcp擴展模塊的"--tcp-flags"選項,即可對上圖中的標志位進行匹配,判斷指定的標志位的值是否為"1",而tcp header的結構不是我們今天討論的重點,我們繼續聊tcp的標識位,在tcp協議建立連接的過程中,需要先進行三次握手,而三次握手就要依靠tcp頭中的標志位進行。 為了更加具象化的描述這個過程,我們可以抓包查看ssh建立連接的過程,如下圖所示(使用wireshark在ssh客戶端抓包,跟蹤對應的tcp流): ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_2.png) 上圖為tcp三次握手中的第一次握手,客戶端(IP為98)使用本地的隨機端口54808向服務端(IP為137)發起連接請求,tcp頭的標志位中,只有SYN位被標識為1,其他標志位均為0。 在上圖的下方可以看到"\[TCP Flags: ··········S·\]",其中的"S"就表示SYN位,整體表示只有SYN位為1。 上圖為tcp三次握手中第一次握手的tcp頭中的標志位,下圖是第二次握手的,服務端回應剛才的請求,將自己的tcp頭的SYN標志位也設置為1,同時將ACK標志位也設置為1,如下圖所示。 ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_3.png) ? ? 上圖中的下方顯示的標志位列表也變成了,\[TCP Flags: ·······A··S·\],表示只有ACK標志位與SYN標志位為1,如上圖所示,第三次握手我就不再截圖了,說到這里,就已經能夠引出我們今天要說的話題了,就是"--tcp-flags"選項,假設,我現在想要匹配到上文中提到的"第一次握手"的報文,則可以使用如下命令: ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_4.png) 上圖中,"-m tcp --dport 22"的含義在前文中已經總結過,表示使用tcp擴展模塊,指定目標端口為22號端口(ssh默認端口),"--tcp-flags"就是我們今天要討論的擴展匹配條件,用于匹配報文tcp頭部的標志位,"SYN,ACK,FIN,RST,URG,PSH SYN"是什么意思呢?這串字符就是用于配置我們要匹配的標志位的,我們可以把這串字符拆成兩部分去理解,第一部分為"SYN,ACK,FIN,RST,URG,PSH",第二部分為"SYN"。 第一部分表示:我們需要匹配報文tcp頭中的哪些標志位,那么上例的配置表示,我們需要匹配報文tcp頭中的6個標志位,這6個標志位分別為為"SYN、ACK、FIN、RST、URG、PSH",我們可以把這一部分理解成需要匹配的標志位列表。 第二部分表示:第一部分的標志位列表中,哪些標志位必須為1,上例中,第二部分為SYN,則表示,第一部分需要匹配的標志位列表中,SYN標志位的值必須為1,其他標志位必須為0。 所以,上例中的"SYN,ACK,FIN,RST,URG,PSH SYN"表示,需要匹配報文tcp頭中的"SYN、ACK、FIN、RST、URG、PSH"這些標志位,其中SYN標志位必須為1,其他的5個標志位必須為0,這與上文中wireshark抓包時的情況相同,正是tcp三次握手時第一次握手時的情況,上文中第一次握手的報文的tcp頭中的標志位如下: ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_5.png) 其實,--tcp-flags的表示方法與wireshark的表示方法有異曲同工之妙,只不過,wireshark中,標志位為0的用"點"表示,標志位為1的用對應字母表示,在--tcp-flags中,需要先指明需要匹配哪些標志位,然后再指明這些標志位中,哪些必須為1,剩余的都必須為0。 那么,聰明如你一定想到了,如果我想要匹配tcp頭中的第二次握手時的標志位的情況,該怎么表示呢? 示例如下(此處省略對源地址與目標地址的匹配,重點在于對tcp-flags的示例) ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_6.png) 上圖中,第一條命令匹配到的報文是第一次握手的報文,第二條命令匹配到的報文是第二次握手的報文。 綜上所述,只要我們能夠靈活的配置上例中的標志位,即可匹配到更多的應用場景中。 其實,上例中的兩條命令還可以簡寫為如下模樣 ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_7.png) 沒錯,我們可以用ALL表示"SYN,ACK,FIN,RST,URG,PSH"。 其實,tcp擴展模塊還為我們專門提供了一個選項,可以匹配上文中提到的"第一次握手",那就是--syn選項 使用"--syn"選項相當于使用"--tcp-flags SYN,RST,ACK,FIN ?SYN",也就是說,可以使用"--syn"選項去匹配tcp新建連接的請求報文。 示例如下: ![iptables詳解(6):iptables擴展匹配條件之'--tcp-flags'](http://www.zsythink.net/wp-content/uploads/2017/04/042817_0124_8.png) ? ? ## 小結 結合之前的文章,我們把tcp模塊的常用擴展匹配條件再總結一遍,方便以后回顧。 tcp擴展模塊常用的擴展匹配條件如下: ### \--sport 用于匹配tcp協議報文的源端口,可以使用冒號指定一個連續的端口范圍 Shell #示例 iptables?-t?filter?-I?OUTPUT?-d?192.168.1.146?-p?tcp?-m?tcp?--sport?22?-j?REJECT iptables?-t?filter?-I?OUTPUT?-d?192.168.1.146?-p?tcp?-m?tcp?--sport?22:25?-j?REJECT iptables?-t?filter?-I?OUTPUT?-d?192.168.1.146?-p?tcp?-m?tcp?!?--sport?22?-j?ACCEPT 1234#示例iptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;OUTPUT&nbsp;-d&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--sport&nbsp;22&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;OUTPUT&nbsp;-d&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--sport&nbsp;22:25&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;OUTPUT&nbsp;-d&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;!&nbsp;--sport&nbsp;22&nbsp;-j&nbsp;ACCEPT ### \--dport 用于匹配tcp協議報文的目標端口,可以使用冒號指定一個連續的端口范圍 Shell #示例 iptables?-t?filter?-I?INPUT?-s?192.168.1.146?-p?tcp?-m?tcp?--dport?22:25?-j?REJECT iptables?-t?filter?-I?INPUT?-s?192.168.1.146?-p?tcp?-m?tcp?--dport?:22?-j?REJECT iptables?-t?filter?-I?INPUT?-s?192.168.1.146?-p?tcp?-m?tcp?--dport?80:?-j?REJECT 1234#示例iptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;22:25&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;:22&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-s&nbsp;192.168.1.146&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;80:&nbsp;-j&nbsp;REJECT ### \--tcp-flags 用于匹配報文的tcp頭的標志位 Shell #示例 iptables?-t?filter?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--tcp-flags?SYN,ACK,FIN,RST,URG,PSH?SYN?-j?REJECT iptables?-t?filter?-I?OUTPUT?-p?tcp?-m?tcp?--sport?22?--tcp-flags?SYN,ACK,FIN,RST,URG,PSH?SYN,ACK?-j?REJECT iptables?-t?filter?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--tcp-flags?ALL?SYN?-j?REJECT iptables?-t?filter?-I?OUTPUT?-p?tcp?-m?tcp?--sport?22?--tcp-flags?ALL?SYN,ACK?-j?REJECT 12345#示例iptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;22&nbsp;--tcp-flags&nbsp;SYN,ACK,FIN,RST,URG,PSH&nbsp;SYN&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;OUTPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--sport&nbsp;22&nbsp;--tcp-flags&nbsp;SYN,ACK,FIN,RST,URG,PSH&nbsp;SYN,ACK&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;22&nbsp;--tcp-flags&nbsp;ALL&nbsp;SYN&nbsp;-j&nbsp;REJECTiptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;OUTPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--sport&nbsp;22&nbsp;--tcp-flags&nbsp;ALL&nbsp;SYN,ACK&nbsp;-j&nbsp;REJECT ### \--syn 用于匹配tcp新建連接的請求報文,相當于使用"--tcp-flags SYN,RST,ACK,FIN ?SYN" Shell #示例 iptables?-t?filter?-I?INPUT?-p?tcp?-m?tcp?--dport?22?--syn?-j?REJECT 12#示例iptables&nbsp;-t&nbsp;filter&nbsp;-I&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;-m&nbsp;tcp&nbsp;--dport&nbsp;22&nbsp;--syn&nbsp;-j&nbsp;REJECT ? ? 希望這篇文章能夠對你有所幫助~~~常來捧場哦,親~~~ ![weinxin](http://www.zsythink.net/wp-content/uploads/2017/04/2017-04-27-1720365637.png) **我的微信公眾號** 關注"實用運維筆記"微信公眾號,當博客中有新文章時,可第一時間得知哦~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看