場(chǎng)景: 我對(duì)A主機(jī)入站規(guī)則設(shè)置了默認(rèn)deny,只開(kāi)放80端口, 但是A在訪問(wèn)B的時(shí)候因?yàn)樾枰⑽帐?,在B向A發(fā)送syc,ack包的時(shí)候,因?yàn)锳主機(jī)訪問(wèn)B時(shí)的端口是隨機(jī)的,并且A主機(jī)入站規(guī)則默認(rèn)是deny,所以syn,ack包到不了A,這個(gè)時(shí)候我對(duì)A設(shè)計(jì)的入站規(guī)則就不能使用了。
最開(kāi)始設(shè)置的deny
iptables -A INPUT -p tcp -j REJECT
因?yàn)槿挝帐职l(fā)送的包都是不一樣的,所以我可以單獨(dú)攔截握手的其中一個(gè)環(huán)節(jié)。因?yàn)閯e人訪問(wèn)我的第一次握手的包的syn。而如果我去訪問(wèn)別人,別人回給我的包是二次握手的syn,ack。所以我在設(shè)置入站規(guī)則默認(rèn)deny的時(shí)候,可以只對(duì)syn進(jìn)行阻斷
最后設(shè)置的規(guī)則
iptables -A INPUT -p tcp --syn -j REJECT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
iptables -A INPUT -p tcp --tcp-flags ALL SYN -j REJECT
上面的三個(gè)規(guī)則是等價(jià)的,隨意設(shè)置一個(gè)就可以
ALL 代表的SYN,ACK,FIN,RST,URG,PSH
-p tcp --tcp-flags LIST1 LIST2
匹配指定的TCP標(biāo)記,有兩個(gè)參數(shù)列表,列表內(nèi)部用逗號(hào)為分隔符,兩個(gè)列表之間用空格分開(kāi),
LIST1用作參數(shù)檢查,LIST2用作參數(shù)匹配??捎脴?biāo)志有:
SYN( 同步; 表示開(kāi)始會(huì)話請(qǐng)求 ),
ACK(應(yīng)答),
FIN(結(jié)束; 結(jié)束會(huì)話),
RST(復(fù)位;中斷一個(gè)連接) ,
PSH(推送; 數(shù)據(jù)包立即發(fā)送),
URG(緊急 ),
ALL(指選定所有的標(biāo)記),NONE(指未選定任何標(biāo)記)