本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本檔案介紹瞭解透明防火牆(TFW)模式下Firepower威脅防禦(FTD)部署的核心概念和要素的詳細說明。針對透明防火牆體系結構最常見的問題,本文還提供有用的工具和一些解決方法。
作者:Cesar Lopez,編輯者:Yeraldin Sánchez,思科TAC工程師。
思科建議您瞭解以下主題:
強烈建議閱讀「Firepower配置指南透明或路由防火牆模式」一節,以更好地瞭解本文檔中介紹的概念。
本文中的資訊係根據以下軟體和硬體版本:
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
雖然路由模式下的防火牆依賴路由表和ARP表來確定出口介面以及將資料包轉發到下一跳所需的資料,但是TFW模式使用MAC地址表來確定用於將資料包傳送到其目標的出口介面。防火牆會檢視正在處理的封包的目標MAC位址欄位,並搜尋將此位址與介面連結的專案。
MAC地址表包含以下欄位。
> show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Outside 0050.56a5.6d52 dynamic 1 1
Inside 0000.0c9f.f014 dynamic 3 1
封包轉送決定與交換器類似,但若是MAC表中遺失專案,則差別非常重大。在交換機中,資料包通過除入口介面之外的所有介面進行廣播,但在TFW中,如果收到資料包,且沒有目標MAC地址條目,則資料包將被丟棄。使用加速安全路徑(ASP)丟棄代碼dst-l2_lookup-fail將其丟棄。
FTD63# show cap icmpin trace pack 1
7 packets captured
1: 00:20:22.338391 802.1Q vlan#20 P0 10.10.10.5 > 20.20.20.5 icmp: echo request
Result:
input-interface: Inside
input-status: up
input-line-status: up
Action: drop
Drop-reason: (dst-l2_lookup-fail) Dst MAC L2 Lookup Failed
如果在封包中之前未將MAC位址視為來源MAC位址,則會在啟用動態學習且沒有目的地靜態專案的環境中,對第一個封包總是發生這種情況。
一旦將條目新增到MAC地址表中,就允許將下一個資料包調整為已啟用防火牆功能。
FTD63# show cap icmpin trace pack 2
7 packets captured
2: 00:20:27.329206 802.1Q vlan#20 P0 10.10.10.5 > 20.20.20.5 icmp: echo request
Phase: 1
Type: L2-EGRESS-IFC-LOOKUP
Subtype: Destination MAC L2 Lookup
Result: ALLOW
Config:
Additional Information:
Destination MAC lookup resulted in egress ifc Outside
注意:MAC查詢是防火牆採取的操作的第一階段。由於L2查詢失敗導致持續丟棄可能導致相關資料包丟失和/或不完全檢測引擎檢查。這種影響依賴於協定或應用功能重新傳輸。
基於上述所述,在任何傳輸之前總是優選地獲知條目。TFW有多個機制來學習條目。
可以手動新增MAC地址,使防火牆始終對該特定條目使用相同的介面。對於不易受更改的條目,這是一個有效的選項。當靜態MAC在配置級別被覆蓋或被下一跳的功能覆蓋時,這是一個常見選項。
例如,在以下情況中,Cisco路由器上的預設網關MAC地址始終與手動新增到配置中的相同,或者HSRP虛擬MAC地址將保持不變。
若要在FMC管理的FTD中設定靜態專案,可以按一下「Edit Interface / Subinterface > Advanced > ARP and MAC」,然後按一下「Add MAC Config」。這將新增從Devices > Device Management > Interfaces部分編輯的特定介面的條目。
此方法類似於交換機填寫MAC地址表的操作。如果資料包的源MAC地址不屬於所接收介面的MAC表條目,則會向表中新增新條目。
如果封包到達時所用的目的地MAC位址不是MAC表的一部分,且目的地IP與橋接器虛擬介面(BVI)屬於同一網路,則TFW會嘗試得知其透過所有橋接器群組介面傳送ARP要求。如果收到來自任何網橋組介面的ARP應答,則會將其新增到MAC表中。請注意,如上文所述,雖然沒有回覆該ARP請求,但所有資料包都會被ASP代碼dst-l2_lookup-fail丟棄。
如果封包到達時所用的目的地MAC位址不是MAC表的一部分,且目的地IP不是BVI的同一網路的一部分,則會傳送一個ICMP回應要求,其生存時間(TTL)值等於1。防火牆期望ICMP超出時間訊息來瞭解下一個躍點的MAC位址。
對於每個獲知的條目,MAC地址表老化計時器設定為5分鐘。此超時值有兩個不同的階段。
在前3分鐘內,MAC條目Age值不會刷新,除非ARP應答資料包通過防火牆,且源MAC地址等於MAC地址表中的條目。此條件不包括發往網橋組IP地址的ARP應答。這表示在前3分鐘內,任何不是機箱內ARP回覆的其他資料包都會被忽略。
在本示例中,IP地址為10.10.10.5的PC正在向10.20.20.5傳送ping。10.20.20.5的網關IP地址為10.20.20.3,MAC地址為000.0c9f.f014。
目的PC每25秒建立一次ARP更新,導致持續的ARP資料包通過防火牆。
FTD63# show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Inside 00fc.baf3.d680 dynamic 3 1
Outside 0050.56a5.6d52 dynamic 5 1
Inside 0000.0c9f.f014 dynamic 5 1
Outside 40a6.e833.2a05 dynamic 4 1
資料包捕獲過濾ARP資料包用於匹配這些資料包。
> show capture
capture arp type raw-data ethernet-type arp interface Inside [Capturing - 1120 bytes]
> show capture arp
12 packets captured
1: 23:04:52.142524 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
2: 23:04:52.142952 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
3: 23:04:52.145057 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
4: 23:04:52.145347 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
5: 23:05:16.644574 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
6: 23:05:16.644940 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
7: 23:05:16.646756 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
8: 23:05:16.647015 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
9: 23:05:41.146614 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
10: 23:05:41.146980 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
11: 23:05:41.148734 802.1Q vlan#20 P0 arp who-has 10.20.20.3 (0:0:c:9f:f0:14) tell 10.20.20.5
12: 23:05:41.149009 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
000.0c9f.4014的條目始終為5,並且不會低於該數字。
> show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Inside 00fc.baf3.d680 dynamic 3 1
Outside 0050.56a5.6d52 dynamic 5 1
Inside 0000.0c9f.f014 dynamic 5 1
Outside 40a6.e833.2a05 dynamic 4 1
在最後2分鐘內,該條目進入被視為地址已過時的時間段。
> show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Inside 00fc.baf3.d680 dynamic 5 1
Outside 0050.56a5.6d52 dynamic 3 1
Inside 0000.0c9f.f014 dynamic 2 1
Outside 40a6.e833.2a05 dynamic 3 1
該條目尚未刪除,如果檢測到任何源MAC地址與表條目(包括出廠設定資料包)匹配的資料包,則老化條目將刷新回5分鐘。
在本例中,此2分鐘內會傳送ping,強制防火牆傳送自己的ARP封包。
> ping 10.20.20.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.20.20.3, timeout is 2 seconds:
!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
MAC地址條目被重新設定為5分鐘。
> show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Inside 00fc.baf3.d680 dynamic 4 1
Outside 0050.56a5.6d52 dynamic 2 1
Inside 0000.0c9f.f014 dynamic 5 1
Outside 40a6.e833.2a05 dynamic 5 1
首先,必須瞭解MAC地址表完全獨立於ARP表。當防火牆傳送的ARP資料包刷新一個ARP條目時,可以同時刷新MAC地址表,這些刷新過程是單獨的任務,每個過程都有自己的超時和條件。
即使ARP表不是像在路由模式中那樣用於確定出口下一跳,瞭解在透明部署中生成和發往防火牆身份的ARP資料包的影響也很重要。
ARP條目用於管理目的,僅在管理功能或任務需要時才新增到表中。作為管理任務的示例,如果網橋組具有IP地址,則此IP可用於ping目的地。
> show ip
Management-only Interface: Ethernet1/4
System IP Address:
no ip address
Current IP Address:
no ip address
Group : 1
Management System IP Address:
ip address 10.20.20.4 255.255.255.0
Management Current IP Address:
ip address 10.20.20.4 255.255.255.0
如果目的地與網橋組IP位於同一子網中,則會強制執行ARP請求;如果收到有效的ARP應答,則IP/MAC條目將儲存在ARP表中。
> show arp
Inside 10.20.20.3 0000.0c9f.f014 6
與MAC地址表不同,介面/IP地址/MAC地址三元組附帶的計時器是一個遞增值。
> show arp
Inside 10.20.20.3 0000.0c9f.f014 1
> show arp
Inside 10.20.20.3 0000.0c9f.f014 2
> show arp
Inside 10.20.20.3 0000.0c9f.f014 3
> show arp
Inside 10.20.20.3 0000.0c9f.f014 4
當計時器達到n - 30值(其中n是ARP設定的逾時(預設值為14400秒)時,防火牆會傳送一個ARP要求來刷新專案。如果收到有效的ARP應答,則保留條目,計時器返回到0。
在本例中,ARP超時縮短到60秒。
> show running-config arp
arp timeout 60
arp rate-limit 32768
可以在FMC中的Devices > Platform Settings > Timeouts頁籤中配置此超時,如下圖所示。
由於超時為60秒,因此每30秒傳送一個ARP請求(60 - 30 = 30)。
> show capture arp
8 packets captured
1: 21:18:16.779729 802.1Q vlan#20 P0 arp who-has 10.20.20.3 tell 10.20.20.4
2: 21:18:16.780111 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
3: 21:18:46.779744 802.1Q vlan#20 P0 arp who-has 10.20.20.3 tell 10.20.20.4
4: 21:18:46.780126 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
5: 21:19:16.779744 802.1Q vlan#20 P0 arp who-has 10.20.20.3 tell 10.20.20.4
6: 21:19:16.780111 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
7: 21:19:46.779729 802.1Q vlan#20 P0 arp who-has 10.20.20.3 tell 10.20.20.4
8: 21:19:46.780126 802.1Q vlan#20 P0 arp reply 10.20.20.3 is-at 0:0:c:9f:f0:14
然後,ARP專案每30秒刷新一次。
> show arp
Inside 10.20.20.3 0000.0c9f.f014 29
> show arp
Inside 10.20.20.3 0000.0c9f.f014 0
在TFW上跟蹤最困難的事情之一是流量方向。瞭解流量如何流動有助於確保防火牆正確地將封包轉送到目的地。
在路由模式下,確定正確的入口和出口介面是一項更輕鬆的任務,因為存在多個防火牆參與的指標,例如源和目標MAC地址修改和從一個介面到另一個介面的生存時間(TTL)值減少。
這些差異在TFW設定中不可用。大多數情況下,通過輸入介面的封包看起來與離開防火牆時相同。
如果不瞭解資料包進入何處以及何時離開防火牆,跟蹤網路中的MAC擺動或流量環路等特定問題會更加困難。
為了幫助區分輸入和輸出資料包,可以在資料包捕獲中使用trace關鍵字。
capture in interface inside buffer 33554432 trace trace-count 1000 match tcp host 10.10.220.42 host 10.10.241.225
capture out interface outside buffer 33554432 trace trace-count 1000 match tcp host 10.10.220.42 host 10.10.241.225
buffer — 增加捕獲緩衝區(以位元組為單位)。33554432是最大可用值。在5500-X、Firepower裝置或虛擬機器等型號中,只要尚未配置數十個捕獲,即可安全地使用此大小值。
trace — 為指定的捕獲啟用跟蹤選項。
trace-count — 允許更多跟蹤。1000是允許的最大值,128是預設值。這同樣適用於按照與緩衝區大小選項相同的建議操作。
提示:如果您忘記新增其中一個選項,您可以通過引用捕獲名稱和選項來新增該選項,而不必再次寫入整個捕獲。但是,新選項僅影響新捕獲的資料包,因此,必須使用clear capture capname 來產生自資料包編號1以來的新效果。示例:在跟蹤中捕獲
擷取封包後,show capture cap_name trace指令會顯示傳入封包的前1000個追蹤(如果追蹤數量增加)。
FTD63# show capture out trace
1: 16:34:56.940960 802.1Q vlan#7 P0 10.10.241.225 > 10.10.220.38 icmp: time exceeded in-transit Result: input-interface: outside input-status: up input-line-status: up Action: drop Drop-reason: (dst-l2_lookup-fail) Dst MAC L2 Lookup Failed 2: 16:34:57.143959 802.1Q vlan#7 P0 10.10.220.42 > 10.10.241.225 icmp: echo request 3: 16:34:57.146476 802.1Q vlan#7 P0 10.10.241.225 > 10.10.220.42 icmp: echo reply Result: input-interface: outside input-status: up input-line-status: up Action: drop Drop-reason: (dst-l2_lookup-fail) Dst MAC L2 Lookup Failed
以下輸出是外部介面資料包捕獲跟蹤的示例。這表示封包1和3進入外部介面,封包2離開介面。
可以在此追蹤軌跡中找到其他資訊,例如對該封包執行的行動以及封包遭捨棄情況下的捨棄原因。
對於較長的跟蹤,如果要集中處理單個資料包,可以使用show capture cap_name trace packet-number packet_number 命令顯示該特定資料包的跟蹤。
以下是允許資料包編號10的示例。
FTD63# show capture in detail trace packet-number 10
10: 20:55:31.118218 0000.0c9f.f014 0100.5e00.0066 0x8100 Length: 98 802.1Q vlan#20 P0 10.20.20.1.1985 > 224.0.0.102.1985: [udp sum ok] udp 52 [tos 0xc0] [ttl 1] (id 0) Phase: 1 Type: L2-EGRESS-IFC-LOOKUP Subtype: Destination MAC L2 Lookup Result: ALLOW Config: Additional Information: Destination MAC lookup resulted in egress ifc Outside Phase: 2 Type: CAPTURE Subtype: Result: ALLOW Config: Additional Information: MAC Access list Phase: 3 Type: ACCESS-LIST Subtype: Result: ALLOW Config: Implicit Rule Additional Information: MAC Access list Phase: 4 Type: FLOW-LOOKUP Subtype: Result: ALLOW Config: Additional Information: Found flow with id 2562905, using existing flow Phase: 5 Type: SNORT Subtype: Result: ALLOW Config: Additional Information: Snort Verdict: (fast-forward) fast forward this flow Phase: 6 Type: CAPTURE Subtype: Result: ALLOW Config: Additional Information: MAC Access list Result: input-interface: Inside input-status: up input-line-status: up Action: allow
TFW根據MAC地址做出其所有轉發決策。在流量分析過程中,必須根據網路拓撲確保每個資料包上用作源和目標的MAC地址正確。
封包擷取功能可讓您顯示使用show capture 指令的detail 選項所使用的MAC位址。
FTD63# show cap i detail 98 packets captured 1: 20:55:06.938473 0000.0c9f.f014 0100.5e00.0066 0x8100 Length: 98 802.1Q vlan#20 P0 10.20.20.1.1985 > 224.0.0.102.1985: [udp sum ok] udp 52 [tos 0xc0] [ttl 1] (id 0) 2: 20:55:09.805561 0000.0c9f.f014 0100.5e00.0066 0x8100 Length: 98 802.1Q vlan#20 P0 10.20.20.1.1985 > 224.0.0.102.1985: [udp sum ok] udp 52 [tos 0xc0] [ttl 1] (id 0)
找到需要特定追蹤的感興趣MAC位址後,擷取過濾器會允許您將其相符。
FTD63# capture in type raw-data trace interface inside match mac 0000.0c9f.f014 ffff.ffff.ffff any
FTD63# show capture
capture in type raw-data trace interface inside [Capturing - 114 bytes] match mac 0000.0c9f.f014 ffff.ffff.ffff any
FTD63# show cap in detail 98 packets captured 1: 20:55:06.938473 0000.0c9f.f014 0100.5e00.0066 0x8100 Length: 98 802.1Q vlan#20 P0 10.20.20.1.1985 > 224.0.0.102.1985: [udp sum ok] udp 52 [tos 0xc0] [ttl 1] (id 0) 2: 20:55:09.805561 0000.0c9f.f014 0100.5e00.0066 0x8100 Length: 98 802.1Q vlan#20 P0 10.20.20.1.1985 > 224.0.0.102.1985: [udp sum ok] udp 52 [tos 0xc0] [ttl 1] (id 0)
此過濾器在存在MAC翻動的痕跡且您想要找到肇事者時非常有用。
可以啟用MAC地址表調試以檢視每個階段。此調試提供的資訊有助於瞭解何時從表中獲取、刷新和刪除MAC地址。
本節顯示每個階段的示例以及如何閱讀此資訊。若要在FTD上啟用debug指令,您必須存取診斷CLI。
警告:如果網路太忙,調試可能會消耗相關資源。建議在受控環境或低峰值時間使用它們。如果系統日誌伺服器的調試過於詳細,建議將這些調試傳送到系統日誌伺服器。
> system support diagnostic-cli
Attaching to Diagnostic CLI ... Press 'Ctrl+a then d' to detach.
Type help or '?' for a list of available commands.
FTD63# debug mac-address-table
debug mac-address-table enabled at level 1
步驟1.獲取MAC地址。如果在MAC表中找不到條目,則此地址將新增到表中。偵錯訊息會通知接收該訊息的地址和介面。
FTD63# ping 10.20.20.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.20.20.3, timeout is 2 seconds:
add_l2fwd_entry: Going to add MAC 0000.0c9f.f014.
add_l2fwd_entry: Added MAC 0000.0c9f.f014 into bridge table thru Inside.
set_l2: Found MAC entry 0000.0c9f.f014 on Inside.
!add_l2fwd_entry: Going to add MAC 00fc.baf3.d680.
add_l2fwd_entry: Added MAC 00fc.baf3.d680 into bridge table thru Inside.
!!!!
如果透過ICMP方法得知MAC,則顯示下一個訊息。該條目進入超時週期的第一階段,在該階段不會根據MAC地址表老化計時器中列出的條件刷新其計時器。
learn_from_icmp_error: Learning from icmp error.
步驟2.如果專案已知,則偵錯會通知該專案。調試還會顯示與獨立或HA設定無關的集群消息。
set_l2: Found MAC entry 0000.0c9f.f014 on Inside.
l2fwd_refresh: Sending clustering LU to refresh MAC 0000.0c9f.f014.
l2fwd_refresh: Failed to send clustering LU to refresh MAC 0000.0c9f.f014
步驟3.輸入內容到達第二階段後(絕對超時前2分鐘)。
FTD63# show mac-add interface mac address type Age(min) bridge-group ---------------------------------------------------------------------------------------------------- Inside 00fc.baf3.d700 dynamic 3 1 Outside 0050.56a5.6d52 dynamic 4 1 Inside 0000.0c9f.f014 dynamic 2 1 Outside 40a6.e833.2a05 dynamic 3 1 FTD63# l2fwd_clean:MAC 0000.0c9f.f014 entry aged out. l2fwd_timeout:MAC entry timed out
步驟4.防火牆現在要求源自該地址的新封包刷新該表。如果在這2分鐘內沒有其它資料包使用該條目,則該地址將被刪除。
FTD63# show mac-address-table
interface mac address type Age(min) bridge-group
----------------------------------------------------------------------------------------------------
Inside 0000.0c9f.f014 dynamic 1 1
Outside 40a6.e833.2a05 dynamic 3 1
FTD63# l2fwd_clean:Deleting MAC 0000.0c9f.f014 entry due to timeout.
delete_l2_fromPC: Deleting MAC 0000.0c9f.f014 due to freeing up of entry
l2fwd_clean:Deleted MAC 0000.0c9f.f014 from NP.