墻,始于防,忠于守。自古至今,墻予人以安全之意。防火墻,顧名思義,阻擋的是火,這一名詞起源于建筑領域,其作用是隔離火災,阻止火勢從一個區域蔓延到另一個區域。
而在通信領域,防火墻通常用于兩個網絡之間的隔離,隔離網絡中的各種攻擊,而又保證正常的通信報文。
通信領域的防火墻主要用于保護一個網絡免受來自另一個網絡的攻擊和入侵行為,通常靈活應用于網絡邊界、子網隔離等位置。
防火墻與路由器、交換機的區別:
路由器與交換機的本質是轉發,防火墻的本質是控制。
與人類的進化史相似,防火墻的發展歷史也經歷了從低級到高級、從功能簡單到功能復雜的過程。
防火墻的發展過程大致可以劃分為3個時期:
①1989年至1994年
②1995年至2004年
③2005年至今
華為防火墻全家福
防火墻上有一個重要的概念:安全區域(Security Zone),簡稱為 區域(Zone)。安全區域是一個或多個接口的集合,防火墻通過安全區域來劃分網絡、標識報文流動的“路線”。一般來說,當報文在不同的安全區域之間流動時才會受到 控制,報文在同一個安全區域內流動時不受控制。但華為防火墻也支持在同一個安全區域內流動的報文控制,這里所說的控制是通過“規則”也叫作“安全策略”來實現的。
防火墻通過接口來連接網絡,將接口劃分到安全區域后,通過接口就能把安全區域和網絡關聯起來。通常來說某個安全區域,也可以表示該安全區域中接口所連接的網絡。
一個接口只能加入到一個安全區域中。
通過把接口劃分到不同的安全區域中,就可以在防火墻上劃分出不同的網絡。
如下圖,接口1和2劃分到安全區域A,接口3劃分到安全區域B,接口4劃分到安全區域C,這樣防火墻就存在三個安全區域,對應三個網絡。
華為防火墻上默認有Trust、DMZ和Untrust有三個安全區域。
Trust區域:該區域內網絡的受信任程度高,通常用來定義內部用戶所在的網絡。
DMZ區域:該區域內網絡的受信任程度中等,通常用來定義內部服務器所在的網絡,一個受信任程度處于內部網絡和外部網絡之間的安全區域。
Untrust區域:該區域代表的是不受信任的網絡,通常用來定義Internet等不安全的網絡。
防火墻上提供Local區域,代表防火墻本身。由防火墻主動發出的報文均可認為是從Local區域中發出,凡是需要防火墻響應并處理(不是轉發)的報文均可認為是由Local區域接收。
注意:Local區域中不能添加任何接口,但防火墻上所有接口本身都隱含屬于Local區域。
在華為防火墻上,每個安全區域都必須有一個安全級別,該安全級別是唯一的,用1~100的數字表示,數字越大,則代表該區域內的網絡越可信。
默認安全區域的級別:
報文從低級別的安全區域向高級別的安全區域流動時為入方向(Inbound),報文從由高級別的安全區域向低級別的安全區域流動時為出方向(Outbound)。
下圖標明了Local區域、Trust區域、DMZ區域和Untrust區域間的方向。
安全區域的配置主要包括創建安全區域以及將接口加入安全區域,下面給出了創建一個新的安全區域test,然后將接口GE0/0/1加入該安全區域的過程。接口GE0/0/1可以工作在三層模式也可以工作在二層模式。
[FW] firewall zone name test //創建安全區域test
[FW-zone-test] set priority 10 //將安全級別設置為10
[FW-zone-test] add interface GigabitEthernet 0/0/1 //將接口GE0/0/1加入安全區域
注意:新創建的安全區域是沒有安全級別的,需為其設置安全級別后,接口才能加入該安全區域。安全級別具有唯一性,設置的安全級別不能和已經存在的安全區域的級別相同。
除了物理接口,防火墻還支持邏輯接口,如子接口、VLANIF接口等,這些邏輯接口在使用時也需要加入安全區域。
我們來看一個防火墻的“單臂”環境組網,如下圖,PC A和PC B屬于不同的子網,交換機上通過兩個VLAN將PC A和PC B所屬的子網隔離,交換機連接到防火墻的接口GE0/0/1上,需求是將PC A和PC B劃分到不同的安全區域;
防火墻上一個接口只能加入到一個安全區域中,所以不能簡單的把接口GE0/0/1加入到某個安全區域,這里可以通過子接口或VLANIF接口來實現PC A和PC B劃分到不同的安全區域。
方法①:通過子接口實現需求
在接口GE0/0/1下創建兩個子接口GE0/0/1.10和GE0/0/1.20,分別對應VLAN 10和VLAN 20,然后將這兩個子接口劃分到不同的安全區域,接口GE0/0/1不用加入安全區域,如下圖:
具體配置:
[FW] interface GigabitEthernet 0/0/1.10 //定義子接口GE0/0/1.10
[FW-GigabitEthernet0/0/1.10] vlan-type dot1q 10 //指定以太網子接口屬于VLAN10,此命令應用在以太網子接口上。只有配置了該命令之后,以太網子接口才會根據配置的VLAN ID 號在以太網幀頭中嵌入VLAN 標簽,與該網口相連的交換機接口才能正確處理接收到的幀。
[FW-GigabitEthemet0/0/1.10] ip address 192.168.10.1 24 //配置子接口地址及掩碼
[FW-GigabitEthernet0/0/1.10] quit
[FW] interface GigabitEthernet 0/0/1.20
[FW-GigabitEthernet0/0/1.20] vlan-type dot1q 20
[FW-GigabitEthernet0/0/1.20] ip address 192.168.20.1 24
[FW-GigabitEthernet0/0/1.20] quit
[FW] firewall zone name trust1 //創建安全區域trust1
[FW-zone-trust1] set priority 10 //將安全級別設置為10
[FW-zone-trust1] add interface GigabitEthernet 0/0/1.10 //將GE0/0/1.10子接口加入trust1安全區域
[FW-zone-trustl] quit
[FW] firewall zone name trust2
[FW-zone-trust2] set priority 20
[FW-zone-trust2] add interface GigabitEthernet 0/0/1.20
[FW-zone-trust2] quit
方法②:通過VLANIF接口實現需求
在防火墻上創建兩個VLAN并為各自的VLANIF接口配置IP地址,然后配置接口GE0/0/1工作在二層模式(透明模式),允許VLAN 10和VLAN 20的報文通過,將VLANIF10和VLANIF20劃分到不同的安全區域,接口GE0/0/1不用加入安全區域,如下圖:
具體配置:
[FW] vlan 10
[FW-vlan-10] quit
[FW] interface Vlanif 10
[FW-Vlanifl0] quit
[FW] vlan 20
[FW-vlan-20] quit
[FW] interface Vlanif 20
[FW-Vlanif20] quit
[FW] interface GigabitEthernet 0/0/1
[FW-GigabitEthernet0/0/1] portswitch \\將接口模式切換到二層模式
[FW-GigabitEthemet0/0/1] port link-type trunk \\配置端口的鏈路類型為Trunk類型
[FW-GigabitEthernet0/0/1] port trunk permit vlan 10 20 \\允許VLAN 10和20通過
[FW-GigabitEthemet0/0/1] quit
[FW] firewall zone name trust1
[FW-zone-trustl] set priority 10
[FW-zonc-trustl] add interface Vlanif 10
[FW-zone-trustl] quit
[FW] firewall zone name trust2
[FW-zone-trust2] set priority 20
[FW-zone-trust2] add interface Vlanif 20
[FW-zone-trust2] qult
先來看一個簡單的網絡環境,如下圖所示,PC和Web服務器位于不同的網絡,分別與防火墻相連,PC與Web服務器之間的通信受防火墻的控制;
當PC需要訪問Web服務器時,在防火墻上必須配置如下的一條規則,允許PC訪問Web服務器的報文通過;
在這條規則中,源端口處的*表示任意的端口,這是因為PC在訪問Web服務器時,它的操作系統決定了所使用的源端口,例如,對于Windows操作系統來說,這個值可能是1024~65535范圍內任意的一個端口。這個值是不確定的,所以這里設定為任意端口;
配置了這條規則后,PC發出的報文就可以順利通過防火墻,到達Web服務器。然后Web服務器將會向PC發送回應報文,這個報文也要穿過防火墻才能到達PC。在狀態檢測防火墻出現之前,包過濾防火墻還必須配置如下所示的規則2,允許反方向的報文通過;
在規則2中,目的端口也設定為任意端口,因為我們無法確定PC訪問Web服務器時使用的源端口,要想使Web服務器回應的報文都能順利穿過防火墻到達PC,只能將規則2中的目的端口設定為任意端口。
規則2將去往PC的目的端口全部開放,外部的惡意攻擊者偽裝成Web服務器,就可以暢通無阻地穿過防火墻,PC將會面臨嚴重的安全風險;
狀態檢測防火墻就可以避免上述風險,首先還是需要在防火墻上設定規則1,允許PC訪問Web服務器的報文通過;當報文到達防火墻后,防火墻允許報文通過,同時還會針對PC訪問Web服務器的這個行為建立會話(Session),會話中包含了PC發出的報文信息,如地址和端口等。
當Web服務器回應給PC的報文到達防火墻后,防火墻會把報文中的信息與會話中的信息進行比對,發現報文中的信息與會話中的信息相匹配,并且符合協議規范對后續包的定義,則認為這個報文屬于PC訪問Web服務器行為的后續回應報文,直接允許這個報文通過,如下圖所示;
而惡意攻擊者即使偽裝成Web服務器向PC發起訪問,由于這類報文不屬于PC訪問Web服務器行為的后續回應報文,防火墻就不會允許這些報文通過,這樣就解決了包過濾防火墻大范圍開放端口帶來的安全風險,同時也保證了PC可以正常訪問Web服務器。
在狀態檢測防火墻出現之前,包過濾防火墻只根據設定好的靜態規則來 判斷是否允許報文通過,它認為報文都是無狀態的孤立個體,不關注報文產生的前因后果。這就要求包過濾防火墻必須針對每一個方向上的報文都配置一條規則,轉發效率低下而且容易帶來安全風險。
狀態檢測防火墻的出現正好彌補了包過濾防火墻的這個缺陷。狀態檢測防火墻使用基于連接狀態的檢測機制,將通信雙方之間交互的屬于同一連接的所有報文都作為整體的數據流來對待。在狀態檢測防火墻看來,同一個數據流內的報文不再是孤立的個體, 而是存在聯系的。例如,為數據流的第一個報文建立會話,數據流內的后續報文就會直接匹配會話轉發,不需要再進行規則的檢查,提高了轉發效率。
會話是通信雙方建立的連接在防火墻上的具體體現,代表兩者的連接狀態,一條會話就表示通信雙方的一個連接。防火墻上多條會話的集合就叫作會話表(Session table),先看一個標準的會話表項;
http VPN:public --> public 192.168.0.1:2049-->172.16.0.1:80
這個表項中的關鍵字段:
會話表項中的“-->”符號前面的是源,符號后面的是目的。
源地址、源端口、目的地址、目的端口和協議這5個元素是會話的重要信息,稱之為“五元組”。只要這5個元素相同的報文即可認為屬于同一條流,在防火墻上通過這5個元素就可以唯一確定一條連接。
display firewall session table 命令查看會話表的信息;
display firewall session table verbose 命令可以查看會話的更多信息;
上圖中各信息說明:
會話是動態生成的,但不是永遠存在的;如果長時間沒有報文匹配,則說明通信雙方已經斷開了連接,不再需要該條會話了,此時,為了節約系統資源,防火墻會在一段時間后刪除會話,該時間稱為會話的老化時間,即TTL。
通過firewall session aging-time 命令可以調整會話老化時間TTL的值;例如將ICMP的會話老化時間調整為30s:
[FW] firewall session aging-time icmp 30
華為防火墻還提供了“長連接”功能,通過ACL規則來識別報文,只有匹配ACL規則的特定報文的會話老化時間才會被延長。與單純的通過調整協議的會話老化時間相比,長連接功能的控制粒度更加精確。默認情況下,應用了長連接功能的報文的會話老化時間是168h,當然這個時間也可以手動調整。
注意:目前僅支持對TCP協議類型的報文配置長連接功能。
針對192.168.0.1訪問IP地址為172.16.0.2的SQL數據庫報文配置長連接的示例:
[FW] acl 3000
[FW-acl-adv-3000] rule permit tcp source 192.168.0.1 0 destination 172.16.0.2 0 destination-port eq sqlnet
[FW-acl-adv-3000] quit
[FW] firewall interzone trust untrust
[FW-interzone-trust-untrust] long-link 3000 outbound
WARNING: Too large range of ACL maybe affect the performance of firewall, please use this command carefully!
Are you sure?[Y/N]y
會話中“<--”和“-->”這兩個方向上的報文統計信息非常重要,可以幫助我們定位網絡故障。通常情況下,如果我們查看會話時發現只有“-->”方向有報文的統計信息,“<--”方向上的統計信息都是0,就說明PC發往服務器的報文順利通過了防火墻,而服務器回應給PC的報文沒有通過防火墻,雙方的通信是不正常的。有可能是防火墻丟棄了服務器回應給PC的報文,或者是防火墻與服務器之間的網絡出現故障,或者是服務器本身出現故障。這樣我們就縮小了故障的范圍,有利于快速定位故障,當然也有例外,在特殊的網絡環境中,如果其中一個方向的報文統計信息是0,雙方的通信也有可能是正常的,比如報文來回路徑不一致的網絡環境。
防火墻分析各個協議的交互模式,通過狀態檢測功能將屬于同一個連接的報文都視為一個整體數據流,用會話來表示這條連接。
以TCP協議為例,建立一個TCP連接,通信雙方需要三次握手,如下圖所示:
TCP連接的主要標志就是SYN報文,我們也把SYN報文稱為TCP連接的首包。對于TCP協議,防火墻只有收到SYN報文并且配置的規則允許SYN報文通過才會建立會話,后續的TCP報文匹配會話直接轉發。如果防火墻沒有收到SYN報文,只收到了SYN+ACK或ACK等后續報文,是不會創建會話的,并且會將這些報文丟棄。
在正常情況下這樣處理是沒有問題的,但是在某些特殊的網絡環境中就會出現問題,如下圖的報文來回路徑不一致網絡環境;
上圖中,內部網絡訪問外部網絡的請求報文直接通過路由器到達外部網絡,而外部網絡的回應報文,先經過路由器轉發到防火墻,由防火墻處理后再轉發到路由器,最后由路由器發送到內部網絡。也就是說,防火墻無法收到SYN報文,只收到了SYN+ACK報文。這種通信雙方交互的報文不同時經過防火墻的情況,就叫作報文來回路經不一致。
在這種網絡環境中,防火墻收到SYN+ACK報文后,由于沒有相應的會話,就會丟棄SYN+ACK報文,導致內部網絡和外部網絡之間的通信中斷。
在這種情況下,可以關閉狀態檢測功能,防火墻就不會對連接的狀態進行分析了,相當于回到了包過濾防火墻的時代,后續報文只要安全策略允許其通過,就可以轉發并建立會話了,這樣就不會導致通信中斷。
注意:關閉狀態檢測功能將徹底改變防火墻的工作模式,在實際網絡環境中除非有特殊需求,否則不建議關閉狀態檢測功能。
使用 undo firewall session link-state check 命令關閉狀態檢測功能,在防火墻上可以查看到會話信息如下:
在會話信息中,“<--”方向的統計信息是0,只有“-->”方向存在統計信息,說明只有服務器回應的SYN+ACK報文經過了防火墻。由此我們得出結論,關閉狀態檢測功能后,防火墻收到SYN+ACK報文后也會建立會話,PC和Web服務器之間的通信不會中斷。
UDP協議不同于TCP協議,它是沒有連接狀態的協議。對于UDP協議,防火墻收到UDP報文后,無論狀態檢測功能是處于開啟還是關閉狀態,只要防火墻上配置的規則允許UDP報文通過,防火墻就會建立會話。
防火墻對TCP、UDP和ICMP協議的報文創建會話的情況如下表所示,前提是防火墻上配置的規則允許這些報文通過,然后才能進行表中的處理。
在防火墻上創建一個新的安全區域后,必須為該安全區域配置安全級別,否則無法 將接口加入到安全區域中,如下所示:
set priority 10為安全區域配置安全級別為10,安全級別全局唯一,不能和已經存在的安全區域的級別相同。
在使用安全區域的時候,最容易出現的問題就是忘記把接口加入安全區域。由于接口沒有加入安全區域,防火墻在轉發報文的時候無法判斷報文的路線,無法確定域間關系,最終導致防火墻將報文丟棄,業務不通。
可以使用display zone命令來查看防火墻上安全區域的配置情況以及接口加入安全區域的情況,檢查我們用到的接口是否加入安全區域。
業務不通時,我們還可以從丟包這個角度來排除故障。使用display firewall statistic system discard 命令查看防火墻的丟包統計信息,如果發現如下信息,說明防火墻因為無法確認域間關系而丟包。
造成上述丟包的原因就是接口沒有加入安全區域。此時就可以進一步檢查接口是否 加入安全區域了,可見通過查看防火墻丟包信息能比較快速地定位問題所在。
狀態檢測防火墻核心的技術就是分析通信雙方的連接狀態,然后建立會話輔助后續 報文轉發。所以當業務不通時,在防火墻上檢查會話是否成功建立,也是一個定位故障的重要切入點。
配置完成后,如果業務不通,我們可以在防火墻上使用display firewall session table命令查看是否存在該業務的會話,然后分情況進一步排查。
(1)防火墻上不存在該業務的會話
可能的原因包括:
①業務報文沒有到達防火墻;
②業務報文被防火墻丟棄;
對于原因①,需要確認業務報文在到達防火墻之前是否經過了其他的網絡設備,是否被這些網絡設備丟棄。如果確認其他網 絡設備沒有問題,此時就要把排查的關注點聚焦在報文被防火墻丟棄這個環節。
使用display firewall statistic system discard 命令查看防火墻的丟包統計信息,除了因為無法確認域間關系而導致的丟包之外,如果發現如下信息,說明防火墻因為無法找到ARP表項而丟包。
造成無法找到ARP表項而丟包的原因可能是防火墻無法從上下行設備獲得ARP表項,此時需要檢查防火墻上下行連接的設備的ARP功能是否工作正常。
如果發現如下信息,說明防火墻因為無法找到路由而丟包。
造成無法找到路由而丟包的原因是防火墻上的路由配置出現問題,此時應該檢查防火墻上是否存在去往目的地址的路由。
如果發現如下信息,說明防火墻因為無法找到會話而丟包。
造成無法找到會話而丟包的原因可能是防火墻只收到了后續報文,沒有收到首包報文,此時請檢查網絡環境中是否存在報文來回路徑不一致的情況。如果需要的話,可以在防火墻上執行 undo firewall session link-state check 命令關閉狀態檢測功能,然后再驗證業務是否正常。
如果發現如下信息,說明防火墻因為創建會話失敗而丟包。
造成創建會話失敗而丟包的原因可能是防火墻上的會話數量已經達到規格限制,無法再創建新的會話。此時應該檢查防火墻上是否存在大量的其他業務的會話,并且長時間沒有老化,占用了系統資源。例如,防火墻上存在大量DNS會話,但是會話中的報文個數統計量很少,幾乎沒有后續報文,此時就可以使用firewall session aging-time dns 3命令將DNS的會話老化時間縮短為3s,使其加速老化。
(2)防火墻上存在該業務的會話
如果防火墻上已經為該業務建立了會話,我們還要使用verbose參數進一步觀察會話的信息。如果發現如下信息,說明會話的正向方向上有統計信息(有報文經過),而反向方向上沒有統計信息(沒有報文經過)。
造成會話反向方向上沒有統計信息的原因可能是回應報文沒有到達防火墻或者回 應報文被防火墻丟棄,此時應首先檢查報文在到達防火墻之前是否被其他網絡設備丟棄,然后在防火墻上查看丟包統計信息,根據顯示結果進行相應的處理。
Check Point在周一發布的安全更新報告中警告稱,黑客組織正瞄準 Check Point 遠程訪問 VPN 設備,試圖入侵企業網絡。
遠程訪問已集成到所有 Check Point 網絡防火墻中。它可配置為客戶端到站點 VPN,以便通過 VPN 客戶端訪問公司網絡,或設置為 SSL VPN 門戶,以便進行基于 Web 的訪問。
Check Point 表示,攻擊者利用不安全的純密碼身份驗證攻擊具有舊本地帳戶的安全網關,而這種身份驗證應與證書身份驗證一起使用以防止黑客入侵。
CheckPoint在安全更新報告(https://blog.checkpoint.com/security/enhance-your-vpn-security-posture)中寫道:“我們最近目睹了包括各種網絡安全供應商在內的 VPN 解決方案遭到入侵。鑒于這些事件,我們一直在監控未經授權訪問 Check Point 客戶的 VPN 的嘗試。截至 2024 年 5 月 24 日,我們發現了少量使用舊 VPN 本地帳戶的登錄嘗試,這些嘗試依賴于不推薦的僅密碼身份驗證方法。”
Check Point 發言人稱:“我們已經看到了 3 次這樣的嘗試,后來當我們與組建的特別小組進一步分析時,我們發現了我們認為可能相同的模式(大約相同的數字)。所以 - 總的來說,全球范圍內有幾次嘗試,但足以了解一種趨勢,尤其是 - 這是一種非常直接的確保它不會成功的方法。”
為了防御這些正在進行的攻擊,Check Point 警告客戶檢查 Quantum Security Gateway 和 CloudGuard Network Security 產品以及移動訪問和遠程訪問 VPN 軟件上是否存在此類易受攻擊的帳戶。
建議客戶將用戶身份驗證方法更改為更安全的選項(使用此支持文檔中的說明)或從安全管理服務器數據庫中刪除易受攻擊的本地帳戶。
該公司還發布了安全網關修補程序,該修補程序將阻止所有本地帳戶使用密碼進行身份驗證。安裝后,僅使用弱密碼身份驗證的本地帳戶將被阻止登錄遠程訪問 VPN。
安裝修補程序后易受攻擊的本地帳戶被阻止(Check Point)
Check Point 是第二家警告其 VPN 設備在近幾個月內遭受持續攻擊的公司。
今年 4 月,思科警告稱,針對思科、Check Point、SonicWall、Fortinet 和 Ubiquiti 設備上的 VPN 和 SSH 服務的憑證暴力破解攻擊正在廣泛流行。
該活動于 2024 年 3 月 18 日左右開始,攻擊源自 TOR 出口節點,并使用各種其他匿名工具和代理來逃避阻止。
一個月前,思科警告稱,針對運行遠程訪問 VPN(RAVPN)服務的思科安全防火墻設備可能會出現一波密碼噴灑攻擊,這可能是第一階段偵察活動的一部分。
安全研究員亞倫·馬丁 (Aaron Martin)將此活動與一個未記錄的惡意軟件僵尸網絡聯系起來,他將其稱為“Brutus”,該網絡控制著云服務和住宅網絡中至少 20,000 個 IP 地址。
上個月,該公司還透露,自 2023 年 11 月以來,黑客組織 UAT4356(又名 STORM-1849)一直在利用思科自適應安全設備 (ASA) 和 Firepower 威脅防御 (FTD) 防火墻中的零日漏洞入侵全球政府網絡,該活動被追蹤為 ArcaneDoor(https://www.bleepingcomputer.com/news/security/arcanedoor-hackers-exploit-cisco-zero-days-to-breach-govt-networks/)。
新聞參考鏈接:https://www.bleepingcomputer.com/news/security/hackers-target-check-point-vpns-to-breach-enterprise-networks/