小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

iptables(6):iptables擴(kuò)展匹配條件之“-tcp-flag”

 nethelper 2019-08-06

在本博客中,從理論到實(shí)踐,系統(tǒng)的介紹了iptables,如果你想要從頭開始了解iptables,可以查看iptables文章列表,直達(dá)鏈接如下

iptables零基礎(chǔ)快速入門系列

如果你看過前文,那么你一定知道,前文已經(jīng)對(duì)"tcp擴(kuò)展模塊"做過總結(jié),但是只總結(jié)了tcp擴(kuò)展模塊中的"--sport"與"--dport"選項(xiàng),并沒有總結(jié)"--tcp-flags"選項(xiàng),那么此處,我們就來認(rèn)識(shí)一下tcp擴(kuò)展模塊中的"--tcp-flags"。

注:閱讀這篇文章之前,需要對(duì)tcp協(xié)議的基礎(chǔ)知識(shí)有一定的了解,比如:tcp頭的結(jié)構(gòu)、tcp三次握手的過程。

見名知義,"--tcp-flags"指的就是tcp頭中的標(biāo)志位,看來,在使用iptables時(shí),我們可以通過此擴(kuò)展匹配條件,去匹配tcp報(bào)文的頭部的標(biāo)識(shí)位,然后根據(jù)標(biāo)識(shí)位的實(shí)際情況實(shí)現(xiàn)訪問控制的功能。

既然說到了tcp頭中的標(biāo)志位,那么我們就來回顧一下tcp頭的結(jié)構(gòu),如下圖所示。

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

在使用iptables時(shí),使用tcp擴(kuò)展模塊的"--tcp-flags"選項(xiàng),即可對(duì)上圖中的標(biāo)志位進(jìn)行匹配,判斷指定的標(biāo)志位的值是否為"1",而tcp header的結(jié)構(gòu)不是我們今天討論的重點(diǎn),我們繼續(xù)聊tcp的標(biāo)識(shí)位,在tcp協(xié)議建立連接的過程中,需要先進(jìn)行三次握手,而三次握手就要依靠tcp頭中的標(biāo)志位進(jìn)行。

為了更加具象化的描述這個(gè)過程,我們可以抓包查看ssh建立連接的過程,如下圖所示(使用wireshark在ssh客戶端抓包,跟蹤對(duì)應(yīng)的tcp流):

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

上圖為tcp三次握手中的第一次握手,客戶端(IP為98)使用本地的隨機(jī)端口54808向服務(wù)端(IP為137)發(fā)起連接請(qǐng)求,tcp頭的標(biāo)志位中,只有SYN位被標(biāo)識(shí)為1,其他標(biāo)志位均為0。

在上圖的下方可以看到"[TCP Flags: ··········S·]",其中的"S"就表示SYN位,整體表示只有SYN位為1。

上圖為tcp三次握手中第一次握手的tcp頭中的標(biāo)志位,下圖是第二次握手的,服務(wù)端回應(yīng)剛才的請(qǐng)求,將自己的tcp頭的SYN標(biāo)志位也設(shè)置為1,同時(shí)將ACK標(biāo)志位也設(shè)置為1,如下圖所示。

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

上圖中的下方顯示的標(biāo)志位列表也變成了,[TCP Flags: ·······A··S·],表示只有ACK標(biāo)志位與SYN標(biāo)志位為1,如上圖所示,第三次握手我就不再截圖了,說到這里,就已經(jīng)能夠引出我們今天要說的話題了,就是"--tcp-flags"選項(xiàng),假設(shè),我現(xiàn)在想要匹配到上文中提到的"第一次握手"的報(bào)文,則可以使用如下命令:

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

上圖中,"-m tcp --dport 22"的含義在前文中已經(jīng)總結(jié)過,表示使用tcp擴(kuò)展模塊,指定目標(biāo)端口為22號(hào)端口(ssh默認(rèn)端口),"--tcp-flags"就是我們今天要討論的擴(kuò)展匹配條件,用于匹配報(bào)文tcp頭部的標(biāo)志位,"SYN,ACK,FIN,RST,URG,PSH SYN"是什么意思呢?這串字符就是用于配置我們要匹配的標(biāo)志位的,我們可以把這串字符拆成兩部分去理解,第一部分為"SYN,ACK,FIN,RST,URG,PSH",第二部分為"SYN"。

