防火墻,其實(shí)就是用于實(shí)現(xiàn)Linux下訪問控制的功能的,它分為硬件和軟件防火墻兩種。無論是在哪個網(wǎng)絡(luò)中,防火墻工作的地方一定是在網(wǎng)絡(luò)的邊緣。而我們的任務(wù)就是需要去定義到底防火墻如何工作,這就是防火墻的策略、規(guī)則,以達(dá)到讓它對出入網(wǎng)絡(luò)的IP、數(shù)據(jù)進(jìn)行檢測!
1. 關(guān)于防火墻
目前市面上比較常見的有三、四層的防火墻,叫做網(wǎng)絡(luò)層的防火墻,還有七層的防火墻,其實(shí)是代理層的網(wǎng)關(guān)。對于TCP/IP的七層模型來講,我們知道第三層是網(wǎng)絡(luò)層,三層的防火墻會在這層對源地址和目標(biāo)地址進(jìn)行檢測。但對于七層的防火墻,不管你源端口或者目標(biāo)端口,源地址或者目標(biāo)地址是什么,都將對你所有的東西進(jìn)行檢查。所以,對于設(shè)計(jì)原理來講,七層防火墻更加安全,但是這卻帶來了效率更低。所以市面上通常的防火墻方案,都是兩者相互結(jié)合的。
2. iptables的發(fā)展
包括iptables及其前身在內(nèi),這些都是工作在用戶空間中,定義規(guī)則的工具,本身并不算是防火墻。它們定義的規(guī)則,并且可以讓在內(nèi)核空間當(dāng)中的“Netfilter”來讀取,從而實(shí)現(xiàn)讓防火墻工作。而放入內(nèi)核的地方必須要是特定的位置,必須是TCP/IP的協(xié)議棧所經(jīng)過的地方——Netfilter。
iptables只是防火墻的管理工具,在內(nèi)核中真正實(shí)現(xiàn)防火墻功能的是Netfilter。
對Linux而言,TCP/IP協(xié)議棧存在于內(nèi)核當(dāng)中,這就意味著對數(shù)據(jù)報(bào)文的處理是在內(nèi)核中處理的,也就是說防火墻必須在工作在內(nèi)核中,防火墻必須在內(nèi)核中完成TCP/IP報(bào)文所流進(jìn)的位置,使用規(guī)則去檢查,才真正能工作起來。
3. iptables的結(jié)構(gòu)
從上面的發(fā)展我們知道了作者選擇了五個位置,來作為控制的地方,但是你有沒有發(fā)現(xiàn),其實(shí)前三個位置已經(jīng)基本上能將路徑徹底封鎖了,但是為什么已經(jīng)在進(jìn)出的口設(shè)置了關(guān)卡之后還要在內(nèi)部設(shè)置關(guān)卡呢?由于數(shù)據(jù)包尚未進(jìn)行路由決策,還不知道數(shù)據(jù)要走向哪里,所以在進(jìn)出口是沒有辦法實(shí)現(xiàn)數(shù)據(jù)過濾的。所以要在內(nèi)核空間里設(shè)置轉(zhuǎn)發(fā)的關(guān)卡,進(jìn)入用戶空間的關(guān)卡,從用戶空間出去的關(guān)卡。那么,既然他們沒有什么用,我們?yōu)槭裁催€要放置他們呢?
因?yàn)樵谶M(jìn)行NAT/DNAT的情況下,目標(biāo)地址轉(zhuǎn)換必須在路由之前轉(zhuǎn)換。所以我們必須在外網(wǎng)而后內(nèi)網(wǎng)的接口處進(jìn)行設(shè)置關(guān)卡。
Netfilter規(guī)定的這五個位置也叫五個規(guī)則鏈:
iptable的結(jié)構(gòu):在數(shù)據(jù)包過濾表中,規(guī)則被分組放在我們所謂的鏈中。鏈,就是一個規(guī)則的列表(如圖所示)。
要設(shè)置一個Linux防火墻,就要使用規(guī)則,每個規(guī)則指定在包中與什么匹配,以及對包執(zhí)行什么操作。那么什么是規(guī)則呢?因?yàn)閕ptables利用的是數(shù)據(jù)包過濾的機(jī)制,所以它會分析數(shù)據(jù)包的報(bào)頭數(shù)據(jù)。根據(jù)報(bào)頭數(shù)據(jù)與定義的規(guī)則來決定該數(shù)據(jù)包是否可以通過或者是被丟棄。也就是說,根據(jù)數(shù)據(jù)包的分析資料來與預(yù)先定義的規(guī)則內(nèi)容進(jìn)行“比對”,若數(shù)據(jù)包數(shù)據(jù)與規(guī)則內(nèi)容相匹配則進(jìn)行相應(yīng)的處理,否則就繼續(xù)下一條規(guī)則的比對。重點(diǎn)在于比對與比對的順序。
什么是表和鏈呢?
這得由iptables的名稱說起,為什么稱為iptables呢?因?yàn)樗锩姘卸鄠€表格(table),每個表格都定義出自己的默認(rèn)策略與規(guī)則,且每個表格的用途都不相同。iptables包含四個表,五個鏈。其中表是按照對數(shù)據(jù)包的處理功能區(qū)分的,鏈?zhǔn)前凑詹煌腍ook點(diǎn)來區(qū)分的,表和鏈實(shí)際上是netfilter的兩個維度。
四個規(guī)則表分別為:Filter、NAT、Mangle、Raw,默認(rèn)表是Filter(沒有指定表的時候就是Filter表)。 表的處理優(yōu)先級為:Raw>Mangle>NAT>Filter
常用的三個表:
iptables采用的是數(shù)據(jù)包過濾機(jī)制工作的,所以它會對數(shù)據(jù)包的報(bào)頭信息進(jìn)行分析,并根據(jù)我們預(yù)先設(shè)定的規(guī)則進(jìn)行匹配來決定是否對數(shù)據(jù)包的處理方式。
防火墻是層層過濾的,實(shí)際是按照匹配規(guī)則的順序從上到下,從前到后進(jìn)行過濾的。如果匹配上規(guī)則,即明確表明是阻止還是通過,數(shù)據(jù)包就不在向下繼續(xù)進(jìn)行匹配了。如果規(guī)則中沒有明確判斷出處理結(jié)果,也就是說不匹配當(dāng)前規(guī)則,那么就繼續(xù)向下進(jìn)行匹配,直到匹配默認(rèn)的規(guī)則,得到最后的處理結(jié)果。所以說規(guī)則的順序至關(guān)重要。
防火墻的默認(rèn)規(guī)則是所有的規(guī)則均不匹配時,才會執(zhí)行的規(guī)則。
指令常用操作選項(xiàng):
常用封包比對參數(shù):
其它選項(xiàng):
操作實(shí)例:禁止SSH遠(yuǎn)程登錄
注意:通過命令行添加的防火墻指令僅僅是臨時生效的,系統(tǒng)重啟即失效。
處理動作包括:
指令格式示意圖:
兩種增加規(guī)則選項(xiàng)的差別:
-A chain rule-specification:添加規(guī)則到指定規(guī)則鏈的結(jié)尾,成為最后一條規(guī)則。
-I chain [rulenum] rule-specification:如果沒有指定序號,則添加的規(guī)則將成為對應(yīng)鏈中的第一條規(guī)則。如果指定了序號,則成為該序號上的規(guī)則,而原來位于該序號的規(guī)則將往后移一位。
操作實(shí)例:禁止PING本機(jī)(ping指令屬于ICMP協(xié)議,其類型為“8”)
1. 配置案例講解
生產(chǎn)環(huán)境配置防火墻主要有兩種模式:逛公園及看電影模式
逛公園模式:默認(rèn)隨便進(jìn)出,對非法分子進(jìn)行拒絕。企業(yè)應(yīng)用:企業(yè)配置上網(wǎng)網(wǎng)關(guān)路由。
看電影模式:默認(rèn)沒票進(jìn)不去,花錢買票才能夠進(jìn)入電影院。企業(yè)應(yīng)用:服務(wù)器防火墻。
可以看出,還是第二種模式更加的嚴(yán)格和安全。其本質(zhì)區(qū)別就是防火墻的默認(rèn)規(guī)則是允許還是拒絕。
企業(yè)面試題:自定義鏈處理“syn”攻擊
2. 工作中如何維護(hù)防火墻
實(shí)際生產(chǎn)中,一般第一次添加規(guī)則是以命令行或者腳本的方式進(jìn)行,然后一次性的保存成配置文件,之后的維護(hù)工作就是圍繞著對該配置文件的修來來進(jìn)行。
3. 配置網(wǎng)關(guān)
第一步:首先,作為網(wǎng)關(guān)的主機(jī)除了要具備雙網(wǎng)卡并且能夠連接互聯(lián)網(wǎng)等物理?xiàng)l件外,還要確保將內(nèi)核的轉(zhuǎn)發(fā)功能打開。
另外,還要求Filter表的“FORWARD”鏈允許通過。
第二步:確保網(wǎng)關(guān)主機(jī)的相關(guān)模塊已經(jīng)加載
第三步:內(nèi)網(wǎng)服務(wù)器要能夠Ping通網(wǎng)關(guān)主機(jī)的內(nèi)外網(wǎng)卡。
第四步:在網(wǎng)關(guān)主機(jī)上配置規(guī)則(兩種方法)。
至此,Linux網(wǎng)關(guān)主機(jī)配置完畢。
還有一種應(yīng)用,就是把外部IP地址及端口映射到內(nèi)部服務(wù)器的地址及端口(和共享上網(wǎng)的環(huán)境一樣)。
要求:
企業(yè)應(yīng)用場景:
把訪問外網(wǎng)IP及端口的請求映射到內(nèi)網(wǎng)某臺服務(wù)器的地址及指定端口上(企業(yè)內(nèi)部)。
硬件防火墻,把訪問LVS/Nginx外網(wǎng)VIP及80端口的請求映射到IDC負(fù)載均衡服務(wù)器內(nèi)部IP及指定端口上(IDC機(jī)房的操作)
iptables在企業(yè)中的應(yīng)用小結(jié):
Linux主機(jī)防火墻(表:Filter
最為內(nèi)網(wǎng)共享上網(wǎng)的網(wǎng)關(guān)(表:NAT,鏈:POSTROUTING)
由外到內(nèi)的端口映射(表:NAT,鏈:PREROUTING)
指定地址段
4. 端口映射
連接跟蹤表已滿,開始丟包的解決辦法:
一、關(guān)閉防火墻。 簡單粗暴,直接有效
二、加大防火墻跟蹤表的大小,優(yōu)化對應(yīng)的系統(tǒng)參數(shù)