460 likes | 670 Views
09. 防火牆與 NAT 伺服器. 認識防火牆 網路安全除了隨時注意相關軟體的漏洞以及網路上的安全通報之外,你最好能夠依據自己的環境來訂定防火牆機制!這樣對於你的網路環境,會比較有保障一點喔!那麼什麼是防火牆呢?其實防火牆就是透過訂定一些有順序的規則,並管制進入到我們網域內的主機 ( 或者可以說是網域 ) 資料封包的一種機制!更廣義的來說,只要能夠分析與過濾進出我們管理之網域的封包資料,就可以稱為防火牆。. P.9-2. 請參閱書籍. 為何需要防火牆
E N D
09 • 防火牆與 NAT 伺服器
認識防火牆 • 網路安全除了隨時注意相關軟體的漏洞以及網路上的安全通報之外,你最好能夠依據自己的環境來訂定防火牆機制!這樣對於你的網路環境,會比較有保障一點喔!那麼什麼是防火牆呢?其實防火牆就是透過訂定一些有順序的規則,並管制進入到我們網域內的主機 (或者可以說是網域) 資料封包的一種機制!更廣義的來說,只要能夠分析與過濾進出我們管理之網域的封包資料,就可以稱為防火牆。 • P.9-2 請參閱書籍
為何需要防火牆 • 仔細分析第七章的圖 7.1-1 可以發現,封包進入本機時,會通過防火牆、伺服器軟體程序、SELinux與檔案系統等。所以基本上,如果你的系統 (1)已經關閉不需要而且危險的服務; (2)已經將整個系統的所有軟體都保持在最新的狀態; (3)權限設定妥當且定時進行備份工作; (4)已經教育使用者具有良好的網路、系統操作習慣。 那麼你的系統實際上已經頗為安全了!要不要架設防火牆?那就見仁見智囉! • P.9-3 請參閱書籍
所以囉,防火牆能作什麼呢?防火牆最大的功能就是幫助你『限制某些服務的存取來源』!舉例來說:(1)你可以限制檔案傳輸服務 (FTP) 只在子網域內的主機才能夠使用,而不對整個 Internet 開放; (2)你可以限制整部 Linux 主機僅可以接受客戶端的 WWW 要求,其他的服務都關閉; (3)你還可以限制整部主機僅能主動對外連線。反過來說,若有用戶端對我們主機發送主動連線的封包狀態 (TCP 封包的 SYN flag) 就予以抵擋等等。這些就是最主要的防火牆功能了! • 所以鳥哥認為,防火牆最重要的任務就是在規劃出: • 切割被信任(如子網域)與不被信任(如 Internet)的網段; • 劃分出可提供 Internet 的服務與必須受保護的服務; • 分析出可接受與不可接受的封包狀態; • P.9-3 請參閱書籍
Linux 系統上防火牆的主要類別 • Netfilter (封包過濾機制) • TCP Wrappers (程式控管) • Proxy (代理伺服器) • P.9-4 請參閱書籍
防火牆的一般網路佈線示意 • 單一網域,僅有一個路由器 • 因為內外網域已經分開,所以安全維護在內部可以開放的權限較大! • 安全機制的設定可以針對 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) • P.9-15~16 請參閱書籍
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.1.0/24 的 1024:65535 埠口的封包,且想要連線到本機的 ssh port 就予以抵擋,可以這樣做: • P.9-26 請參閱書籍
9.3.4-5 iptables外掛模組:mac與 state • P.9-26~27 請參閱書籍
9.3.4-6 ICMP 封包規則的比對:針對是否回應 ping 來設計 • P.9-28 請參閱書籍
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 請參閱書籍
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 請參閱書籍
立刻實作 • P.9-45 • 假設內網有部主機 IP 為 192.168.100.10 ,該主機是可對 Internet 開放的 WWW 伺服器。你該如何透過 NAT 機制,將 WWW 封包傳到該主機上? • 答:假設 public IP 所在的介面為 eth0 ,那麼你的規則就是: • 在防火牆後端之網路伺服器 DNAT 設定 請參閱書籍