第一部分表示:我們需要匹配報(bào)文tcp頭中的哪些標(biāo)志位,那么上例的配置表示,我們需要匹配報(bào)文tcp頭中的6個(gè)標(biāo)志位,這6個(gè)標(biāo)志位分別為為"SYN、ACK、FIN、RST、URG、PSH",我們可以把這一部分理解成需要匹配的標(biāo)志位列表。

第二部分表示:第一部分的標(biāo)志位列表中,哪些標(biāo)志位必須為1,上例中,第二部分為SYN,則表示,第一部分需要匹配的標(biāo)志位列表中,SYN標(biāo)志位的值必須為1,其他標(biāo)志位必須為0。

所以,上例中的"SYN,ACK,FIN,RST,URG,PSH SYN"表示,需要匹配報(bào)文tcp頭中的"SYN、ACK、FIN、RST、URG、PSH"這些標(biāo)志位,其中SYN標(biāo)志位必須為1,其他的5個(gè)標(biāo)志位必須為0,這與上文中wireshark抓包時(shí)的情況相同,正是tcp三次握手時(shí)第一次握手時(shí)的情況,上文中第一次握手的報(bào)文的tcp頭中的標(biāo)志位如下:

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

其實(shí),--tcp-flags的表示方法與wireshark的表示方法有異曲同工之妙,只不過,wireshark中,標(biāo)志位為0的用"點(diǎn)"表示,標(biāo)志位為1的用對(duì)應(yīng)字母表示,在--tcp-flags中,需要先指明需要匹配哪些標(biāo)志位,然后再指明這些標(biāo)志位中,哪些必須為1,剩余的都必須為0。

那么,聰明如你一定想到了,如果我想要匹配tcp頭中的第二次握手時(shí)的標(biāo)志位的情況,該怎么表示呢?

示例如下(此處省略對(duì)源地址與目標(biāo)地址的匹配,重點(diǎn)在于對(duì)tcp-flags的示例)

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

上圖中,第一條命令匹配到的報(bào)文是第一次握手的報(bào)文,第二條命令匹配到的報(bào)文是第二次握手的報(bào)文。

綜上所述,只要我們能夠靈活的配置上例中的標(biāo)志位,即可匹配到更多的應(yīng)用場(chǎng)景中。

其實(shí),上例中的兩條命令還可以簡(jiǎn)寫為如下模樣

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

沒錯(cuò),我們可以用ALL表示"SYN,ACK,FIN,RST,URG,PSH"。

其實(shí),tcp擴(kuò)展模塊還為我們專門提供了一個(gè)選項(xiàng),可以匹配上文中提到的"第一次握手",那就是--syn選項(xiàng)

使用"--syn"選項(xiàng)相當(dāng)于使用"--tcp-flags SYN,RST,ACK,FIN  SYN",也就是說,可以使用"--syn"選項(xiàng)去匹配tcp新建連接的請(qǐng)求報(bào)文。

示例如下:

iptables詳解(6):iptables擴(kuò)展匹配條件之'--tcp-flags'

小結(jié)

結(jié)合之前的文章,我們把tcp模塊的常用擴(kuò)展匹配條件再總結(jié)一遍,方便以后回顧。

tcp擴(kuò)展模塊常用的擴(kuò)展匹配條件如下:

--sport

用于匹配tcp協(xié)議報(bào)文的源端口,可以使用冒號(hào)指定一個(gè)連續(xù)的端口范圍

Shell
1
2
3
4
#示例
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

--dport

用于匹配tcp協(xié)議報(bào)文的目標(biāo)端口,可以使用冒號(hào)指定一個(gè)連續(xù)的端口范圍

Shell
1
2
3
4
#示例
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

--tcp-flags

用于匹配報(bào)文的tcp頭的標(biāo)志位

Shell
1
2
3
4
5
#示例
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

--syn

用于匹配tcp新建連接的請(qǐng)求報(bào)文,相當(dāng)于使用"--tcp-flags SYN,RST,ACK,FIN  SYN"

Shell
1
2
#示例
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT

希望這篇文章能夠?qū)δ阌兴鶐椭鷡~~常來捧場(chǎng)哦,親~~~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多