09 防火牆與 NAT 伺服器
認識防火牆 網路安全除了隨時注意相關軟體的漏洞以及網路上的安全通報之 外,你最好能夠依據自己的環境來訂定防火牆機制!這樣對於你 的網路環境,會比較有保障一點喔!那麼什麼是防火牆呢?其實 防火牆就是透過訂定一些有順序的規則,並管制進入到我們網域 內的主機 (或者可以說是網域) 資料封包的一種機制!更廣義的來 說,只要能夠分析與過濾進出我們管理之網域的封包資料,就可 以稱為防火牆。 P.9-2 請參閱書籍
為何需要防火牆 仔細分析第七章的圖 7.1-1 可以發現,封包進入本機時,會通過 防火牆、伺服器軟體程序、SELinux 與檔案系統等。所以基本上, 如果你的系統 (1)已經關閉不需要而且危險的服務; (2)已經將整個 系統的所有軟體都保持在最新的狀態; (3)權限設定妥當且定時進 行備份工作; (4)已經教育使用者具有良好的網路、系統操作習慣。 那麼你的系統實際上已經頗為安全了!要不要架設防火牆?那就 見仁見智囉! P.9-3 請參閱書籍
所以鳥哥認為,防火牆最重要的任務就是在規劃出: 切割被信任(如子網域)與不被信任(如 Internet)的網段; 所以囉,防火牆能作什麼呢?防火牆最大的功能就是幫助你『限 制某些服務的存取來源』!舉例來說:(1)你可以限制檔案傳輸服 務 (FTP) 只在子網域內的主機才能夠使用,而不對整個 Internet 開放; (2)你可以限制整部 Linux 主機僅可以接受客戶端的 WWW 要求,其他的服務都關閉; (3)你還可以限制整部主機僅能主動對 外連線。反過來說,若有用戶端對我們主機發送主動連線的封包 狀態 (TCP 封包的 SYN flag) 就予以抵擋等等。這些就是最主要的 防火牆功能了! 所以鳥哥認為,防火牆最重要的任務就是在規劃出: 切割被信任(如子網域)與不被信任(如 Internet)的網段; 劃分出可提供 Internet 的服務與必須受保護的服務; 分析出可接受與不可接受的封包狀態; P.9-3 請參閱書籍
Linux 系統上防火牆的主要類別 Netfilter (封包過濾機制) TCP Wrappers (程式控管) Proxy (代理伺服器) 請參閱書籍
防火牆的一般網路佈線示意 單一網域,僅有一個路由器 因為內外網域已經分開,所以安全維護在內部可以開放的權 限較大! 安全機制的設定可以針對 Linux 防火牆主機來維護即可! 對外只看的到 Linux 防火牆主機,所以對於內部可以達到有 效的安全防護! P.9-5~6 請參閱書籍
內部網路包含安全性更高的子網路,需內部防火牆切開子網路: P.9-6~7 請參閱書籍
在防火牆的後面架設網路伺服器主機 P.9-7~8 請參閱書籍
防火牆的使用限制 可以進行的分析工作主要有: 拒絕讓 Internet 的封包進入主機的某些埠口 拒絕讓某些來源 IP 的封包進入 拒絕讓帶有某些特殊旗標 (flag) 的封包進入 分析硬體位址 (MAC) 來決定連線與否 某些情況下,他並不能保證我們的網路一定就很安全。 舉幾個例 子來談一談: 防火牆並不能很有效的抵擋病毒或木馬程式 防火牆對於來自內部 LAN 的攻擊較無承受力 P.9-8~9 請參閱書籍
Linux 的封包過濾軟體:iptables 封包進入流程: 規則順序的重要性! 舉個簡單的例子,假設我預 先定義 10 條防火牆規則好了, 那麼當 Internet 來了一個封 包想要進入我的主機,那麼 防火牆是如何分析這個封包 的呢?我們以底下的圖示來 說明好了: P.9-13~14 請參閱書籍
當一個網路封包要進入到主機之前,會先經由 NetFilter 進行檢查, 那就是 iptables 的規則了。 檢查通過則接受 (ACCEPT) 進入本 機取得資源,如果檢查不通過,則可能予以丟棄 (DROP) !上圖中 主要的目的在告知你:『規則是有順序的』!例如當網路封包進 入 Rule 1 的比對時,如果比對結果符合 Rule 1 ,此時這個網路封 包就會進行 Action 1 的動作,而不會理會後續的 Rule 2, Rule 3.... 等規則的分析了。 P.9-14 請參閱書籍
iptables 的表格 (table) 與鏈 (chain) 請參閱書籍
filter (過濾器):主要跟進入 Linux 本機的封包有關,這個是 預設的 table 喔! INPUT:主要與想要進入我們 Linux 本機的封包有關; OUTPUT:主要與我們 Linux 本機所要送出的封包有關; FORWARD:這個咚咚與 Linux 本機比較沒有關係,他可以『轉 遞封包』到後端的電腦中,與下列 nat table 相關性較高。 nat (位址轉換):是 Network Address Translation 的縮寫, 這個表格主要在進行來源與目的之 IP 或 port 的轉換,與 Linux 本機較無關,主要與 Linux 主機後的區域網路內電腦 較有相關。 PREROUTING:在進行路由判斷之前所要進行的規則 (DNAT/REDIRECT) POSTROUTING:在進行路由判斷之後所要進行的規則 (SNAT/MASQUERADE) OUTPUT:與發送出去的封包有關 P.9-16~17 請參閱書籍
mangle (破壞者):這個表格主要是與特殊的封包的路由旗 標有關,早期僅有 PREROUTING 及 OUTPUT 鏈,不過從 kernel 2.4.18 之後加入了 INPUT 及 FORWARD 鏈。 由於 這個表格與特殊旗標相關性較高,所以像咱們這種單純的環 境當中,較少使用 mangle 這個表格。 P.9-17 請參閱書籍
P.9-17 請參閱書籍
由於 mangle 這個表格很少被使用,如果將圖 9.3-3 的 mangle 拿掉的話,那就容易看的多了: P.9-18 請參閱書籍
本機的 iptables 語法 9.3.4-1 規則的觀察與清除 P.9-19~21 請參閱書籍
一般來說,我們在重新定義防火牆的時候,都會先將規則給他清 除掉。還記得我們前面談到的,防火牆的『規則順序』是有特殊 意義的,所以囉,當然先清除掉規則,然後一條一條來設定會比 較容易一點啦。底下就來談談定義預設政策吧! P.9-22 請參閱書籍
9.3.4-2 定義預設政策 (policy) P.9-22~23 請參閱書籍
9.3.4-3 封包的基礎比對:IP, 網域及介面裝置 P.9-23~24 請參閱書籍
P.9-24~25 請參閱書籍
9.3.4-4 TCP, UDP 的規則比對:針對埠口設定 P.9-25~26 請參閱書籍
瞧!你可以利用 UDP 與 TCP 協定所擁有的埠口號碼來進行某些服 務的開放或關閉喔!你還可以綜合處理呢!例如:只要來自 192. 168 瞧!你可以利用 UDP 與 TCP 協定所擁有的埠口號碼來進行某些服 務的開放或關閉喔!你還可以綜合處理呢!例如:只要來自 192.168.1.0/24 的 1024:65535 埠口的封包,且想要連線到本機 的 ssh port 就予以抵擋,可以這樣做: P.9-26 請參閱書籍
9.3.4-5 iptables 外掛模組:mac 與 state 請參閱書籍
9.3.4-6 ICMP 封包規則的比對:針對是否回應 ping 來設計 請參閱書籍
9.3.4-7 超陽春用戶端防火牆設計與防火牆規則儲存 規則歸零 預設政策 信任本機 回應封包 信任用戶 P.9-29 請參閱書籍
P.9-29 請參閱書籍
單機防火牆的一個實例 規則草擬 外部網路使用 eth0 (如果是撥接,有可能是 ppp0,請針對你 的環境來設定); 內部網路使用 eth1 ,且內部使用 192.168.100.0/24 這個 Class ; 主機預設開放的服務有 WWW, SSH, https 等等; P.9-33 請參閱書籍
OUTPUT 及 FORWARD 為 ACCEPT INPUT 為 DROP OUTPUT 及 FORWARD 為 ACCEPT 鳥哥底下預計提供的 防火牆流程是這樣的: P.9-34 請參閱書籍
實際設定 iptables.rule:設定最基本的規則,包括清除防火牆規則、 載入模組、設定服務可接受等; iptables.deny:設定抵擋某些惡意主機的進入; iptables.allow:設定允許某些自訂的後門來源主機! P.9-35 請參閱書籍
P.9-35~36 請參閱書籍
P.9-36 請參閱書籍
P.9-36~37 請參閱書籍
P.9-37 請參閱書籍
P.9-37~38 請參閱書籍
P.9-38 請參閱書籍
NAT 伺服器的設定 NAT 的全名是 Network Address Translation,字面上的意思是 『網路位址的轉換』。由字面上的意思我們來想一想,TCP/IP 的 網路封包不是有 IP 位址嗎?那 IP 位址不是有來源與目的嗎?我們 的 iptables 指令就能夠修改 IP 封包的表頭資料,嘿嘿!連目標或 來源的 IP 位址都可以修改呢!甚至連 TCP 封包表頭的 port number 也能修改!真是有趣! P.9-39 請參閱書籍
什麼是 NAT? SNAT? DNAT? 先經過 NAT table 的 PREROUTING 鏈; 經由路由判斷確定這個封包是要進入本機與否,若不進入本機, 則下一步; 再經過 Filter table 的 FORWARD 鏈; 通過 NAT table 的 POSTROUTING 鏈,最後傳送出去。 NAT 伺服器的重點就在於上面流程的第 1,4 步驟,也就是 NAT table 的兩條重要的鏈:PREROUTING 與 POSTROUTING。 那這 兩條鏈有什麼重要的功能呢?重點在於修改 IP 嘛!但是這兩條鏈 修改的 IP 是不一樣的!POSTROUTING 在修改來源 IP , PREROUTING 則在修改目標 IP 。 由於修改的 IP 不一樣,所以就 稱為來源 NAT (Source NAT, SNAT) 及目標 NAT (Destination NAT, DNAT)。我們先來談一談 IP 分享器功能的 SNAT 吧! P.9-39~40 請參閱書籍
來源 NAT, SNAT:修改封包表頭的『來源』項目 P.9-40 請參閱書籍
用戶端所發出的封包表頭中,來源會是 192.168.1.100 ,然後 傳送到 NAT 這部主機; NAT 這部主機的內部介面 (192.168.1.2) 接收到這個封包後, 會主動分析表頭資料,因為表頭資料顯示目的並非 Linux 本機, 所以開始經過路由,將此封包轉到可以連接到 Internet 的 Public IP 處; 由於 private IP 與 public IP 不能互通,所以 Linux 主機透過 iptables 的 NAT table 內的 Postrouting 鏈將封包表頭的來源 偽裝成為 Linux 的 Public IP ,並且將兩個不同來源 (192.168.1.100 及 public IP) 的封包對應寫入暫存記憶體當中, 然後將此封包傳送出去了; P.9-40 請參閱書籍
P.9-41 請參閱書籍
在 Internet 上面的主機接到這個封包時,會將回應資料傳送 給那個 Public IP 的主機; 當 Linux NAT 伺服器收到來自 Internet 的回應封包後,會分 析該封包的序號,並比對剛剛記錄到記憶體當中的資料,由於 發現該封包為後端主機之前傳送出去的,因此 在 NAT Prerouting 鏈 中 , 會 將 目 標 IP 修 改 成 為 後 端 主 機 , 亦 即 那 部 192.168.1.100,然後發現目標已經不是本機 (public IP),所以開始透過路由分析封包流向; 封包會傳送到 192.168.1.2 這個內部介面,然後再傳送到最終 目標 192.168.1.100 機器上去! P.9-41 請參閱書籍
目標 NAT, DNAT:修改封包表頭的『目標』項目 P.9-42 請參閱書籍
外部主機想要連接到目的端的 WWW 服務,則必須要連接到 我們的 NAT 伺服器上頭; 我們的 NAT 伺服器已經設定好要分析出 port 80 的封包,所以 當 NAT 伺服器接到這個封包後,會將目標 IP 由 public IP 改成 192.168.1.210 ,且將該封包相關資訊記錄下來,等待內部伺 服器的回應; 上述的封包在經過路由後,來到 private 介面處,然後透過內 部的 LAN 傳送到 192.168.1.210 上頭! 192.186.1.210 會回應資料給 61.xx.xx.xx ,這個回應當然會傳 送到 192.168.1.2 上頭去; 經過路由判斷後,來到 NAT Postrouting 的鏈,然後透過剛剛 第二步驟的記錄,將來源 IP 由 192.168.1.210 改為 public IP 後,就可以傳送出去了! P.9-42 請參閱書籍
最陽春 NAT 伺服器:IP 分享功能 P.9-43 請參閱書籍
在防火牆後端之網路伺服器 DNAT 設定 立刻實作 假設內網有部主機 IP 為 192.168.100.10 ,該主機是可對 Internet 開放的 WWW 伺服器。你該如何透過 NAT 機制,將 WWW 封包傳到該主機上? 答:假設 public IP 所在的介面為 eth0 ,那麼你的規則就是: P.9-45 請參閱書籍