운영체제/Linux
[Linux] tcpdump - 네트워크 트러블 슈팅 도구 (리눅스 패킷 수집 및 분석하기)
민돌v
2023. 9. 2. 10:11
해당 포스팅은 인프런 "리눅스 성능 분석 시작하기" 를 수강하고 정리한 글입니다 :)
- 리눅스 기반 os 에서 돌아가는 서버 시스템의 성능 측정 및 장애 대응에 대한 학습 내용 정리 글 입니다.
💡 리눅스 성능 분석의 기본 명령어
명령어 | 역할 |
uptime | 시스템 가동 시간, Load Average 확인 |
dmesg | 커널 메세지 확인 (OOME 발생 여부, SYN Flooding 여부) |
free | 메모리 사용 현황 확인 |
df | 디스크 여유 공간 및 inode 공간 확인 |
top | 프로세스들의 상태, CPU 사용률, 메모리 사용률 확인 |
netstat | 네트워크 연결 정보 확인 |
tcpdump | 네트워크 트러블 슈팅 분석을 위한 패킷 수집 명령어 |
📌 tcpdump 명령어
- 'tcpdump' 은 네트워크 패킷 수집을 위한 명령어.
- tcpdump로 네트워크 패킷의 흐름을 볼 수 있습니다. (어떤 패킷이 어떻게 이동하는지)
sudo tcpdump -nn -vvv -A
- -nn : 프로토콜과 포트 번호를 숫자 그대로 표현합니다.
- -vvv : 출력 결과에 더 많은 정보를 담습니다.
- -A : 패킷의 내용도 함께 출력합니다. (단, ssh 를 사용할경우 패킷의 정보가 암호화 되어 표출됩니다.)
✔️ tcpdump를 트러블 슈팅의 목적으로 할 때 사용방법
트러블 슈팅의 경우 A ↔ B 간의 통신에서 문제가 생기는 것이기 때문에 → 트러블 슈팅을 위해 살펴봐야할 목적지와 포트가 명확합니다.
port 와 host 옵션
- 특정 포트와 호스트 주소로 오고가는 패킷 정보만을 필터링할 수 있도록 해주는 옵션입니다.
sudo tcpdump -nn -vvv -A port 80 and host 10.1.1.1
이렇게 하면 4-way handshake 도 확인해 볼 수 있습니다.
✔️ 로컬환경에 분석 환경 구성하기
- 리눅스 로그 형식으로 보면 아무래도 불편한 감이 있습니다.
- 이걸 pcap 파일로 저장한 후 wireshark 프로그램을 이용해서 사용자가 보기 편한 ui 환경을 구성할 수 있습니다.
😄 wireshark
- tcpdump가 패킷 로그를 수집하여 pcap 파일을 생성
- sftp 명령어로 리눅스 환경(ex - ec2)에서 생성된 파일을 로컬로 가져옴
- wireshark 프로그램으로 해당 파일 분석 (다운로드 링크)
↓
😄 tcpdump 로그 채집 과정
1. -w 옵션으로 해당 로그를 파일로 저장시킬 수 있습니다.
tcpdump -vvv -nn -A -G 3600 -w /var/log/tcpdump/$(hostname)_%Y%m%d-%H%M%S.pcap
//백그라운드 실행
nohup sudo tcpdump -vvv -nn -A -G 3600 port 8080 -w /var/log/tcpdump/api/%Y%m%d-%H%M%S.pcap &
//백그라운드 확인
jobs
- 로그를 무한정 저장하는 것 보다 기준을 두는게 좋기 때문에 -G 옵션으로 하나의 파일을 저장할 시간을 지정할 수 있습니다.
- -w 옵션으로 저장할 파일의 위치와 이름을 지정해 줄 수 있습니다.
2. pcap 파일 불러오기
- 보통 이렇게 시간단위로 저장을하면, 에러가 발생한 시간의 pcap 파일만 로컬로 불러와 분석하면 된다는 장점이 있습니다.
- sftp 명령어로 해당 로그 파일을 로컬로 가져온 후 wireshark 프로그램으로 열면 아래 화면과 같이 [.] [f] [f.] 으로 표시되던 패킷도, SYN, ACK 와 같은 읽기 편한 구조로 구성됩니다.
📌 정리
tcpdump 명령어를 이용해서 넽트워크 패킷을 수집하고 분석할 수 있습니다.
- -vvv -nn -A 옵션을 이용해서 tcpdump 를 좀 더 효율적으로 사용할 수 있습니다.
- host, port 문구를 이용해서 특정 목적지, 특정 포트로 필터링 할 수 있습니다.
- tcpdump로 pcap 파일을 생성하고 wireshark 로 분석할 수 있습니다.