본 제품에 대한 문서 세트는 편견 없는 언어를 사용하기 위해 노력합니다. 본 설명서 세트의 목적상, 편견 없는 언어는 나이, 장애, 성별, 인종 정체성, 민족 정체성, 성적 지향성, 사회 경제적 지위 및 교차성에 기초한 차별을 의미하지 않는 언어로 정의됩니다. 제품 소프트웨어의 사용자 인터페이스에서 하드코딩된 언어, RFP 설명서에 기초한 언어 또는 참조된 서드파티 제품에서 사용하는 언어로 인해 설명서에 예외가 있을 수 있습니다. 시스코에서 어떤 방식으로 포용적인 언어를 사용하고 있는지 자세히 알아보세요.
Cisco는 전 세계 사용자에게 다양한 언어로 지원 콘텐츠를 제공하기 위해 기계 번역 기술과 수작업 번역을 병행하여 이 문서를 번역했습니다. 아무리 품질이 높은 기계 번역이라도 전문 번역가의 번역 결과물만큼 정확하지는 않습니다. Cisco Systems, Inc.는 이 같은 번역에 대해 어떠한 책임도 지지 않으며 항상 원본 영문 문서(링크 제공됨)를 참조할 것을 권장합니다.
이 문서에서는 IOS® XE WAN 라우터에서 Snort 및 URL(Uniform Resource Locator) 필터링이라고도 하는 UTD(Unified Threat Defense)의 문제를 해결하는 방법에 대해 설명합니다.
Snort는 전 세계에서 가장 널리 구축된 IPS(Intrusion Prevention System)입니다. 2013년 이후 Snort 소프트웨어의 상용 버전을 만든 Sourcefire는 Cisco에 인수되었습니다. 16.10.1 IOS® XE SD-WAN 소프트웨어부터 Cisco SD-WAN 솔루션에 UTD/URF-Filtering 컨테이너가 추가되었습니다.
컨테이너는 app-nav 프레임워크를 사용하여 IOS® XE 라우터에 등록됩니다. 그 과정에 대한 설명은 이 문서의 범위를 벗어난다.
상위 레벨에서 데이터 경로는 다음과 같습니다.
트래픽은 LAN 측에서 옵니다. IOS® XE는 컨테이너가 정상 상태임을 알고 있으므로 트래픽을 UTD 컨테이너로 전환합니다. 전용은 VirtualPortGroup1 인터페이스를 이그레스 인터페이스로 사용하며, 이그레스 인터페이스는 패킷을 GRE(Generic Routing Encapsulation) 터널 내부에 캡슐화합니다.
라우터는 cause :64(Service Engine packet)"를 사용하여 "PUNT" 작업을 수행하고 RP(Route Processor)로 트래픽을 전송합니다. punt 헤더가 추가되고 패킷은 컨테이너 "[internal0/0/svc_eng:0]"에 대한 내부 이그레스 인터페이스를 사용하여 컨테이너로 전송됩니다.
이 단계에서 Snort는 프리프로세서 및 규칙 집합을 활용합니다. 처리 결과에 따라 패킷을 삭제 또는 전달할 수 있습니다.
트래픽이 삭제되지 않도록 가정할 경우, 패킷은 UTD 처리 후 라우터로 다시 전달됩니다. QFP(Quantum Flow Processor)에 Tunnel6000001에서 오는 것으로 나타납니다. 그런 다음 라우터에서 처리되며 WAN 인터페이스로 라우팅되어야 합니다(권장 사항).
컨테이너는 IOS® XE 데이터 경로에 있는 UTD 검사에서 전환 결과를 제어합니다.
예를 들어, HTTPS 흐름에서 프리프로세서는 TLS 협상이 포함된 서버 Hello/Client Hello 패킷을 확인하려고 합니다. TLS 암호화 트래픽을 검사할 때 값이 거의 없으므로 이 플로우는 리디렉션되지 않습니다.
패킷 추적기 관점에서 이러한 작업 집합이 표시됩니다(192.168.16.254는 웹 클라이언트).
debug platform condition ipv4 192.168.16.254/32 both debug platform condition start debug platform packet-trace packet 256 fia-trace data-size 3000
이 특정 시나리오에서 추적된 패킷은 LAN에서 옵니다. 리디렉션의 관점에서 보면 흐름이 LAN 또는 WAN에서 발생하는 경우 관련된 차이점이 있습니다.
클라이언트가 HTTPS에서 www.cisco.com에 액세스하려는 경우
cedge6#show platform packet-trace packet 14 Packet: 14 CBUG ID: 3849209 Summary Input : GigabitEthernet2 Output : internal0/0/svc_eng:0 State : PUNT 64 (Service Engine packet) Timestamp Start : 1196238208743284 ns (05/08/2019 10:50:36.836575 UTC) Stop : 1196238208842625 ns (05/08/2019 10:50:36.836675 UTC) Path Trace Feature: IPV4(Input) Input : GigabitEthernet2 Output : <unknown> Source : 192.168.16.254 Destination : 203.0.113.67 Protocol : 6 (TCP) SrcPort : 35568 DstPort : 443 Feature: DEBUG_COND_INPUT_PKT Entry : Input - 0x8177c67c Input : GigabitEthernet2 Output : <unknown> Lapsed time : 2933 ns <snip>
조건과 일치하는 트래픽은 인터페이스 GigabitEthernet2에서 인그레스(ingress)로 추적됩니다.
Feature: UTD Policy (First FIA) Action : Divert Input interface : GigabitEthernet2 Egress interface: GigabitEthernet3 Feature: OUTPUT_UTD_FIRST_INSPECT Entry : Output - 0x817cc5b8 Input : GigabitEthernet2 Output : GigabitEthernet3 Lapsed time : 136260 ns Feature: UTD Inspection Action : Divert <<<<<<<<<<<<<<<<<<<<<<<<<<<< Input interface : GigabitEthernet2 Egress interface: GigabitEthernet3 Feature: OUTPUT_UTD_FINAL_INSPECT Entry : Output - 0x817cc5e8 Input : GigabitEthernet2 Output : GigabitEthernet3 Lapsed time : 43546 ns
<snip>
이그레스 인터페이스의 이그레스 FIA(Feature Invocation Array)에서 UTD FIA는 이 패킷을 컨테이너로 전환하기로 결정했습니다.
Feature: IPV4_OUTPUT_LOOKUP_PROCESS_EXT Entry : Output - 0x81781bb4 Input : GigabitEthernet2 Output : Tunnel6000001 <removed> Feature: IPV4_OUTPUT_LOOKUP_PROCESS_EXT Entry : Output - 0x81781bb4 Input : GigabitEthernet2 Output : Tunnel6000001 <removed> Feature: IPV4_INPUT_LOOKUP_PROCESS_EXT Entry : Output - 0x8177c698 Input : Tunnel6000001 Output : VirtualPortGroup1 Lapsed time : 880 ns
<snip>
패킷은 기본 터널 터널에 배치되고600001 VPG1 인터페이스를 통해 라우팅됩니다. 이 단계에서 원래 패킷은 GRE 캡슐화됩니다.
Feature: OUTPUT_SERVICE_ENGINE Entry : Output - 0x817c6b10 Input : Tunnel6000001 Output : internal0/0/svc_eng:0 Lapsed time : 15086 ns <removed> Feature: INTERNAL_TRANSMIT_PKT_EXT Entry : Output - 0x8177c718 Input : Tunnel6000001 Output : internal0/0/svc_eng:0 Lapsed time : 43986 ns
패킷은 컨테이너 내부로 전송됩니다.
참고: 컨테이너 내부 정보는 정보 제공만을 목적으로 합니다. UTD 컨테이너는 일반 CLI 인터페이스를 통해 액세스할 수 없습니다.
라우터 자체에서 더 깊이 들어가면 트래픽이 경로 프로세서 인터페이스 eth2의 내부 VRF에 도착합니다.
[cedge6:/]$ chvrf utd ifconfig eth0 Link encap:Ethernet HWaddr 54:0e:00:0b:0c:02 inet6 addr: fe80::560e:ff:fe0b:c02/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1375101 errors:0 dropped:0 overruns:0 frame:0 TX packets:1366614 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:96520127 (92.0 MiB) TX bytes:96510792 (92.0 MiB) eth1 Link encap:Ethernet HWaddr 00:1e:e6:61:6d:ba inet addr:192.168.1.2 Bcast:192.168.1.3 Mask:255.255.255.252 inet6 addr: fe80::21e:e6ff:fe61:6dba/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:2000 Metric:1 RX packets:1069 errors:0 dropped:0 overruns:0 frame:0 TX packets:2001 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:235093 (229.5 KiB) TX bytes:193413 (188.8 KiB) eth2 Link encap:Ethernet HWaddr 00:1e:e6:61:6d:b9 inet addr:192.0.2.2 Bcast:192.0.2.3 Mask:255.255.255.252 inet6 addr: fe80::21e:e6ff:fe61:6db9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:2000 Metric:1 RX packets:2564233 errors:0 dropped:0 overruns:0 frame:0 TX packets:2564203 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:210051658 (200.3 MiB) TX bytes:301467970 (287.5 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Eth0은 IOSd 프로세스에 연결된 TIPC(Transport Inter Process Communication) 인터페이스입니다. OneP 채널은 IOSd와 UTD 컨테이너 간에 컨피그레이션 및 알림을 주고 받기 위해 이 채널을 통해 실행됩니다.
우려되는 사항에서 "eth2 [ container interface]"는 "VPG1 [ 192.0.2.1/192.168.2.2 ]"에 브리지됩니다. vManage가 IOS-XE 및 컨테이너에 푸시하는 주소입니다.
tcpdump를 실행하는 경우 컨테이너로 이동하는 GRE 캡슐화된 트래픽을 볼 수 있습니다. GRE 캡슐화는 VPATH 헤더를 포함합니다.
[cedge6:/]$ chvrf utd tcpdump -nNvvvXi eth2 not udp tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes 06:46:56.350725 IP (tos 0x0, ttl 255, id 35903, offset 0, flags [none], proto GRE (47), length 121) 192.0.2.1 > 192.0.2.2: GREv0, Flags [none], length 101 gre-proto-0x8921 0x0000: 4500 0079 8c3f 0000 ff2f ab12 c000 0201 E..y.?.../...... 0x0010: c000 0202 0000 8921 4089 2102 0000 0000 .......!@.!..... 0x0020: 0000 0000 0300 0001 0000 0000 0000 0000 ................ 0x0030: 0004 0800 e103 0004 0008 0000 0001 0000 ................ 0x0040: 4500 0039 2542 4000 4011 ce40 c0a8 10fe E..9%B@.@..@.... 0x0050: ad26 c864 8781 0035 0025 fe81 cfa8 0100 .&.d...5.%...... 0x0060: 0001 0000 0000 0000 0377 7777 0363 6e6e .........www.cnn 0x0070: 0363 6f6d 0000 0100 01 .com.....
Snort 처리 후(트래픽을 삭제하지 않을 경우) QFP 포워딩 경로로 다시 재삽입됩니다.
cedge6#show platform packet-trace packet 15 Packet: 15 CBUG ID: 3849210 Summary Input : Tunnel6000001 Output : GigabitEthernet3 State : FWD
Tunnel600001은 컨테이너의 이그레스 인터페이스입니다.
Feature: OUTPUT_UTD_FIRST_INSPECT_EXT Entry : Output - 0x817cc5b8 Input : GigabitEthernet2 Output : GigabitEthernet3 Lapsed time : 2680 ns Feature: UTD Inspection Action : Reinject Input interface : GigabitEthernet2 Egress interface: GigabitEthernet3 Feature: OUTPUT_UTD_FINAL_INSPECT_EXT Entry : Output - 0x817cc5e8 Input : GigabitEthernet2 Output : GigabitEthernet3 Lapsed time : 12933 ns
트래픽은 이미 검사되었으므로 라우터는 이를 재주입으로 인식합니다.
Feature: NAT Direction : IN to OUT Action : Translate Source Steps : Match id : 1 Old Address : 192.168.16.254 35568 New Address : 172.16.16.254 05062
트래픽은 NAT를 통해 인터넷으로 이동합니다.
Feature: MARMOT_SPA_D_TRANSMIT_PKT Entry : Output - 0x8177c838 Input : GigabitEthernet2 Output : GigabitEthernet3 Lapsed time : 91733 ns
IOS-XE 17.5.1에 UTD 플로우 로깅 기능이 패킷 추적과 통합되었습니다. 여기서 path-trace 출력에 UTD 판정이 포함됩니다. 판정은 다음 중 하나가 될 수 있습니다. 예를 들면 다음과 같습니다.
UTD 판정 정보가 없는 패킷의 경우 플로우 로깅 정보가 로깅되지 않습니다. 또한 성능에 부정적인 영향을 미칠 수 있으므로 IPS/IDS 통과/허용 판정을 로깅할 필요가 없습니다.
플로우 로깅 통합을 활성화하려면 CLI Add-On 템플릿을 다음과 같이 사용합니다.
utd engine standard multi-tenancy
utd global
flow-logging all
다른 판정에 대한 출력 예:
URL 조회 시간 초과:
show platform packet-trace pack all | sec Packet: | Feature: UTD Inspection
Packet: 31 CBUG ID: 12640
Feature: UTD Inspection
Action : Reinject
Input interface : GigabitEthernet2
Egress interface : GigabitEthernet3
Flow-Logging Information :
URLF Policy ID : 1
URLF Action : Allow(1)
URLF Reason : URL Lookup Timeout(8)
URLF 평판 및 판정 허용:
Packet: 21 CBUG ID: 13859
Feature: UTD Inspection
Action : Reinject
Input interface : GigabitEthernet3
Egress interface : GigabitEthernet2
Flow-Logging Information :
URLF Policy ID : 1
URLF Action : Allow(1)
URLF Reason : No Policy Match(4)
URLF Category : News and Media(63)
URLF Reputation : 81
URLF 평판 및 판정 차단:
Packet: 26 CBUG ID: 15107
Feature: UTD Inspection
Action : Reinject
Input interface : GigabitEthernet3
Egress interface : GigabitEthernet2
Flow-Logging Information :
URLF Policy ID : 1
URLF Action : Block(2)
URLF Reason : Category/Reputation(3)
URLF Category : Social Network(14)
URLF Reputation : 81
cedge7#sh utd eng sta ver
UTD Virtual-service Name: utd
IOS-XE Recommended UTD Version: 1.10.33_SV2.9.16.1_XEmain
IOS-XE Supported UTD Regex: ^1\.10\.([0-9]+)_SV(.*)_XEmain$
UTD Installed Version: 1.0.2_SV2.9.16.1_XE17.5 (UNSUPPORTED)
"UNSUPPORTED(지원되지 않음)"가 표시되면 트러블슈팅을 시작하기 전에 먼저 컨테이너 업그레이드가 필요합니다.
컨테이너에서 유효한 네임서버 컨피그레이션 확인
AMP 및 URLF와 같은 일부 보안 서비스에서는 UTD 컨테이너가 클라우드 서비스 공급자의 이름을 확인할 수 있어야 하므로 UTD 컨테이너에 유효한 네임서버 컨피그레이션이 있어야 합니다. 시스템 셸 아래의 컨테이너에 대한 resolv.conf 파일을 확인하여 이를 확인할 수 있습니다.
cedge:/harddisk/virtual-instance/utd/rootfs/etc]$ more resolv.conf
nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 8.8.8.8
문제 1
설계에 따라 Unified Thread Defense를 DIA(Direct Internet Access Use Case)와 함께 구성해야 합니다. 컨테이너는 URL 평판과 카테고리를 쿼리하기 위해 api.bcti.brightcloud.com을 확인합니다. 이 예에서는 적절한 컨피그레이션이 적용되더라도 검사된 URL이 모두 차단되지 않습니다
문제 해결
항상 컨테이너 로그 파일을 확인합니다.
cedge6#app-hosting move appid utd log to bootflash:
Successfully moved tracelog to bootflash:
iox_utd_R0-0_R0-0.18629_0.20190501005829.bin.gz
플래시 자체에 로그 파일을 복사합니다.
로그 표시는 다음 명령을 사용하여 수행할 수 있습니다.
cedge6# more /compressed iox_utd_R0-0_R0-0.18629_0.20190501005829.bin.gz
로그를 표시하면 다음과 같은 결과가 나타납니다.
2019-04-29 16:12:12 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
2019-04-29 16:17:52 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
2019-04-29 16:23:32 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
2019-04-29 16:29:12 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
2019-04-29 16:34:52 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
2019-04-29 16:40:27 ERROR: Cannot resolve host api.bcti.brightcloud.com: Temporary failure in name resolution
기본적으로 vManage는 OpenDNS 서버를 사용하는 컨테이너를 프로비저닝합니다[208.67.222.222 및 208.67.220.220]
근본 원인
api.bcti.brightcloud.com을 확인하기 위한 DNS(Domain Name System) 트래픽이 컨테이너와 Umbrella DNS 서버 사이의 경로 어딘가에 삭제됩니다. 항상 두 DNS에 모두 연결할 수 있는지 확인합니다.
문제 2
컴퓨터 및 인터넷 정보 범주 웹 사이트를 차단해야 하는 경우 www.cisco.com에 대한 http 요청이 제대로 삭제되지만 HTTPS 요청은 삭제되지 않습니다.
문제 해결
앞에서 설명한 대로 트래픽이 컨테이너로 보내집니다. 이 흐름이 GRE 헤더에 캡슐화되면 소프트웨어는 VPATH 헤더와 함께 추가됩니다. 이 헤더를 활용하여 시스템은 디버그 조건을 컨테이너 자체에 전달할 수 있습니다. 이는 UTD 컨테이너의 서비스 용이성을 의미합니다.
이 시나리오에서 클라이언트 IP 주소는 192.168,16.254입니다. 내 클라이언트에서 오는 트래픽에 대한 컨테이너 자체의 Snort 처리 문제를 해결해 보겠습니다.
debug platform condition ipv4 192.168.16.254/32 both
debug platform condition feature utd controlplane submode serviceplane-web-filtering level verbose
debug platform condition start
이 명령 집합은 IOS-XE에 192.168.16.254에서 또는 로의 트래픽을 표시하도록 지시합니다. 그러면 debug-me 플래그가 VPATH 헤더를 통해 컨테이너에 전달될 수 있습니다
Snort는 특정 흐름만 디버깅하며 다른 흐름은 정상적으로 처리됩니다.
이 단계에서는 사용자에게 클라이언트에서 www.cisco.com으로 향하는 트래픽을 트리거하도록 요청할 수 있습니다.
다음 단계는 로그를 검색하는 것입니다.
app-hosting move appid utd log to bootflash:
HTTP 트래픽의 경우 snort HTTP 프리프로세서는 get 요청에서 URL을 검색합니다.
2019-04-26 13:04:27.773:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 39540, p->dst_port = 80
2019-04-26 13:04:27.793:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 80, p->dst_port = 39540
2019-04-26 13:04:27.794:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 39540, p->dst_port = 80
2019-04-26 13:04:27.794:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 39540, p->dst_port = 80
2019-04-26 13:04:27.794:(#1):SPP-URL-FILTERING got utmdata_p
2019-04-26 13:04:27.794:(#1):SPP-URL-FILTERING HTTP Callback, direction = 00000080
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING White list regex match not enabled
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING Black list regex match not enabled
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING URL database Request: url_len = 12, msg overhead 12 url: www.cisco.com/ <<<<<<<
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING Send to URL database: req_id=0x10480047
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING Sent to URL database 24 bytes
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING Send to URL database done, idx: 71, URL: www.cisco.com/
2019-04-26 13:04:27.795:(#1):SPP-URL-FILTERING Received from URL database 24 bytes
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 80, p->dst_port = 39540
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING Found UTMData at 0x007f8d9ee80878, action = 0000000a
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING Utm_verdictProcess: vrf_id 1, category 0x63, score 81 <<<<<<<<<<<<<<<<<<<<<<<<<
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING Category 0x3f <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING index = 63, action = 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2019-04-26 13:04:27.816:(#1):SPP-URL-FILTERING Blocking category = 0x3f <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
https 트래픽의 경우 HTTPS 사전 프로세서에 의해 대상 DNS가 서버 hello에서 추출되었습니다
2019-05-01 00:56:18.870:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 35322, p->dst_port = 443
2019-05-01 00:56:18.886:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.887:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 35322, p->dst_port = 443
2019-05-01 00:56:18.887:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 35322, p->dst_port = 443
2019-05-01 00:56:18.903:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.906:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.906:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 35322, p->dst_port = 443
2019-05-01 00:56:18.907:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.907:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.907:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.908:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.908:(#1):SPP-URL-FILTERING utm_sslLookupCallback
2019-05-01 00:56:18.908:(#1):SPP-URL-FILTERING got utmdata_p
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING White list regex match not enabled
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING Black list regex match not enabled
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING URL database Request: url_len = 11, msg overhead 12 url: www.cisco.com <<<<<<<<
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING Send to URL database: req_id=0x10130012
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING Sent to URL database 23 bytes
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING Send to URL database done, idx: 18, URL: www.cisco.com
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.910:(#1):SPP-URL-FILTERING Found UTMData at 0x007f1d9c479640, action = 00000008
2019-05-01 00:56:18.910:(#1):SPP-URL-FILTERING Verdict very late, in queryig state 2, idx=18
2019-05-01 00:56:18.910:(#1):SPP-URL-FILTERING UTM preprocessor p->src_port = 443, p->dst_port = 35322
2019-05-01 00:56:18.910:(#1):SPP-URL-FILTERING Found UTMData at 0x007f1d9c479640, action = 00000009
2019-05-01 00:56:18.910:(#1):SPP-URL-FILTERING Verdict very late, in queryig state 2, idx=18 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2019-05-01 00:56:18.909:(#1):SPP-URL-FILTERING Received from URL database 24 bytes
여기서는 차단 페이지가 표시되지 않습니다. 소프트웨어가 webroot 쿼리의 결과를 보고하지 않기 때문입니다.
근본 원인
CSCvo77664 "범주 조회를 위한 UTD URL 필터링이 webroot 조회 실패로 실패함"은 소프트웨어가 URL 판정 요청에 대한 응답이 아직 없을 때 트래픽이 유출되고 있다는 내용입니다.
문제 3
이 시나리오에서는 간헐적으로 URL-Filtering에서 허용해야 하는 웹 브라우징 세션[ 분류상]이 삭제됩니다. 예를 들어 www.google.com에 액세스하는 것은 "웹 검색 엔진" 범주가 허용되더라도 무작위로 가능하지 않습니다.
문제 해결
1단계: 일반 통계 수집
참고 이 명령 출력은 5분마다 재설정됩니다
cedge7#show utd engine standard statistics internal
*************Engine #1*************
<removed>
===============================================================================
HTTP Inspect - encodings (Note: stream-reassembled packets included): <<<<<<<<<< generic layer7 HTTP statistics
POST methods: 0
GET methods: 7
HTTP Request Headers extracted: 7
HTTP Request Cookies extracted: 0
Post parameters extracted: 0
HTTP response Headers extracted: 6
HTTP Response Cookies extracted: 0
Unicode: 0
Double unicode: 0
Non-ASCII representable: 0
Directory traversals: 0
Extra slashes ("//"): 0
Self-referencing paths ("./"): 0
HTTP Response Gzip packets extracted: 0
Gzip Compressed Data Processed: n/a
Gzip Decompressed Data Processed: n/a
Http/2 Rebuilt Packets: 0
Total packets processed: 13
<removed>
===============================================================================
SSL Preprocessor: <<<<<<<<<< generic layer7 SSL statistics
SSL packets decoded: 38
Client Hello: 8
Server Hello: 8
Certificate: 2
Server Done: 6
Client Key Exchange: 2
Server Key Exchange: 2
Change Cipher: 10
Finished: 0
Client Application: 2
Server Application: 11
Alert: 0
Unrecognized records: 11
Completed handshakes: 0
Bad handshakes: 0
Sessions ignored: 4
Detection disabled: 1
<removed>
UTM Preprocessor Statistics < URL filtering statistics including
---------------------------
URL Filter Requests Sent: 11
URL Filter Response Received: 5
Blacklist Hit Count: 0
Whitelist Hit Count: 0
Reputation Lookup Count: 5
Reputation Action Block: 0
Reputation Action Pass: 5
Reputation Action Default Pass: 0
Reputation Action Default Block: 0
Reputation Score None: 0
Reputation Score Out of Range: 0
Category Lookup Count: 5
Category Action Block: 0
Category Action Pass: 5
Category Action Default Pass: 0
Category None: 0
UTM Preprocessor Internal Statistics
------------------------------------
Total Packets Received: 193
SSL Packet Count: 4
Action Drop Flow: 0
Action Reset Session: 0
Action Block: 0
Action Pass: 85
Action Offload Session: 0
Invalid Action: 0
No UTM Tenant Persona: 0
No UTM Tenant Config: 0
URL Lookup Response Late: 4 <<<<< Explanation below
URL Lookup Response Very Late: 64 <<<<< Explanation below
URL Lookup Response Extremely Late: 2 <<<<< Explanation below
Response Does Not Match Session: 2 <<<<< Explanation below
No Response When Freeing Session: 1
First Packet Not From Initiator: 0
Fail Open Count: 0
Fail Close Count : 0
UTM Preprocessor Internal Global Statistics
-------------------------------------------
Domain Filter Whitelist Count: 0
utmdata Used Count: 11
utmdata Free Count: 11
utmdata Unavailable: 0
URL Filter Response Error: 0
No UTM Tenant Map: 0
No URL Filter Configuration : 0
Packet NULL Error : 0
URL Database Internal Statistics
--------------------------------
URL Database Not Ready: 0
Query Successful: 11
Query Successful from Cloud: 6 <<< 11 queries were succesful but 6 only are queried via brightcloud. 5 (11-6) queries are cached
Query Returned No Data: 0 <<<<<< errors
Query Bad Argument: 0 <<<<<< errors
Query Network Error: 0 <<<<<< errors
URL Database UTM disconnected: 0
URL Database request failed: 0
URL Database reconnect failed: 0
URL Database request blocked: 0
URL Database control msg response: 0
URL Database Error Response: 0
===============================================================================
Files processed: none
===============================================================================
- "지연 요청" - HTTP GET 또는 HTTPS 클라이언트/서버 인증서를 나타냅니다. 여기서 SNI/DN은 조회를 위해 추출할 수 있습니다. 늦은 요청이 전달됩니다.
- "매우 늦은 요청" - 라우터가 Brightcloud에서 URL 판정을 받을 때까지 플로우의 추가 패킷이 삭제되는 일종의 세션 삭제 카운터를 의미합니다. 다시 말해, 초기 HTTP GET 이후 또는 나머지 SSL 흐름은 판정을 받을 때까지 삭제됩니다.
- "매우 늦은 요청" - 판정을 제공하지 않고 Brightcloud에 대한 세션 쿼리가 재설정된 경우입니다. 버전 < 17.2.1의 경우 60초 후에 세션이 시간 초과됩니다. 17.2.1 이후부터는 Brightcloud에 대한 쿼리 세션이 2초 후에 시간 초과됩니다. [ via CSCvr98723 UTD: 2초 후 URL 요청 시간 초과]
이 시나리오에서는 비정상 상황을 강조하는 전역 카운터를 볼 수 있습니다.
2단계: 애플리케이션 로그 파일 보기
Unified Thread Detection 소프트웨어는 애플리케이션 로그 파일에 이벤트를 기록합니다.
cedge6#app-hosting move appid utd log to bootflash:
Successfully moved tracelog to bootflash:
iox_utd_R0-0_R0-0.18629_0.20190501005829.bin.gz
컨테이너 애플리케이션 로그 파일을 추출하여 플래시 자체에 저장합니다.
로그 표시는 다음 명령을 사용하여 수행할 수 있습니다.
cedge6# more /compressed iox_utd_R0-0_R0-0.18629_0.20190501005829.bin.gz
참고: IOS-XE 소프트웨어 버전 20.6.1 이상에서는 더 이상 UTD 애플리케이션 로그를 수동으로 이동할 필요가 없습니다. 이제 표준 명령 show logging process vman module utd를 사용하여 이러한 로그를 볼 수 있습니다
로그를 표시하면 다음과 같은 결과가 나타납니다.
.....
2020-04-14 17:47:57.504:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 245 , utmdata txn_id 0
2020-04-14 17:47:57.504:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 248 , utmdata txn_id 0
2020-04-14 17:47:57.504:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 249 , utmdata txn_id 0
2020-04-14 17:47:57.504:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 250 , utmdata txn_id 0
2020-04-14 17:47:57.660:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 251 , utmdata txn_id 0
2020-04-14 17:47:57.660:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 254 , utmdata txn_id 0
2020-04-14 17:47:57.660:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 255 , utmdata txn_id 0
2020-04-14 17:48:05.725:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 192 , utmdata txn_id 0
2020-04-14 17:48:37.629:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 208 , utmdata txn_id 0
2020-04-14 17:49:55.421:(#1):SPP-URL-FILTERING txn_id miss match verdict txn_id 211 , utmdata txn_id 0
2020-04-14 17:51:40 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:52:21 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:52:21 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:53:56 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:54:28 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:54:29 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
2020-04-14 17:54:37 ERROR: Cannot send to host api.bcti.brightcloud.com: Connection timed out
....
- "오류: 호스트 api.bcti.brightcloud.com으로 보낼 수 없습니다." - Brightcloud에 대한 쿼리 세션이 시간 초과되었음을 의미합니다 [ 60초 < 17.2.1 / 2초 >= 17.2.1 ]. 이는 Brightcloud와의 연결이 잘못되었음을 나타냅니다.
이 문제를 시연하기 위해 EPC [ Embedded Packet Capture]를 사용하면 연결 문제를 시각화할 수 있습니다.
- "SPP-URL-FILTERING txn_id miss match verdict verdict" - 이 오류 조건은 조금 더 설명해야 합니다. Brightcloud 쿼리는 라우터가 쿼리 ID를 생성하는 POST를 통해 수행됩니다
문제 4
이 시나리오에서 IPS는 UTD에서 활성화된 유일한 보안 기능이며, 고객은 TCP 애플리케이션인 프린터 통신에 문제가 발생합니다.
문제 해결
이 데이터 경로 문제를 해결하려면 먼저 문제가 있는 TCP 호스트에서 패킷 캡처를 수행합니다. 캡처는 성공적인 TCP 3-way 핸드셰이크를 보여주지만, TCP 데이터가 포함된 후속 데이터 패킷은 cEdge 라우터에 의해 삭제된 것 같습니다. 다음으로 다음을 보여주는 packet-trace를 활성화합니다.
edge#show platform packet-trace summ
Pkt Input Output State Reason
0 Gi0/0/1 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
1 Tu2000000001 Gi0/0/2 FWD
2 Gi0/0/2 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
3 Tu2000000001 Gi0/0/1 FWD
4 Gi0/0/1 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
5 Tu2000000001 Gi0/0/2 FWD
6 Gi0/0/1 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
7 Tu2000000001 Gi0/0/2 FWD
8 Gi0/0/2 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
9 Gi0/0/2 internal0/0/svc_eng:0 PUNT 64 (Service Engine packet)
위의 출력은 패킷 번호 8과 9가 UTD 엔진으로 전환되었지만 포워딩 경로로 다시 삽입되지 않았음을 나타냅니다. UTD 엔진 로깅 이벤트를 확인해도 Snort 서명 삭제는 표시되지 않습니다. 다음으로 TCP 노멀라이저로 인한 일부 패킷 삭제를 나타내는 UTD 내부 통계를 확인합니다.
edge#show utd engine standard statistics internal
<snip>
Normalizer drops:
OUTSIDE_PAWS: 0
AHEAD_PAWS: 0
NO_TIMESTAMP: 4
BAD_RST: 0
REPEAT_SYN: 0
WIN_TOO_BIG: 0
WIN_SHUT: 0
BAD_ACK: 0
DATA_CLOSE: 0
DATA_NO_FLAGS: 0
FIN_BEYOND: 0
근본 원인
프린터의 TCP 스택이 제대로 작동하지 않아서 발생하는 문제의 근본 원인입니다. TCP 3-way 핸드셰이크 중에 Timestamp 옵션이 협상되면 RFC7323은 모든 비<RST> 패킷에서 TCP가 TSopt 옵션을 전송해야 한다고 명시합니다. 패킷 캡처를 자세히 검사하면 삭제되는 TCP 데이터 패킷에 이러한 옵션이 활성화되지 않은 것으로 표시됩니다. IOS-XE UTD 구현에서는 블록 옵션이 포함된 Snort TCP 노멀라이저가 IPS 또는 IDS에 관계없이 활성화됩니다.
참조
개정 | 게시 날짜 | 의견 |
---|---|---|
2.0 |
23-Feb-2022 |
packet-trace 및 utd btrace 로그 파일 변경 사항과 flow-logging 통합 추가 |
1.0 |
10-Jan-2020 |
최초 릴리스 |