新概念運(yùn)維之REJECT和DROP的區(qū)別
原創(chuàng)【有關(guān)新概念運(yùn)維】在日常的系統(tǒng)管理運(yùn)維工作中,每個(gè)人對(duì)于系統(tǒng)、工具、應(yīng)用、命令、架構(gòu)等方面都會(huì)有自己的理解。理解方式的不同也意味著不同的認(rèn)知,因此,這種理解方式的交流,也可能碰撞出更多思維的火花,讓每個(gè)人從另一個(gè)角度了解自己每天從事的工作。51CTO系統(tǒng)頻道從日常和運(yùn)維人員的交流中收集這些理解方式,組合成短文集,名為《新概念運(yùn)維》。
iptables這個(gè)防火墻工具,相信運(yùn)維朋友們幾乎都在使用。大家都知道iptables對(duì)于進(jìn)來(lái)的信息包有三種處理方法,那就是ACCEPT、DROP、REJECT。ACCEPT很容易理解,而REJECT和DROP的區(qū)別是什么?某天聽(tīng)到Sery的解釋,感覺(jué)說(shuō)的很容易理解:
“就好象騙子給你打電話,drop就是直接拒收。reject的話,相當(dāng)于你還給騙子回個(gè)電話。”
其實(shí)對(duì)于到底是使用DROP還是REJECT,從很久以前開(kāi)始就非常多的人提出這方面的疑問(wèn)。REJECT其實(shí)就比DROP多返回一個(gè)ICMP錯(cuò)誤信息包,兩個(gè)策略各有優(yōu)劣,簡(jiǎn)單總結(jié)如下:
DROP比REJECT好在節(jié)省資源,而且延緩黑客攻擊的進(jìn)度(因?yàn)椴粫?huì)給黑客返回任何有關(guān)服務(wù)器的信息);壞在容易讓企業(yè)的網(wǎng)絡(luò)問(wèn)題難以排查,而且在DDoS攻擊的情況容易耗盡所有的帶寬。
REJECT比DROP的好處在于容易診斷和調(diào)試網(wǎng)絡(luò)設(shè)備或防火墻造成的問(wèn)題;壞處上面也說(shuō)了,你給騙子回個(gè)電話,相當(dāng)于暴露了自己的服務(wù)器信息。
所以一般的建議是在上游防火墻中使用REJECT,在比較危險(xiǎn)的面向外網(wǎng)的基礎(chǔ)防火墻上,使用DROP要相對(duì)安全一些。
再說(shuō)個(gè)跟這事兒有點(diǎn)關(guān)系的故事。話說(shuō)某IT運(yùn)維群中制定了這樣一條群規(guī):
工作時(shí)間 閑聊 drop 非工作時(shí)間 閑聊 accept 違反規(guī)定 Any kill
可能因?yàn)镮T運(yùn)維是男性居多的緣故,隔了幾天,發(fā)現(xiàn)群規(guī)被修改成了:
露點(diǎn)圖片 any accept 工作時(shí)間 閑聊 drop 非工作時(shí)間 閑聊 accept 違反規(guī)定 Any kill
執(zhí)行了幾天之后,群主被迫踢出了很多成員,甚至很多老成員也被波及。于是商討之后,現(xiàn)在的群規(guī)是:
anytime anytalk accept
經(jīng)筆者跟群主商討,群主表示歡迎感興趣的ITers加入該群一起討論技術(shù)、討論人生。群號(hào)是158144617,能遵守初始版群規(guī)的人員優(yōu)先錄取~
更新:由于第一個(gè)群已滿,群主正在協(xié)調(diào)部分人員轉(zhuǎn)移到新群,群號(hào)為 154743972。
《新概念運(yùn)維》欄目接受投稿,有意者請(qǐng)聯(lián)系 yangsai@51cto.com 。
#p#
【相關(guān)資料】netfilter/iptables的工作原理
netfilter/iptables IP 信息包過(guò)濾系統(tǒng)是一種功能強(qiáng)大的工具,可用于添加、編輯和除去規(guī)則,這些規(guī)則是在做信息包過(guò)濾決定時(shí),防火墻所遵循和組成的規(guī)則。這些規(guī)則存儲(chǔ)在專用的信息包過(guò)濾表中,而這些表集成在 Linux 內(nèi)核中。在信息包過(guò)濾表中,規(guī)則被分組放在我們所謂的 鏈(chain)中。
雖然 netfilter/iptables IP 信息包過(guò)濾系統(tǒng)被稱為單個(gè)實(shí)體,但它實(shí)際上由兩個(gè)組件 netfilter和 iptables 組成。
netfilter 組件也稱為 內(nèi)核空間(kernelspace),是內(nèi)核的一部分,由一些信息包過(guò)濾表組成,這些表包含內(nèi)核用來(lái)控制信息包過(guò)濾處理的規(guī)則集。
iptables 組件是一種工具,也稱為 用戶空間(userspace),它使插入、修改和除去信息包過(guò)濾表中的規(guī)則變得容易。
通過(guò)使用用戶空間,可以構(gòu)建自己的定制規(guī)則,這些規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過(guò)濾表中。這些規(guī)則具有 目標(biāo),它們告訴內(nèi)核對(duì)來(lái)自某些源、前往某些目的地或具有某些協(xié)議類型的信息包做些什么。如果某個(gè)信息包與規(guī)則匹配,那么使用目標(biāo) ACCEPT 允許該信息包通過(guò)。還可以使用目標(biāo) DROP 或 REJECT 來(lái)阻塞并殺死信息包。對(duì)于可對(duì)信息包執(zhí)行的其它操作,還有許多其它目標(biāo)。
根據(jù)規(guī)則所處理的信息包的類型,可以將規(guī)則分組在鏈中。處理入站信息包的規(guī)則被添加到 INPUT 鏈中。處理出站信息包的規(guī)則被添加到 OUTPUT 鏈中。處理正在轉(zhuǎn)發(fā)的信息包的規(guī)則被添加到 FORWARD 鏈中。這三個(gè)鏈?zhǔn)腔拘畔^(guò)濾表中內(nèi)置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如 PREROUTING 和 POSTROUTING ),以及提供用戶定義的鏈。每個(gè)鏈都可以有一個(gè) 策略,它定義“缺省目標(biāo)”,也就是要執(zhí)行的缺省操作,當(dāng)信息包與鏈中的任何規(guī)則都不匹配時(shí),執(zhí)行此操作。
建立規(guī)則并將鏈放在適當(dāng)?shù)奈恢弥?,就可以開(kāi)始進(jìn)行真正的信息包過(guò)濾工作了。這時(shí)內(nèi)核空間從用戶空間接管工作。當(dāng)信息包到達(dá)防火墻時(shí),內(nèi)核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個(gè)過(guò)程稱為 路由。
如果信息包源自外界并前往系統(tǒng),而且防火墻是打開(kāi)的,那么內(nèi)核將它傳遞到內(nèi)核空間信息包過(guò)濾表的 INPUT 鏈。如果信息包源自系統(tǒng)內(nèi)部或系統(tǒng)所連接的內(nèi)部網(wǎng)上的其它源,并且此信息包要前往另一個(gè)外部系統(tǒng),那么信息包被傳遞到 OUTPUT 鏈。類似的,源自外部系統(tǒng)并前往外部系統(tǒng)的信息包被傳遞到 FORWARD 鏈。
接下來(lái),將信息包的頭信息與它所傳遞到的鏈中的每條規(guī)則進(jìn)行比較,看它是否與某條規(guī)則完全匹配。如果信息包與某條規(guī)則匹配,那么內(nèi)核就對(duì)該信息包執(zhí)行由該規(guī)則的目標(biāo)指定的操作。但是,如果信息包與這條規(guī)則不匹配,那么它將與鏈中的下一條規(guī)則進(jìn)行比較。最后,如果信息包與鏈中的任何規(guī)則都不匹配,那么內(nèi)核將參考該鏈的策略來(lái)決定如何處理該信息包。理想的策略應(yīng)該告訴內(nèi)核 DROP 該信息包。
netfilter/iptables信息包過(guò)濾流程(來(lái)源)
【編輯推薦】