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