소개
이 문서에서는 Wireshark를 사용하여 SWA(Secure Web Appliance)에서 캡처된 패킷을 분석하는 방법에 대해 설명합니다.
사전 요구 사항
요구 사항
Cisco에서는 이러한 주제에 대해 알고 있는 것이 좋습니다
- Cisco SWA 관리
-
명시적 및 투명 프록시 구축 방법
- 패킷 캡처
사용되는 구성 요소
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
Cisco 기술 지원에 문의할 때 SWA 아웃바운드 및 인바운드 네트워크 활동에 대한 세부 정보를 제공하라는 메시지가 표시됩니다. 이는 디버깅 또는 확인을 위해 트래픽을 수집하기 위해 패킷 캡처를 실행하여 모니터링할 수 있습니다.
명시적 프록시 구축
명시적 프록시를 사용하려면 클라이언트가 트래픽을 프록시 서버로 직접 전송하도록 구성해야 합니다. 네트워크 컨피그레이션의 특정 프록시 설정(PAC 파일 또는 DHCP 옵션) 또는 브라우저 설정을 통해 전송하는 경우가 많습니다. 이렇게 하면 프록시 서버에서 요청을 대상으로 전달하기 전에 요청을 관리하고 필터링할 수 있습니다.
참고: 명시적 구축에서는 클라이언트 머신에서 나가는 패킷의 대상 IP 주소가 프록시 서버 IP 주소입니다.
명시적 프록시 구축을 사용하는 동안 네트워크 논리적 흐름은 다음과 같습니다.
명시적 프록시 패킷 흐름
투명 프록시 구축
투명 프록시는 클라이언트 측에서 컨피그레이션을 변경하지 않고도 네트워크 트래픽을 가로챕니다. 트래픽은 프록시 서버로 자동으로 리디렉션되므로 클라이언트가 명시적으로 인식하지 않고도 요청을 필터링하고 모니터링할 수 있습니다.
참고: 투명 구축에서는 클라이언트 머신에서 나가는 패킷의 대상 IP 주소가 대상 서버 IP 주소입니다.
투명 프록시 구축을 사용하는 동안 네트워크 논리적 흐름은 다음과 같습니다.
투명 프록시 패킷 흐름
SWA Explicit Transparent 패킷 흐름에 대한 자세한 내용은 Secure Web Appliance의 패킷 흐름 이해를 참조하십시오
AsyncOS 버전 7.x 이상에서 패킷 캡처
GUI(Graphical User Interface)에서 패킷 캡처를 시작하려면 오른쪽 상단의 Help and Support(도움말 및 지원) 메뉴로 이동하여 Packet Capture(패킷 캡처)를 선택한 다음 Start Capture(캡처 시작)를 클릭합니다. 패킷 캡처 프로세스를 중지하려면 Stop Capture를 클릭합니다.
참고: GUI에서 시작된 캡처는 SWA GUI 세션 만료 또는 로그아웃 후에도 세션 간에 저장된 상태로 유지됩니다.
CLI(Command Line Interface)에서 패킷 캡처를 시작하려면 Packetcapture > Start 명령을 입력합니다. 패킷 캡처 프로세스를 중지하려면 Packetcapture > Stop Command를 입력하면 세션이 종료될 때 SWA가 패킷 캡처를 중지합니다.
SWA 패킷 캡처의 컨피그레이션 가이드
SWA에서 패킷 캡처를 수행하는 방법에 대한 자세한 내용은 을/를 참조하십시오.
Content Security Appliance에서 패킷 캡처 구성
SWA 사용 설명서 - 패킷 캡처 섹션
SWA의 패킷 캡처 필터
SWA GUI 및 CLI의 기본 캡처(Packetcapture 명령)는 표준 tcpdump 필터 구문을 사용합니다. 이 섹션에서는 tcpdump 캡처 필터와 관련된 정보를 제공하고 몇 가지 예를 제공합니다.
다음은 가장 많이 사용되는 몇 가지 필터입니다.
- ip: 모든 IP 프로토콜 트래픽에 대한 필터.
- tcp: 모든 TCP 프로토콜 트래픽에 대한 필터.
- 호스트: 특정 IP 주소 소스 또는 대상에 대한 필터.
tcpdump에서 자주 사용되는 두 가지 논리 조건이 있습니다.
- 및: 지정된 모든 조건이 충족된 경우에만 패킷을 캡처합니다(사용
&&
).
- 또는: 하나 이상의 조건이 충족될 경우 패킷을 캡처합니다(사용)
||
).
참고: 이러한 논리적 조건은 대/소문자를 구분합니다.
다음은 투명 또는 명시적 구축에서 IP 주소로 패킷을 수집하기 위한 SWA의 필터 예입니다.
소스 IP: 192.168.1.1
대상 IP: 10.20.3.15
host 192.168.1.1 || host 10.20.3.15
이 필터는 10.20.3.15와 SWA 간의 트래픽과 SWA와 192.168.1.1 간의 트래픽을 캡처합니다.
팁: 필터에 SWA IP 주소를 추가할 필요가 없습니다.
문제 해결
클라이언트가 웹 사이트에 액세스하려고 할 때 전체 통신 프로세스는 두 부분으로 나뉠 수 있습니다.
- 클라이언트는 SWA와 통신합니다.
- 대상 서버와 통신하는 SWA.
팁: 패킷을 캡처하기 전에 클라이언트 IP 주소가 SWA에 대한 경로에서 변경되지 않은 상태로 유지되는지 확인합니다. 트래픽이 SWA에 도달하기 전에 구성된 NAT(Network Address Translation) 규칙 또는 SWA와 클라이언트 머신 간에 다운스트림 프록시가 있으면 IP 주소가 변경됩니다.
Wireshark 필터를 사용하여 명시적 연결 분석
명시적 연결을 위한 Wireshark 필터
패킷 캡처의 첫 번째 통신 단계: 소스 IP는 클라이언트 IP 주소이고 대상 IP 주소는 SWA IP입니다(SWA의 인바운드 인터페이스는 일반적으로 P1 인터페이스).
Wireshark에서 다음 필터를 사용할 수 있습니다.
클라이언트 IP로 필터링:
ip.addr ==
두 번째 통신 단계에서 소스 IP는 SWA IP 주소(외부 인터페이스는 일반적으로 P2 인터페이스)이며 목적지 IP 주소는 웹 서버 IP 주소입니다.
서버 IP로 필터링:
ip.addr ==
명시적 구축에서 클라이언트는 요청을 HTTP Connect로 프록시에 전송하여 HTTP Connect로 필터링합니다.
http.request.method == "CONNECT"
HTTP 요청 메서드로 필터링합니다.
http.request.method==GET
또는
http.request.uri contains ""
클라이언트 Hello에 대해 필터링하는 HTTPS 요청에서:
ssl.handshake.type==1
양쪽이 함께 통신하는 것을 보고자 하는 경우 가장 좋은 방법은 TCP 스트림 필터를 사용하는 것입니다.
팁:TCP 스트림 번호를 찾으려면 현재 필터에서 임의의 패킷을 마우스 오른쪽 버튼으로 클릭하거나 원하는 패킷을 마우스 오른쪽 버튼으로 클릭하고 Follow를 선택한 후 TCP Stream을 선택합니다. 필터 막대에서 TCP 스트림 번호를 확인할 수 있습니다.
첫 번째 및 두 번째 단계 TCP 스트림 번호를 격리하려면 필터를 사용합니다.
tcp.stream eq || tcp.stream eq
<first_phase_stream_number> 및 <second_phase_stream_number>를 적절한 스트림 번호로 교체합니다.
Wireshark 필터를 사용하여 투명 연결 분석
WCCP(Web Cache Communication Protocol) 리디렉션 또는 PBR(Policy-Based Routing)과 관련된 투명 요청에서 클라이언트 트래픽이 SWA로 전달되는 동안 SWA는 자체 IP 주소가 아닌 대상 서버 IP 주소로 응답합니다. 그 결과, 투명 요청에서 패킷 캡처는 대상 서버 IP 주소를 표시하지만 SWA MAC 주소를 대상 MAC 주소로 사용합니다(클라이언트에서 SWA로 이동하는 트래픽). IP 스푸핑이 활성화되지 않은 경우 SWA에서 나가는 패킷은 소스 IP가 SWA MAC 주소의 클라이언트 IP 주소입니다.
투명 연결을 위한 Wireshark 필터
투명 요청의 경우와 마찬가지로, Wireshark는 명시적 연결과 동일하게 필터링하지만 SWA가 실제 IP 주소를 사용하여 클라이언트와 통신할 수 없고 실제 대상 서버로 스푸핑될 수 없다는 점에 유의하십시오.
클라이언트 IP로 필터링:
ip.addr ==
서버 IP로 필터링:
ip.addr ==
주의: IP 스푸핑이 SWA에서 활성화되지 않은 경우 SWA에서 웹 서버로의 패킷의 소스 IP 주소는 클라이언트 IP 주소입니다.
HTTP 요청 메서드로 필터링합니다.
http.request.method==GET
또는
http.request.uri contains ""
클라이언트 Hello에 대해 필터링하는 HTTPS 요청에서:
ssl.handshake.type==1
양쪽이 함께 통신하는 것을 보고자 하는 경우 가장 좋은 방법은 TCP 스트림 필터를 사용하는 것입니다.
팁: TCP 스트림 번호를 찾으려면 현재 필터에서 임의의 패킷을 마우스 오른쪽 버튼으로 클릭하거나 원하는 패킷을 마우스 오른쪽 버튼으로 클릭하고 Follow, TCP Stream을 선택합니다. 필터 막대에서 TCP 스트림 번호를 확인할 수 있습니다
첫 번째 및 두 번째 단계 TCP 스트림 번호를 격리하려면 필터를 사용합니다.
tcp.stream eq || tcp.stream eq
<first_phase_stream_number> 및 <second_phase_stream_number>를 적절한 스트림 번호로 교체합니다.
Wireshark 필터는 명시적 연결과 유사합니다.
클라이언트 웹 요청이 명시적 또는 투명 연결인지 확인하는 방법
명시적 요청에서: 클라이언트는 프록시 서버를 인식하는 동안 URL에 액세스하므로 HTTP Connect 요청을 프록시 IP 주소 및 프록시 포트로 보냅니다.
SWA는 기본적으로 프록시 서비스에 대해 TCP 포트 3128 및 80을 수신 대기합니다. 명시적 구축 패킷 캡처에서는 클라이언트와 SWA 간의 트래픽이 해당 프록시 포트 번호로 향하는 것을 확인할 수 있습니다.
투명 요청에서: 클라이언트는 프록시 IP를 인식하지 못하는 동안 URL에 액세스하며 SWA는 자체 IP 주소를 사용하여 통신하지 않습니다. 대신 SWA가 대상 서버 IP 주소를 스푸핑했습니다.
투명 모드에서는 트래픽이 클라이언트와 대상 서버(예: Cisco 웹 사이트) 사이를 이동하는 것처럼 표시되지만, 대상 서버의 MAC 주소는 SWA의 MAC 주소입니다. SWA MAC 주소를 확인하려면 CLI 명령 etherconfig > MEDIA를 사용합니다.
Wireshark 보기 수정
프록시를 사용하여 웹 요청의 문제를 해결하는 동안 Wireshark의 패킷을 더 자세히 살펴보려면 패킷 보기에 SNI(Server Name Indication) 및 TCP 스트림 ID를 포함하는 것이 좋습니다.
Wireshark 뷰에 SNI 열 추가
1단계. Wireshark와 함께 패킷 캡처 파일을 엽니다.
2단계. Wireshark의 열 이름을 마우스 오른쪽 단추로 클릭합니다.
3단계. 열 환경설정을 선택합니다.
4단계. + 기호(새 열 추가)를 클릭합니다.
5단계. 해당 열의 이름(예: SNI)을 입력합니다.
6단계. Type(유형) 섹션에서 Custom(사용자 지정)을 선택합니다.
7단계. Field(필드) 섹션에 tls.handshake.extensions_server_name을 입력합니다.
8단계. 변경 사항을 저장하려면 확인을 클릭합니다.
또는 다음 단계를 사용할 수 있습니다.
1단계. Wireshark에 필터를 적용합니다. ssl.handshake.type==1 - SSL/TLS 핸드셰이크에서 클라이언트 Hello 메시지를 격리합니다.
2단계. Protocol Details(프로토콜 세부사항)를 확장합니다. Transport Layer Security(전송 레이어 보안) > Expand Handshake Protocol(핸드셰이크 프로토콜 확장)을 클릭합니다. 클라이언트 Hello > 확장: Server name(서버 이름) > Expand Server Name Indication Extension (SNI)(SNI(Server Name Indication Extension)을 확장합니다.
3단계. 서버 이름을 열로 추가합니다. 서버 이름(또는 특정 서버 이름)을 마우스 오른쪽 단추로 누르고 열로 적용을 선택합니다.
Wireshark 뷰에 스트림 번호 열 추가
1단계. Wireshark와 함께 패킷 캡처 파일을 엽니다.
2단계. Wireshark의 열 이름을 마우스 오른쪽 단추로 클릭합니다.
3단계. 열 환경설정을 선택합니다.
4단계. + 기호(새 열 추가)를 클릭합니다.
5단계. 해당 열의 이름(예: 스트림)을 입력합니다.
6단계. Type(유형) 섹션에서 Custom(사용자 지정)을 선택합니다.
7단계. Field(필드) 섹션에 tcp.stream을 입력합니다.
8단계. 변경 사항을 저장하려면 확인을 클릭합니다.
또는 다음 단계를 사용할 수 있습니다.
1단계. HTTP/TCP 패킷을 찾습니다. HTTP/TCP 프로토콜을 포함하는 패킷을 보고 있는지 확인합니다.
2단계. 패킷 및 왼쪽 하단 창 전송 제어 프로토콜을 선택하거나 클릭합니다. (Stream Index:Number)를 가져오려면 아래로 스크롤합니다.
3단계. 스트림 인덱스를 마우스 오른쪽 단추로 클릭합니다. number 및 apply as 열.
관련 정보