tcpdump

개요

tcpdump는 네트워크 인터페이스에서 패킷을 캡처하고 분석하는 CLI 도구입니다. 특정 IP, 포트, 프로토콜 필터를 조합해 원하는 트래픽만 추출할 수 있으며, .pcap 파일로 저장 후 Wireshark에서 분석하는 것도 가능합니다. 네트워크 문제 진단 및 보안 감사에 자주 활용됩니다.

  • NIC를 통해 주고 받는 패킷을 캡쳐하는 기능을 가진 명령어 입니다.
  • 평문으로 구성된 패킷의 분석이 가능하며 네트워크 종단간의 정상 통신 여부를 검증할 때도 사용이 가능합니다.
  • RHEL의 경우 기본 명령어가 아니므로 yum을 통해 설치 가능합니다.
  • 출처(https://ko.wikipedia.org/wiki/Tcpdump)
  • 옵션 및 사용 예시
-n : 주소를 십진수로 표시
-i : 어느 인터페이스를 경유하는 패킷을 캡쳐할지 결정
-t : 캡쳐 시간을 출력하지 않음
-c : 캡쳐할 패킷 수 지정
-a : 도메인 이름형식으로 주소 출력
-f : 로컬호스트는 도메인 이름, 원격호스트는 숫자로 표시
-e : 링크레벨 헤더를 출력
-N : 호스트 이름을 출력할 때 도메인 출력하지 않음
-P : 인터페이스를 promiscuous 모드로 하지 않음
-q(v) : 프로토콜정보를 간단히(자세히) 출력
-w(r) : 캡쳐한 패킷을 파일에 저장(로드)
-s : snap length를 변경 (기본 68바이트) -s0 무제한
-S : TCP순서번호를 상대적인 번호가 아닌 절대적 값으로 출력
-v : 더 많은 정보들을 출력
-vv : -v 보다 더 많은 정보들을 출력
-x : 패킷을 헥사코드로 출력

// eth0를 통해 인입되는 패킷 모니터링
# tcpdump -i eth0

// eth0를 통해 인입되는 패킷 모니터링 결과를 packet_log.txt에 저장
# tcpdump -i eth0 -w packet_log.txt

// 지정한 수 만큼만 저장
# tcpdump -i eth0 kj-c 50

// eth0을 통해 들어오는 패킷 중 지정된 포트와 IP로 들어오는 패킷에 대해서만 모니터링하여 packet_log에 저장
# tcpdump -i eth0 -w packet_log.txt -1 1500 tcp port 23 and host 218.38.71.24

// 저장된 파일을 확인
# tcpdump -r packet_log.txt

// 예시
# tcpdump -nns0 host 172.30.1.80 -i bond0 -w pcap_20150911_002.cap

BPF 필터 문법

tcpdump는 Berkeley Packet Filter(BPF) 문법을 사용해 캡처할 패킷을 정밀하게 필터링합니다. 필터 표현식은 host, net, port, proto 등의 기본 단위와 and, or, not 논리 연산자로 조합합니다. 필터를 올바르게 사용하면 불필요한 트래픽을 제거하고 원하는 흐름만 정확히 추출할 수 있어 분석 효율이 크게 향상됩니다.

# 특정 IP에서 발생하는 트래픽만 캡처
tcpdump -i eth0 host x.x.x.x

# 출발지 IP 또는 목적지 IP 방향 필터
tcpdump -i eth0 src x.x.x.x        # 출발지
tcpdump -i eth0 dst x.x.x.x        # 목적지

# 특정 포트 트래픽 캡처 (HTTP, SSH 등)
tcpdump -i eth0 tcp port 80
tcpdump -i eth0 tcp port 22

# 복합 조건 (IP + 포트 조합)
tcpdump -i eth0 host x.x.x.x and tcp port 443

# 특정 서브넷 트래픽
tcpdump -i eth0 net 10.0.0.0/8

실전 활용 사례

tcpdump는 네트워크 장애 진단, 보안 감사, 애플리케이션 통신 검증 등 다양한 상황에서 활용됩니다. 원격 서버에서 실시간으로 캡처하고 로컬 Wireshark에서 분석하는 워크플로가 일반적입니다. 아래는 현장에서 자주 사용하는 패턴입니다.

# DNS 쿼리 확인 (UDP 53)
tcpdump -i eth0 -nn udp port 53

# HTTP 요청 URL 추출 (평문 HTTP)
tcpdump -i eth0 -A -s0 tcp port 80 | grep -E "GET|POST|Host:"

# 특정 두 호스트 간 트래픽만 캡처
tcpdump -i eth0 host x.x.x.x and host x.x.x.x

# 고용량 캡처: 100MB 단위 파일 롤링 (-C 100MB, 최대 5개 보관)
tcpdump -i eth0 -w /tmp/capture.pcap -C 100 -W 5

# 원격 서버에서 캡처 → 로컬 Wireshark 파이프라인
ssh root@x.x.x.x "tcpdump -i eth0 -s0 -w - port 443" | wireshark -k -i -

캡처 시 -s0 옵션을 사용해 스냅샷 길이를 무제한으로 설정하면 페이로드 전체를 확인할 수 있습니다. 보안 민감한 환경에서는 캡처 파일을 분석 후 즉시 삭제하고, 평문 패킷에서 자격증명이 노출되지 않도록 주의합니다.

캡처 파일 크기 관리와 Wireshark 연동

운영 서버에서 장시간 트래픽을 캡처할 때는 디스크 용량 관리가 중요합니다. -C 옵션으로 파일 크기 제한을, -W 옵션으로 보관할 최대 파일 수를 설정하면 자동으로 파일을 롤링하여 디스크가 꽉 차는 상황을 방지할 수 있습니다. 캡처가 종료된 후에는 .pcap 파일을 로컬로 가져와 Wireshark의 GUI에서 심층 분석합니다.

Wireshark에서는 tcpdump의 BPF 필터보다 표현력이 풍부한 Display Filter 문법을 사용합니다. http.request.method == "GET", tcp.flags.syn == 1, dns.qry.name contains "example"처럼 프로토콜 필드 수준의 정밀한 필터링이 가능합니다. 서버에서 tcpdump로 캡처하고 Wireshark로 분석하는 조합이 현장에서 가장 널리 쓰이는 네트워크 진단 워크플로입니다.

보안 감사 관점에서 tcpdump는 평문 프로토콜(HTTP, FTP, Telnet)에서 자격증명 노출 여부를 검증하거나, 비정상적인 포트 스캔 패턴을 탐지하는 데 활용됩니다. 단, 다른 사용자의 트래픽 캡처는 법적·정책적 허가가 필요하므로 반드시 사전 승인을 받고 수행해야 합니다.

참고

참고 문서: Wireshark 디스플레이 필터 문법 · tcpdump 실전 사용 가이드 (Daniel Miessler)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.