01
왜 포트 제외가 필요한가?
현대 서버 환경에서는 SSH(22)와 HTTPS(443) 두 포트만으로도 전체 인바운드·아웃바운드 트래픽의 75~85%를 차지합니다. 이 트래픽은 대부분 암호화되어 있어 내용 분석이 불가능하고, 패킷 수가 많아 실제 이상 징후를 찾는 데 방해가 됩니다.
| 포트 | 서비스 | 트래픽 비중 | 제외 이유 | 우선도 |
|---|---|---|---|---|
| 22 | SSH | 35–40% | 암호화, 관리 트래픽 | 최우선 제외 |
| 443 | HTTPS | 40–45% | TLS 암호화, 내용 불가 | 최우선 제외 |
| 80 | HTTP | 10–15% | 상황에 따라 제외 | 선택적 제외 |
| 53 | DNS | 5–8% | 짧은 질의·응답 노이즈 | 선택적 제외 |
💡 실무 효과
SSH·HTTPS 제외 후 네트워크 장애 원인 트래픽을 평균 90% 더 빠르게 식별할 수 있습니다. 필터 없이 10분 걸리던 분석이 1분 이내로 줄어듭니다.
02
BPF 문법 기초
tcpdump는 Berkeley Packet Filter(BPF) 문법을 사용합니다. 커널 레벨에서 패킷을 걸러내므로 유저 스페이스로 올라오는 데이터 자체가 줄어 성능이 뛰어납니다.
# 논리 연산자
and (&&) # A이면서 B
or (||) # A이거나 B
not (!) # A가 아님
# 포트 한정자
port 80 # src 또는 dst 포트 80
src port 22 # 소스 포트 22만
dst port 443 # 목적지 포트 443만
# 호스트·네트워크 한정자
host 10.0.0.1 # 특정 IP (src 또는 dst)
net 192.168.0.0/24 # 서브넷 전체
src host 10.0.0.1 # 소스 IP
03
핵심 명령어 완전 분석
아래는 가장 일반적으로 사용되는 22·443 포트 제외 명령어입니다. 각 구성 요소가 무엇을 의미하는지 확인하세요.
tcpdump -nni any host 10.38.23.137 and not dst port 22 and not src port 22 and not dst port 443 and not src port 443
-nnIP 주소·포트를 숫자로 표시. DNS 역방향 조회 생략으로 속도 향상-i any모든 네트워크 인터페이스에서 캡처 (eth0, lo 등 전부)host 10.38.23.137이 IP를 src 또는 dst로 포함하는 패킷만 선택not dst port 2222번으로 향하는 패킷 제외not src port 2222번에서 나오는 응답 패킷 제외not dst/src port 443443번 양방향 트래픽 제외04
3가지 필터링 방법 비교
같은 결과를 내는 여러 문법이 있습니다. 상황에 맞게 선택하세요.
1
port 키워드 (권장)
# port N = "src port N or dst port N"과 동일
tcpdump -nni any \
host 10.38.23.137 \
and not port 22 \
and not port 443
2
괄호 그룹핑
# 셸에서 괄호 이스케이프 필수
tcpdump -nni any \
host 10.38.23.137 \
and not \(port 22 or port 443\)
# 또는 따옴표로 감싸기
tcpdump -nni any \
"host 10.38.23.137 and not (port 22 or port 443)"
3
다중 포트 제외
# 4개 포트 동시 제외
tcpdump -nni any \
host 10.38.23.137 \
and not \(port 22 or port 443 \
or port 80 or port 53\)
| 방법 | 가독성 | 성능 | 포트 추가 용이성 | 추천 |
|---|---|---|---|---|
| 개별 and not port | 보통 | 높음 | 불편 | 소수 포트 |
| 괄호 그룹핑 | 높음 | 높음 | 편리 | 다수 포트 |
| src/dst 분리 | 낮음 | 보통 | 불편 | 방향 구분 시 |
05
실무 시나리오별 명령어
웹 서버 모니터링
관리 트래픽을 제외하고 실제 서비스 트래픽만 분석
# FTP, SMTP, DB 연결 등 서비스 트래픽만 캡처
tcpdump -nni eth0 not \(port 22 or port 443 or port 80\)
데이터베이스 서버 분석
MySQL · PostgreSQL · MongoDB 트래픽만 선택적 캡처
# DB 연결만 보이도록
tcpdump -nni any \
\(port 3306 or port 5432 or port 27017\) \
and not \(port 22 or port 443\)
보안 이벤트 분석
비정상 포트 사용 트래픽 탐지
# 일반 서비스 포트 모두 제외 → 비정상 트래픽만 캡처
tcpdump -nni any \
not \(port 22 or port 443 or \
port 80 or port 53 or port 25\) \
-w suspicious.pcap
로드밸런서 환경
헬스체크 및 관리 트래픽 동시 제외
# 실제 서버 트래픽만 (헬스체크 IP도 제외)
tcpdump -nni any \
dst host 10.0.1.100 \
and not \(port 22 or port 443\) \
and not host 10.0.1.1 # LB 헬스체크 제외
06
고급 기법: 프로토콜·크기 조합
# 큰 패킷만 (파일 전송, 데이터 전송 분석)
tcpdump -nni any greater 1000 \
and not port 22 and not port 443
# 작은 패킷만 (명령어, 쿼리 패턴 분석)
tcpdump -nni any less 100 \
and not port 22 and not port 443
# TCP만, 특정 포트 제외
tcpdump -nni any tcp \
and not \(port 22 or port 443\)
# UDP는 전부 허용, TCP는 특정 포트만 제외
tcpdump -nni any \
"udp or (tcp and not port 22 and not port 443)"
# 여러 서브넷 포함, 관리 포트 제외
tcpdump -nni any \
\(net 192.168.1.0/24 or net 10.0.0.0/8\) \
and not port 22 and not port 443
07
성능 최적화 옵션
# 고성능 환경: 버퍼 확장 + 헤더만 캡처
tcpdump -nni any \
-B 4096 # 수신 버퍼 4MB (패킷 드롭 방지)
-s 96 # 패킷당 96바이트만 캡처 (헤더 충분)
and not port 22 and not port 443
# 파일 자동 로테이션 (디스크 풀 방지)
tcpdump -nni any \
-C 100 # 100MB마다 새 파일
-W 10 # 최대 10개 파일 유지
-w traffic_%Y%m%d_%H%M%S.pcap \
and not port 22 and not port 443
# 필터 최적화: net 사용으로 연산 횟수 감소
# ✗ 비효율: 3개 host 조건
tcpdump host 10.1.1.1 or host 10.1.1.2 or host 10.1.1.3
# ✓ 효율: 서브넷 1개 조건
tcpdump net 10.1.1.0/24
| 옵션 | 설명 | 권장값 |
|---|---|---|
| -B <kB> | 커널 수신 버퍼 크기 | 2048–8192 |
| -s <bytes> | 패킷당 캡처 길이 (0 = 전체) | 96 (헤더만) / 0 (전체) |
| -C <MB> | 파일 크기 로테이션 | 50–200 |
| -W <n> | 최대 파일 개수 | 10–24 |
| -G <sec> | 시간 기반 로테이션 | 3600 (1시간) |
08
자주 발생하는 문제와 해결책
🚫 tcpdump: You don't have permission to capture on that device
# 방법 1: sudo 사용
sudo tcpdump -nni any and not port 22
# 방법 2: tcpdump에 캡처 권한 부여 (sudo 없이 실행 가능)
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
🚫 syntax error (괄호 파싱 오류)
# ✗ 잘못됨: 셸이 괄호를 서브셸로 해석
tcpdump -nni any and not (port 22 or port 443)
# ✓ 방법 1: 백슬래시 이스케이프
tcpdump -nni any and not \(port 22 or port 443\)
# ✓ 방법 2: 전체 필터를 따옴표로
tcpdump -nni any "not (port 22 or port 443)"
# ✓ 방법 3: 괄호 없이
tcpdump -nni any not port 22 and not port 443
🚫 인터페이스 not found
# 사용 가능한 인터페이스 목록 확인
tcpdump -D
# 출력 예시
1.eth0 [Up, Running]
2.lo [Up, Running, Loopback]
3.any (모든 인터페이스) [Up, Running]
# 올바른 인터페이스 이름 사용
tcpdump -nni eth0 and not port 22
🧪 단계별 필터 검증 방법
필터 적용 전 -c 10 옵션으로 10개 패킷만 캡처하며 단계적으로 확인하세요. 먼저 기본 연결을 확인하고, 포트 제외를 하나씩 추가합니다.
09
보안 분석 활용
# 1. C&C 의심 포트 탐지
tcpdump -nni any \
\(dst port 6667 or dst port 4444 or dst port 1337\) \
and not src port 22
# 2. 비암호화 프로토콜 탐지 (Telnet, FTP 등)
tcpdump -nni any \
\(port 23 or port 21 or port 514\) \
and not port 22
# 3. 내부 → 외부 대량 데이터 전송 탐지
tcpdump -nni any \
greater 10000 \
src net 192.168.0.0/16 \
and not \(port 22 or port 21 or port 443\)
# 4. 야간 의심 트래픽 캡처 (cron 등록용)
# crontab: 0 2 * * * /usr/local/bin/night_capture.sh
tcpdump -nni any \
not \(port 22 or port 443 or port 80\) \
-G 3600 -W 6 \
-w /var/log/net/night_%Y%m%d_%H.pcap
10
Best Practice 명령어 모음
🥇
일반 네트워크 분석
tcpdump -nni any host TARGET and not port 22 and not port 443
🥈
웹 서버 트러블슈팅
tcpdump -nni any \(port 80 or port 8080\) and not port 22
🥉
보안 분석 (의심 트래픽)
tcpdump -nni any not \(port 22 or 443 or 80 or 53\) -w out.pcap
🏅
고성능 장기 캡처
tcpdump -nni any -B 8192 -s 128 -C 50 -W 20 not port 22 and not port 443 -w cap.pcap
✅ 분석 시작 전 체크리스트
- 대상 호스트·네트워크 IP 정확성 확인
- 권한 확보 (sudo 또는 CAP_NET_RAW 설정)
- 디스크 여유 공간 확인 (최소 분석 시간의 2배 여유)
tcpdump -D로 인터페이스 이름 사전 확인-c 10으로 필터 동작 먼저 검증- 장기 캡처 시 -C, -W 파일 로테이션 설정