tcpdump 기초 사용법

tcpdump 기초 사용법입니다. 인터페이스 확인, host/port/protocol 필터, pcap 저장과 읽기, SYN/RST/DNS 흐름 해석과 민감정보 주의사항을 정리했습니다.

tcpdump는 Linux/Unix 환경에서 패킷을 캡처하고 필터링하는 CLI 도구입니다. 네트워크 장애를 볼 때 “패킷이 나갔는가”, “응답이 돌아왔는가”, “어느 포트와 주소로 통신하는가”를 직접 확인할 수 있습니다.

패킷 캡처에는 요청 본문, 쿠키, 토큰, 내부 IP, 도메인 정보가 포함될 수 있습니다. 필요한 대상과 시간만 좁게 캡처하고, pcap 파일 공유 전 민감정보를 확인합니다.

인터페이스 확인

ip -br link
sudo tcpdump -D

any 인터페이스는 여러 인터페이스를 한 번에 보기 편하지만, 실제 ingress/egress 인터페이스 구분이 필요한 경우에는 특정 인터페이스를 지정합니다.

기본 캡처

sudo tcpdump -ni eth0
sudo tcpdump -ni any -c 20
sudo tcpdump -ni eth0 -nn

-n은 이름 해석을 끄고, -i는 인터페이스를 지정합니다. 장애 상황에서는 DNS 역조회 때문에 출력이 늦어질 수 있으므로 -n을 자주 씁니다.

Host와 Port 필터

sudo tcpdump -ni eth0 host 192.0.2.10
sudo tcpdump -ni eth0 src host 192.0.2.10
sudo tcpdump -ni eth0 dst host 192.0.2.10
sudo tcpdump -ni eth0 tcp port 443
sudo tcpdump -ni eth0 host 192.0.2.10 and tcp port 443

프로토콜 필터

sudo tcpdump -ni any icmp
sudo tcpdump -ni any udp port 53
sudo tcpdump -ni any tcp and port 22
sudo tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0'

복잡한 필터는 shell 해석을 피하기 위해 따옴표로 감싸는 편이 안전합니다.

파일 저장과 읽기

sudo tcpdump -ni eth0 -c 1000 -w capture-web01.pcap host 192.0.2.10 and tcp port 443
tcpdump -nn -r capture-web01.pcap
tcpdump -nn -r capture-web01.pcap 'tcp port 443'

pcap 파일은 증거로 유용하지만 민감정보 저장물이기도 합니다. 보관 경로, 권한, 공유 대상을 제한합니다.

캡처 크기 제한

sudo tcpdump -ni eth0 -c 500 -w short-capture.pcap host 192.0.2.10
sudo tcpdump -ni eth0 -s 128 -c 1000 -w headers-only.pcap tcp port 443

-c는 패킷 수를 제한하고, -s는 packet snap length를 제한합니다. payload가 필요 없는 연결성 분석이면 캡처 크기를 줄이는 편이 안전합니다.

장애 분석 예시

  • SYN만 나가고 SYN-ACK가 없으면 대상 서버, 경로, 방화벽을 의심합니다.
  • SYN/SYN-ACK/ACK가 보이면 TCP 연결은 성립했습니다.
  • RST가 즉시 오면 서비스가 거부했거나 중간 장비가 끊었을 수 있습니다.
  • DNS 질의는 나가는데 응답이 없으면 resolver나 방화벽 UDP/TCP 53을 확인합니다.

TCP 흐름 빠르게 보기

sudo tcpdump -ni eth0 'host 192.0.2.10 and tcp port 443'

클라이언트에서 서버로 SYN, 서버에서 클라이언트로 SYN, ACK, 클라이언트에서 ACK가 보이면 3-way handshake는 성립한 것입니다. 그 뒤 애플리케이션 오류가 나면 TLS, HTTP, reverse proxy, 애플리케이션 로그를 이어서 봅니다.

DNS 확인 예시

sudo tcpdump -ni any 'udp port 53 or tcp port 53'
dig example.com

DNS query는 나가는데 response가 없으면 resolver 경로 문제이고, response가 오는데 애플리케이션이 실패하면 hosts 파일, search domain, 애플리케이션 DNS cache를 추가로 확인합니다.

HTTP/TLS 점검 시 주의

sudo tcpdump -ni eth0 'host 192.0.2.10 and tcp port 443' -c 100
curl -vk https://192.0.2.10/

TLS payload는 암호화되어도 SNI, 인증서 정보, IP/port, packet timing은 운영 단서가 됩니다. 다만 인증 토큰이나 평문 HTTP payload가 포함될 수 있는 캡처는 공유 전에 반드시 검토합니다.

운영 팁

  • 장시간 무제한 캡처를 피하고 -c로 packet 수를 제한합니다.
  • 디스크가 작은 서버에서는 -w 파일 크기를 주의합니다.
  • TLS 트래픽은 payload가 암호화되지만 metadata는 보입니다.
  • SPAN/TAP 환경에서는 패킷 중복과 방향성을 고려합니다.
  • 장애 리포트에는 캡처 위치, 인터페이스, 필터, 시작/종료 시각을 함께 남깁니다.

문서 링크

BGM EVER