리눅스 tcpdump로 TCP 리셋(RST) 패킷만 수집하는 완벽 가이드 - 2026년

🚨 네트워크 연결이 갑자기 끊어지는 문제, 원인을 찾고 계신가요?

네트워크 장애 분석 중 TCP 연결이 예기치 않게 종료되는 상황을 마주한 적 있으신가요? 이런 문제의 핵심은 바로 TCP 리셋(RST) 패킷에 있습니다.

오늘은 리눅스 환경에서 tcpdump를 활용해 RST 패킷만 정확히 수집하는 방법을 상세히 알아보겠습니다. 네트워크 엔지니어부터 시스템 관리자까지, 모든 레벨에서 활용 가능한 실용적인 가이드를 제공해드릴게요!


🎯 TCP 리셋(RST) 패킷이란?

리셋 패킷(Reset Packet)
리셋 패킷(Reset Packet)

 

📖 기본 개념

TCP 리셋(RST) 패킷은 TCP 연결을 즉시 종료시키는 특수한 패킷입니다. 일반적인 FIN 패킷과 달리, RST 패킷은 연결 상태와 관계없이 강제로 연결을 차단합니다.

🔧 RST 패킷이 발생하는 주요 상황

  1. 포트가 닫혀있을 때: 서버의 해당 포트에 서비스가 실행되지 않음
  2. 방화벽에 의한 차단: iptables나 보안 장비에서 연결 차단
  3. 애플리케이션 오류: 프로그램에서 강제로 소켓 종료
  4. 타임아웃: 네트워크 지연으로 인한 연결 초과 시간
  5. 보안 정책: DDoS 방어나 비정상 트래픽 탐지

⚡ RST vs FIN 패킷 차이점

  • FIN: 정상적인 연결 종료 (4-way handshake)
  • RST: 강제적인 연결 종료 (즉시 종료, 버퍼 데이터 손실 가능)

🛠️ tcpdump로 RST 패킷 수집하는 기본 방법들

1️⃣ 가장 간단한 방법: 플래그 이름 사용

tcpdump 'tcp[tcpflags] & tcp-rst != 0'

TCP flag field values는 tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-act, tcp-urg 등으로 표현할 수 있습니다.

예시 출력:

13:13:18.659757 IP 192.168.1.100.13352 > server.example.com.https: Flags [R.], seq 3795577939, ack 3798544125, win 0, length 0
13:13:18.659969 IP 192.168.1.100.13350 > server.example.com.https: Flags [R.], seq 2462881485, ack 3330663598, win 0, length 0

2️⃣ 비트 연산을 이용한 정확한 필터링

tcpdump 'tcp[13] & 4 != 0'

해석:

  • tcp[13]: TCP 헤더의 13번째 바이트 (플래그 필드)
  • & 4: RST 비트 마스크 (RST = 0000 0100 = 4)
  • != 0: 해당 비트가 설정되어 있는지 확인

3️⃣ 특정 인터페이스에서 RST 패킷 수집

# eth0 인터페이스에서만 수집
tcpdump -i eth0 'tcp[13] & 4 != 0'

# 모든 인터페이스에서 수집
tcpdump -i any 'tcp[13] & 4 != 0'

⚠️ 주의사항: -I (대문자)가 아닌 -i (소문자) 옵션을 사용해야 합니다!


🎯 실무에서 활용하는 고급 필터링 기법

🔍 가독성 높은 출력 옵션

# IP 주소를 숫자로 표시 (DNS 조회 없음)
tcpdump -nn 'tcp[13] & 4 != 0'

# 타임스탬프와 함께 상세 출력
tcpdump -ttnn 'tcp[13] & 4 != 0'

# 패킷 내용도 16진수로 출력
tcpdump -nnX 'tcp[13] & 4 != 0'

📊 특정 호스트/포트 대상 RST 패킷 수집

# 특정 서버로부터의 RST 패킷만
tcpdump -nn 'src host 192.168.1.10 and tcp[13] & 4 != 0'

# 특정 포트(예: 80번)의 RST 패킷만
tcpdump -nn 'port 80 and tcp[13] & 4 != 0'

# 특정 네트워크 대역의 RST 패킷
tcpdump -nn 'net 192.168.1.0/24 and tcp[13] & 4 != 0'

💾 파일로 저장하여 분석

# pcap 파일로 저장
tcpdump -nn 'tcp[13] & 4 != 0' -w rst_packets.pcap

# 시간 제한 (60초간 수집)
timeout 60 tcpdump -nn 'tcp[13] & 4 != 0' -w rst_analysis.pcap

# 파일 크기 제한 (100MB마다 새 파일)
tcpdump -nn 'tcp[13] & 4 != 0' -w rst_%Y%m%d_%H%M.pcap -C 100


🔧 다양한 TCP 플래그 패킷 수집 방법

TCP 플래그별 비트 값

플래그 비트 값 용도

FIN 1 연결 종료
SYN 2 연결 시작
RST 4 연결 리셋
PSH 8 데이터 즉시 전송
ACK 16 확인 응답
URG 32 긴급 데이터

다른 TCP 플래그 수집 예시

# SYN 패킷만 수집 (연결 시도)
tcpdump 'tcp[13] & 2 != 0'

