Transcript * 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 超陽春用戶端防火牆設計與防火牆規則儲存
1. 規則歸零
2. 預設政策
3. 信任本機
4. 回應封包
5. 信任用戶
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?
1. 先經過 NAT table 的 PREROUTING 鏈;
2. 經由路由判斷確定這個封包是要進入本機與否,若不進入本機,
則下一步;
3. 再經過 Filter table 的 FORWARD 鏈;
4. 通過 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
請參閱書籍
1. 用戶端所發出的封包表頭中,來源會是 192.168.1.100 ,然後
傳送到 NAT 這部主機;
2. NAT 這部主機的內部介面 (192.168.1.2) 接收到這個封包後,
會主動分析表頭資料,因為表頭資料顯示目的並非 Linux 本機,
所以開始經過路由,將此封包轉到可以連接到 Internet 的
Public IP 處;
3. 由於 private IP 與 public IP 不能互通,所以 Linux 主機透過
iptables 的 NAT table 內的 Postrouting 鏈將封包表頭的來源
偽裝成為 Linux 的 Public IP ,並且將兩個不同來源
(192.168.1.100 及 public IP) 的封包對應寫入暫存記憶體當中,
然後將此封包傳送出去了;
P.9-40
請參閱書籍
P.9-41
請參閱書籍
4.
在 Internet 上面的主機接到這個封包時,會將回應資料傳送
給那個 Public IP 的主機;
5.
當 Linux NAT 伺服器收到來自 Internet 的回應封包後,會分
析該封包的序號,並比對剛剛記錄到記憶體當中的資料,由於
發現該封包為後端主機之前傳送出去的,因此 在 NAT
Prerouting 鏈 中 , 會 將 目 標 IP 修 改 成 為 後 端 主 機 ,
亦 即 那 部 192.168.1.100,然後發現目標已經不是本機
(public IP),所以開始透過路由分析封包流向;
6.
封包會傳送到 192.168.1.2 這個內部介面,然後再傳送到最終
目標 192.168.1.100 機器上去!
P.9-41
請參閱書籍
目標 NAT, DNAT:修改封包表頭的『目標』項目
P.9-42
請參閱書籍
1. 外部主機想要連接到目的端的 WWW 服務,則必須要連接到
我們的 NAT 伺服器上頭;
2. 我們的 NAT 伺服器已經設定好要分析出 port 80 的封包,所以
當 NAT 伺服器接到這個封包後,會將目標 IP 由 public IP 改成
192.168.1.210 ,且將該封包相關資訊記錄下來,等待內部伺
服器的回應;
3. 上述的封包在經過路由後,來到 private 介面處,然後透過內
部的 LAN 傳送到 192.168.1.210 上頭!
4. 192.186.1.210 會回應資料給 61.xx.xx.xx ,這個回應當然會傳
送到 192.168.1.2 上頭去;
5. 經過路由判斷後,來到 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
請參閱書籍