tcpdump는 네트워크에서 주고받는 패킷을 캡처하고 분석하는 데 사용되는 명령어 기반의 도구입니다. 이를 통해 네트워크 통신 내용, 프로토콜 동작, 데이터 흐름, 잠재적인 보안 위협 등을 파악할 수 있습니다.
tcpdump로 알 수 있는 것:
- 네트워크 트래픽:
어떤 데이터가 네트워크를 통해 전송되고 있는지, 어떤 IP 주소와 포트가 사용되고 있는지 확인할 수 있습니다. - 패킷 내용:
패킷의 헤더 정보뿐만 아니라 데이터 부분까지 확인할 수 있어, 프로토콜 동작 및 데이터 내용 분석이 가능합니다. - 네트워크 문제 해결:
패킷 손실, 지연, 비정상적인 패킷 흐름 등을 파악하여 네트워크 문제 해결에 도움을 줄 수 있습니다. - 보안 분석:
네트워크에서 전송되는 데이터를 모니터링하여 악성 코드 감염, 해킹 시도 등 보안 위협을 탐지할 수 있습니다. - 프로토콜 분석:TCP, UDP, ICMP 등 다양한 프로토콜의 동작을 분석하고, 특정 프로토콜 관련 문제를 진단할 수 있습니다.
추가적으로 tcpdump를 활용하여 다음과 같은 작업을 할 수 있습니다:
- 패킷 캡처:실시간으로 네트워크 패킷을 캡처하거나, 파일로 저장하여 나중에 분석할 수 있습니다.
- 필터링:특정 조건에 맞는 패킷만 캡처하여 분석 시간을 절약할 수 있습니다.
- 와이어샤크 연동:tcpdump로 캡처한 패킷 파일을 와이어샤크에서 열어 더욱 자세하게 분석할 수 있습니다.
예시:
- 특정 서버로 향하는 HTTP 요청을 캡처하여 어떤 웹 페이지가 요청되었는지 확인할 수 있습니다.
- 특정 IP 주소에서 지속적으로 패킷이 전송되는 경우, 해당 주소를 분석하여 공격을 탐지할 수 있습니다.
- 네트워크 지연이 발생하는 경우, tcpdump로 패킷 전송 시간을 측정하여 원인을 파악할 수 있습니다.
📡 tcpdump로 알 수 있는 정보
1. 네트워크 트래픽 기본 메타데이터
- 캡처 시각: 패킷이 수신된 시간 (09:15:32.123456)
- 출발지(Source) / 목적지(Destination) IP
예: 192.168.0.10 → 172.217.161.78 - 출발지 / 목적지 포트 (TCP/UDP 등)
예: 443 (HTTPS), 22 (SSH), 80 (HTTP) - 프로토콜 종류: TCP, UDP, ICMP, ARP 등
2. 프로토콜별 세부 정보
- TCP: 시퀀스 번호(SEQ), ACK 번호, 플래그(SYN, ACK, FIN, RST)
- UDP: 길이, 체크섬
- ICMP: 타입, 코드, 응답 여부 (ping)
- ARP: IP ↔ MAC 주소 매핑 정보
3. 패킷 크기와 전송 방향
- 전체 바이트 크기 (len=60)
- 송신/수신 여부 (출발지와 목적지 기준으로 파악)
4. 호스트 간 연결 현황
- 어느 클라이언트와 서버가 통신 중인지
- 연결 시도(SYN), 연결 종료(FIN) 여부
- 재전송 여부, 네트워크 지연 지표(RTT 추정 가능)
5. 패킷 페이로드 일부
- 기본적으로는 헤더 정보 중심 출력
- 옵션으로 -A 또는 -X 사용 시 내용(payload)까지 보기 가능bash
tcpdump -i eth0 -A port 80→ HTTP 요청/응답 내용 일부까지 볼 수 있음 (텍스트 데이터는 평문 확인 가능)
⚠ HTTPS(SSL/TLS)는 암호화되어 내용은 해독 불가
📍 예시 출력 (HTTP 요청)
bash
10:42:53.123456 IP 192.168.0.5.55874 > 93.184.216.34.80: Flags [P.], seq 123:456, ack 789, win 501, length 333
- 10:42:53.123456 → 패킷 캡처 시간
- 192.168.0.5.55874 → 출발지 IP와 포트
- 93.184.216.34.80 → 목적지 IP와 포트 (HTTP)
- Flags [P.] → TCP Push 플래그
- seq 123:456 → 보낸 데이터의 시퀀스 번호 범위
- ack 789 → 수신 측이 기대하는 다음 바이트 번호
- length 333 → 데이터 길이 333바이트
⚠ 주의
- 개인정보, 패스워드, 세션 쿠키 등이 평문 프로토콜(HTTP, FTP, Telnet 등)에서는 노출될 수 있음
- 캡처는 보안상 민감 행위이므로 권한이 있는 환경에서만 수행해야 함
TCP덤프는 리눅스에서 네트워크 패킷을 캡처하고 분석하는 명령줄 도구입니다. 네트워크 인터페이스를 통과하는 패킷을 실시간으로 가로채, 사용자가 지정한 조건에 따라 정보를 화면에 출력하거나 파일에 저장할 수 있습니다.
tcpdump의 주요 기능
- 패킷 캡처: 특정 네트워크 인터페이스(예: eth0, lo)를 지나가는 모든 패킷을 캡처합니다.
- 패킷 필터링: 특정 호스트, 포트, 프로토콜 등 다양한 조건을 사용하여 원하는 패킷만 선택적으로 캡처할 수 있습니다.
- 패킷 분석: 캡처된 패킷의 헤더 정보를 분석하여 소스/목적지 IP 주소, 포트 번호, 패킷 크기, 플래그(SYN, ACK 등) 등 상세 정보를 보여줍니다.
- 파일 저장: 캡처된 패킷을 .pcap 형식의 파일로 저장하여, 나중에 Wireshark 같은 GUI 도구로 더 상세하게 분석할 수 있습니다.
tcpdump의 활용
tcpdump는 다음과 같은 상황에서 주로 사용됩니다.
- 네트워크 문제 해결: 특정 호스트와의 통신이 원활하지 않을 때 패킷 흐름을 분석하여 원인을 파악합니다.
- 보안 분석: 비정상적인 트래픽이나 의심스러운 패킷(예: 포트 스캔)을 탐지하고 분석합니다.
- 애플리케이션 디버깅: 네트워크 통신을 하는 애플리케이션의 패킷을 캡처하여 디버깅합니다.
정보처리기사 문제 (고난이도)
다음은 tcpdump 명령어가 사용된 시나리오와 관련된 정보처리기사 유형의 문제입니다.
문제: 시스템 관리자 A는 웹 서버(203.0.113.10)에서 외부 클라이언트의 접속을 모니터링하기 위해 다음과 같은 tcpdump 명령어를 실행했습니다.
sudo tcpdump -i eth0 -nn 'host 203.0.113.10 and port 80 and (tcp[tcpflags] & tcp-syn) != 0 and (tcp[tcpflags] & tcp-ack) = 0'
다음 중 이 명령어가 정상적으로 실행될 때 캡처되는 패킷에 대한 설명으로 옳은 것은?
① 웹 서버가 클라이언트에게 보내는 SYN/ACK 패킷
② 클라이언트가 웹 서버에게 보내는 SYN 패킷
③ 웹 서버가 클라이언트에게 보내는 ACK 패킷
④ 클라이언트가 웹 서버에게 보내는 SYN/ACK 패킷
⑤ 웹 서버가 클라이언트에게 보내는 FIN 패킷
정답 및 해설:
정답: ② 클라이언트가 웹 서버에게 보내는 SYN 패킷
해설:
이 문제는 tcpdump의 필터링 문법과 TCP 3-way handshake 과정을 모두 이해해야 풀 수 있는 문제입니다.
- host 203.0.113.10: 소스 또는 목적지 IP 주소가 203.0.113.10인 패킷을 필터링합니다.
- port 80: 소스 또는 목적지 포트가 80인 패킷을 필터링합니다.
- tcp[tcpflags] & tcp-syn) != 0: TCP 플래그 중 SYN 비트가 설정된 패킷을 찾습니다. (!= 0은 해당 비트가 켜져 있음을 의미)
- tcp[tcpflags] & tcp-ack) = 0: TCP 플래그 중 ACK 비트가 꺼져 있는 패킷을 찾습니다. (= 0은 해당 비트가 꺼져 있음을 의미)
이 두 조건을 결합하면 "SYN 비트는 켜져 있고, ACK 비트는 꺼져 있는" 패킷을 의미합니다. TCP 3-way handshake 과정에서 이 조건에 해당하는 패킷은 클라이언트가 서버로 보내는 최초의 연결 요청 패킷인 SYN 패킷뿐입니다.
- SYN: SYN=1, ACK=0
- SYN/ACK: SYN=1, ACK=1
- ACK: SYN=0, ACK=1
따라서, 이 명령어는 웹 서버에 접속을 시도하는 클라이언트들의 초기 SYN 패킷을 캡처하여 웹 서버로의 새로운 연결 시도를 모니터링하는 데 사용됩니다.
tcpdump는 리눅스에서 네트워크 문제를 해결하고 모니터링하는 데 매우 유용한 명령어입니다. 다양한 옵션과 필터링 조건을 조합하여 특정 상황에 맞는 패킷을 정확하게 캡처할 수 있습니다.
1. 웹 서버 트래픽 모니터링 🌐
웹 서버(예: Apache, Nginx)로 들어오는 HTTP(80번 포트) 또는 HTTPS(443번 포트) 트래픽을 모니터링할 때 사용합니다. 이를 통해 웹 서버로의 접근 현황을 파악하거나, 특정 IP 주소로부터의 요청을 추적할 수 있습니다.
# 특정 포트(80 또는 443)의 패킷 캡처
sudo tcpdump -i eth0 'port 80 or port 443'
# 특정 IP 주소(192.168.1.10)와의 통신 패킷 캡처
sudo tcpdump -i eth0 'host 192.168.1.10'
2. 특정 호스트의 연결 문제 진단 💔
서버가 특정 클라이언트나 다른 서버와 통신이 되지 않을 때, tcpdump를 사용하여 패킷이 실제로 오가는지 확인합니다. TCP 3-way handshake 과정을 분석하여 연결이 어디서 실패하는지 파악할 수 있습니다.
# 특정 호스트(10.10.1.5)와 22번 포트(SSH)의 통신 캡처
# -nn : IP 주소와 포트 번호를 이름으로 변환하지 않고 숫자로 표시 (분석 속도 향상)
sudo tcpdump -i eth0 -nn 'host 10.10.1.5 and port 22'
3. DNS 쿼리 문제 해결 ❓
애플리케이션이 외부 도메인에 접근하지 못할 때, DNS 쿼리(53번 포트)가 정상적으로 전송되고 응답을 받는지 확인할 수 있습니다.
# DNS 쿼리 및 응답 패킷 캡처 (UDP 53번 포트)
sudo tcpdump -i eth0 -nn 'udp port 53'
4. 패킷 파일로 저장 및 분석 💾
실시간으로 분석하기 어려운 대량의 패킷을 파일로 저장하여, 나중에 Wireshark 같은 GUI 도구로 상세 분석할 수 있습니다. 이 방법은 트래픽이 많을 때 시스템 부하를 줄이는 데도 도움이 됩니다.
# 패킷을 capture.pcap 파일로 저장 (1000개 패킷 캡처 후 종료)
sudo tcpdump -i eth0 -s 0 -w capture.pcap -c 1000
# -s 0 : 패킷 전체 길이 캡처 (기본값은 68-96바이트)
# -w : 캡처된 패킷을 파일에 쓴다.
# -c : 캡처할 패킷 개수를 지정한다.
'기타' 카테고리의 다른 글
| 12. Disk (실시간) 복제 (0) | 2025.08.28 |
|---|---|
| 11. RAID 구성 (1) | 2025.08.28 |
| 13. 커널 (0) | 2025.08.28 |
| 12. Memory (2) | 2025.08.28 |
| 11. CPU (0) | 2025.08.28 |