# FIN 패킷만 수집 (정상 종료)
tcpdump 'tcp[13] & 1 != 0'

# SYN+ACK 패킷 (연결 응답)
tcpdump 'tcp[13] & 18 = 18'

# RST+ACK 조합
tcpdump 'tcp[13] & 20 = 20'


📈 실제 사용 시나리오별 명령어

🚨 웹 서버 연결 장애 분석

# HTTP/HTTPS 포트의 RST 패킷 모니터링
tcpdump -nn 'tcp[13] & 4 != 0 and (port 80 or port 443)'

# 특정 클라이언트IP에서 오는 RST
tcpdump -nn 'src host 203.0.113.1 and tcp[13] & 4 != 0'

🛡️ 보안 이벤트 탐지

# 짧은 시간 내 다량의 RST 패킷 (DDoS 의심)
tcpdump -nn 'tcp[13] & 4 != 0' | head -100

# 외부에서 내부 서버로의 RST 패킷
tcpdump -nn 'dst net 192.168.0.0/16 and tcp[13] & 4 != 0'

🔄 애플리케이션 연결 문제 진단

# 데이터베이스 포트(3306) RST 모니터링
tcpdump -nn 'port 3306 and tcp[13] & 4 != 0'

# SSH 연결 문제 분석
tcpdump -nn 'port 22 and tcp[13] & 4 != 0'


💡 RST 패킷 분석 노하우

🔍 출력 결과 해석하기

13:13:18.659757 IP 192.168.1.100.13352 > server.com.443: Flags [R.], seq 3795577939, ack 3798544125, win 0, length 0

각 필드 의미:

  • 13:13:18.659757: 정확한 시간 (마이크로초 단위)
  • 192.168.1.100.13352: 송신지 IP와 포트
  • server.com.443: 목적지 호스트와 포트
  • Flags [R.]: RST + ACK 플래그
  • seq, ack: TCP 시퀀스 번호
  • win 0: 윈도우 크기 (RST 패킷은 보통 0)
  • length 0: 데이터 길이 (RST는 데이터 없음)

📊 패킷 수 집계하기

# 1분간 RST 패킷 개수 세기
timeout 60 tcpdump -nn 'tcp[13] & 4 != 0' 2>/dev/null | wc -l

# 호스트별 RST 패킷 통계
tcpdump -nn 'tcp[13] & 4 != 0' | awk '{print $3}' | sort | uniq -c


⚠️ 주의사항 및 베스트 프랙티스

🛡️ 권한 및 보안

  • tcpdump 실행에는 root 권한 또는 CAP_NET_RAW 권한 필요
  • 운영 환경에서는 네트워크 성능에 미치는 영향 고려
  • 민감한 데이터가 포함될 수 있으므로 캡처 파일 관리 주의

성능 최적화

# 버퍼 크기 조정으로 패킷 손실 방지
tcpdump -B 4096 'tcp[13] & 4 != 0'

# 스냅샷 길이 제한 (헤더만 캡처)
tcpdump -s 128 'tcp[13] & 4 != 0'

📝 로그 관리

# 로그 로테이션과 함께 사용
tcpdump 'tcp[13] & 4 != 0' | logger -t "RST_MONITOR"

# 시간별 파일 분할
tcpdump -G 3600 -w 'rst_%Y%m%d_%H.pcap' 'tcp[13] & 4 != 0'


🔗 추가 학습 자료

📚 심화 학습을 위한 리소스

  • GitHub Gist: tcpdump TCP flags 가이드 - tcpdump의 TCP 플래그 읽는 방법에 대한 상세한 예시들을 제공합니다
  • 공식 매뉴얼: man tcpdump로 모든 옵션 확인
  • Wireshark 연동: pcap 파일을 Wireshark에서 시각적 분석

🛠️ 관련 도구들

  • ss: 현재 소켓 상태 확인
  • netstat: 네트워크 연결 상태 모니터링
  • iptables: 방화벽 로그와 연계 분석
  • ngrep: 패킷 내용 기반 필터링

🎊 마무리: 이제 네트워크 문제 해결의 달인!

TCP 리셋 패킷 분석은 네트워크 장애 해결의 핵심 기술 중 하나입니다. 이번 가이드에서 배운 tcpdump 명령어들을 활용하면:

연결 끊김 원인 신속 파악

보안 이벤트 조기 탐지

애플리케이션 성능 문제 진단

네트워크 인프라 안정성 향상

기억해야 할 핵심 명령어:

# 기본 RST 패킷 수집
tcpdump 'tcp[13] & 4 != 0'

# 상세 정보와 함께
tcpdump -ttnn 'tcp[13] & 4 != 0'

# 파일 저장
tcpdump 'tcp[13] & 4 != 0' -w rst_analysis.pcap

실제 운영 환경에서 이런 기법들을 활용해보세요. 네트워크 문제 해결 능력이 한 단계 업그레이드될 것입니다!


💬 도움이 되셨나요? 댓글로 여러분의 경험담이나 추가 질문을 공유해주세요. 함께 더 나은 네트워크 관리 방법을 찾아가요!

🔖 북마크 추천: 네트워크 장애 발생 시 바로 참고할 수 있도록 이 가이드를 즐겨찾기에 저장해두세요.

댓글

Designed by JB FACTORY