Learning Objectives
- 用最小權限與預設拒絕的原則,決定網路上哪些連線應該放行
- 說明 ACL 由上往下比對、第一條符合就決定、最後隱含全部拒絕,並在模擬器裡寫出 ACL
- 比較無狀態的 ACL 與有狀態的防火牆,說明連線表怎麼讓回程封包自動通過
- 說明 ARP 偽冒、DoS/DDoS、中間人、連接埠掃描的原理,以及對應的防禦方法
- 說明 VPN 做什麼、適合什麼情況,以及它不能解決的問題
只讓需要的連線通過
到目前為止,模擬網路裡只要路由對了,任何主機都能連到任何主機的任何連接埠。真的網路不能這樣: 系網站只需要讓外部連 HTTPS,不需要讓全世界嘗試登入它的 SSH;系辦電腦的遠端桌面更不該對外開放。
網路安全的設計有兩個基本原則:
| 原則 | 意思 | 例子 |
|---|---|---|
| 最小權限(least privilege) | 每個人、每台主機只拿到完成工作需要的存取權 | 外部只能連網站的 443 埠;只有管理員的電腦能 SSH 到伺服器 |
| 預設拒絕(default deny) | 沒有明確允許的,一律拒絕 | 防火牆最後一條是「其他全部拒絕」,新開的服務要主動加規則才連得到 |
預設拒絕的好處是:忘了寫規則時,結果是「連不到」(使用者會來反應,你去補規則),而不是「不小心對全世界開放」(沒有人會發現,直到出事)。
這一課的工具:
- ACL(Access Control List,存取控制清單):路由器在介面上逐一檢查封包,決定放行或丟掉。
- 防火牆(firewall):記得每一條連線,能分辨「這是回應」還是「新的連線」。
- VPN:在不可信任的網路上建一條加密的通道。
本課的設備指令是課程自訂的教學用指令,各廠牌實際的指令與規則語法以手冊為準。這一課只談防禦: 攻擊只說明原理與怎麼防,不提供任何攻擊的操作方法;未經授權測試他人的系統,在臺灣與許多國家都可能觸法。
ACL:在路由器介面上逐條比對
ACL 是一串規則,套用在路由器的某個介面、某個方向:
- in:封包從這個介面進入路由器時檢查
- out:封包要從這個介面送出時檢查
每條規則寫:允許(permit)或拒絕(deny)、協定、來源網段、目的網段,以及(TCP、UDP 時)目的連接埠。比對的規則:
- 由上往下一條一條比
- 第一條符合的就決定結果,後面的規則不再看
- 全部都不符合時,最後有一條看不見的「全部拒絕」(implicit deny)
所以規則的順序很重要。例如想封鎖 203.0.113.0/24 這個來源,但允許其他人連網站:
| 順序 | 規則 | 203.0.113.66 連網站的結果 |
|---|---|---|
| 封鎖在前 | ① deny any 203.0.113.0/24 → any ② permit tcp any → 網站 port 443 | 第 ① 條符合:拒絕 |
| 封鎖在後 | ① permit tcp any → 網站 port 443 ② deny any 203.0.113.0/24 → any | 第 ① 條就符合:允許,第 ② 條永遠輪不到 |
原則是越精確的規則放越前面,越寬的放後面。
ACL 是無狀態的(stateless):每個封包單獨判斷,路由器不記得「剛才有人從裡面連出去」。 這個特性會造成一個常見的問題,下面的練習會遇到。
有狀態的防火牆與連線表
有狀態防火牆(stateful firewall)多做了一件事:放行一條新連線時,把它記在連線表(connection table)裡, 例如「192.168.10.23:52000 ↔ 198.51.100.80:443,TCP」。之後收到封包時先查連線表:
- 屬於表裡已經有的連線(包括對方的回應):直接放行,不用再比規則
- 是新的連線:照規則由上往下比對,最後是預設政策
- 允許的新連線加進連線表;連線結束(TCP 的 FIN、RST)或閒置太久就移除
| 無狀態 ACL | 有狀態防火牆 | |
|---|---|---|
| 判斷依據 | 每個封包單獨看標頭 | 先看是不是已建立連線的一部分 |
| 回程封包 | 要另外寫規則放行,常常寫得太寬 | 自動放行,規則只要寫「誰可以發起連線」 |
| 規則數量 | 每個服務要寫去程與回程 | 每個服務一條 |
| 代價 | 簡單、快 | 要記住每條連線,連線表會被大量連線塞滿(DoS 的目標之一) |
UDP 沒有連線,防火牆用「同一組位址與連接埠,在一段時間內的回應」來判斷,例如 DNS 查詢的回答。
實務上常把網路分成區域(zone),再寫區域之間的規則:
| 區域 | 放什麼 | 典型規則 |
|---|---|---|
| 內部網路(LAN) | 辦公室、電腦教室的電腦 | 可以主動連外;外部不能主動連進來 |
| 伺服器區(DMZ) | 對外提供服務的網站、DNS | 外部只能連指定的服務埠;伺服器區不能主動連進內部網路 |
| 外部(Internet) | 網際網路 | 不信任 |
伺服器區的用意是:就算網站主機被入侵,攻擊者也還隔著一道防火牆才能碰到內部網路。
小測驗:ACL 與防火牆
某介面的 ACL 依序是:① deny tcp any → 10.0.50.10 port 22 ② permit tcp any → 10.0.50.0/24。外部主機連 10.0.50.10 的 80 埠,結果是?
同一個 ACL,外部主機 ping 10.0.50.10,結果是?
為什麼「預設拒絕」比「預設允許、再把危險的服務一個一個擋掉」安全?
有狀態防火牆的連線表被大量偽造的新連線塞滿,最可能造成什麼結果?
常見攻擊的原理與防禦
下面四種攻擊都利用了前面幾課學過的協定特性。這裡只說明原理,重點放在怎麼防。
| 攻擊 | 利用什麼 | 防禦 |
|---|---|---|
| ARP 偽冒(ARP spoofing) | ARP 沒有驗證(第 8 課):同一個網段的任何主機都能送出「閘道的 IP 對應到我的 MAC」,讓別人把封包送給它 | 交換器的動態 ARP 檢查(Dynamic ARP Inspection:依 DHCP 發出的位址紀錄核對 ARP 封包,不符的丟掉);重要設備用固定的 ARP 項目;最根本的是加密連線(HTTPS、SSH),封包被轉走也讀不懂、改不了 |
| DoS/DDoS(阻斷服務/分散式阻斷服務) | 用大量流量塞滿頻寬,或用大量半開的 TCP 連線、請求耗盡伺服器與防火牆的資源;DDoS 是很多台被控制的電腦一起送 | 限流(每個來源每秒的新連線、請求數上限)、SYN cookies 這類減少半開連線負擔的作法(RFC 4987 整理了常見的對策);流量大到自己的線路扛不住時,由上游的 ISP 或流量清洗服務在進到你的網路之前過濾 |
| 中間人(man-in-the-middle) | 攻擊者設法夾在兩端之間(例如假的 Wi-Fi、ARP 偽冒),轉送並偷看或竄改流量 | TLS 與憑證驗證(第 19 課):用戶端檢查憑證是不是可信任的機構發給這個網域;不要忽略瀏覽器的憑證警告;網站全面使用 HTTPS |
| 連接埠掃描(port scan) | 對一台主機的許多連接埠送出連線請求,看哪些有回應,找出有在執行的服務 | 關閉不需要的服務;防火牆預設拒絕,只開需要的連接埠;監控並告警異常的大量連線嘗試 |
這四列有一個共同點:防禦大多不是「抓到攻擊者」,而是縮小可以被攻擊的範圍(關掉不用的服務、預設拒絕、分區)並且加密(就算流量被轉走也沒有用)。
掃描、偽冒、大量送封包這些行為,未經系統擁有者書面授權就去做,即使只是「測試看看」,在臺灣可能觸犯刑法妨害電腦使用罪章。 學習防禦請在自己的模擬環境或課程提供的實驗環境裡進行。
VPN:在不可信任的網路上建一條加密通道
VPN(Virtual Private Network,虛擬私人網路)把你的封包加密後包在另一個封包裡,經過網際網路送到 VPN 閘道, 閘道解開後再送進內部網路。對內部網路來說,你就像是接在裡面的一台電腦。
| 類型 | 連接什麼 | 例子 |
|---|---|---|
| 遠端存取(remote access) | 一台電腦 ↔ 組織的 VPN 閘道 | 在家連學校的 VPN,使用只開放校內存取的資料庫或授權軟體 |
| 站對站(site-to-site) | 兩個網路的閘道之間 | 兩個校區的網路透過網際網路互連,像同一個內部網路 |
常見的協定有 IPsec(架構定義在 RFC 4301)與以 TLS 為基礎的 VPN;選哪一種依組織提供的服務而定。
什麼時候用:要從外面存取只在內部開放的服務;在不信任的網路(例如公共 Wi-Fi)上,不想讓同一個網路的人看到你連去哪裡。
VPN 不能解決的事:
- 它只保護「你到 VPN 閘道」這一段;閘道之後到目的網站的流量,安全與否要看那一段有沒有 HTTPS。
- 它不會讓惡意的網站變安全,也不能取代防毒與更新。
- VPN 帳號本身就是一扇通往內部網路的門:要搭配強密碼與多因素驗證,閘道上也要用防火牆限制 VPN 使用者能連到哪些服務(同樣是最小權限)。
小測驗:攻擊的原理與防禦
同一個網段裡有人送出偽造的 ARP 回覆,宣稱自己是閘道。下面哪一個防禦,即使 ARP 偽冒成功也還能保護資料內容?
系網站遭受 DDoS,流量遠超過學校對外線路的頻寬。在學校的防火牆上加規則有用嗎?
下列關於 VPN 的敘述,哪一個正確?
重點整理
- 最小權限、預設拒絕:只放行完成工作需要的連線,其他一律拒絕。
- ACL:由上往下比對,第一條符合就決定,最後隱含全部拒絕;越精確的規則放越前面。ACL 無狀態,回程封包要另外處理,常常因此寫得太寬。
- 有狀態防火牆:用連線表記住已允許的連線,回應自動放行;規則只寫「誰可以發起什麼連線」。網路分區(內部、伺服器區、外部)再寫區域之間的規則。
- 攻擊與防禦:ARP 偽冒→動態 ARP 檢查與加密連線;DoS/DDoS→限流、上游清洗;中間人→TLS 與憑證驗證;連接埠掃描→關閉不需要的服務、預設拒絕。
- VPN 在不可信任的網路上建加密通道,讓遠端像在內部;它不取代 HTTPS、防火牆與多因素驗證。
- 只在自己的或已授權的環境裡練習。
最後一課是綜合專題:把整個網路工程軌學過的子網路、VLAN、路由、DHCP、NAT 與 ACL 組合起來,規劃一棟系館的網路。