📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 91편
이전 글: 90. 정상 포트로 위장한 통신 — 443을 쓰는 비정상 트래픽 · 다음 글: 92. Port + Protocol 분석
로그 한 줄에서 가장 먼저 읽는 것은 보통 출발지(Source) 입니다. 출발지 IP는 "누가"를, 출발지 포트는 "그 주체가 연결을 어떤 방식으로 만들었는가"를 알려 줍니다. 두 값을 따로 보면 놓치는 정보가 함께 보면 드러납니다.
출발지·목적지 포트의 기본 개념은 57. Destination Port에서 다뤘으므로, 이 글은 분석 관점에만 집중합니다.
| 값 | 알려 주는 것 | 한계 |
|---|---|---|
| 출발지 IP | 연결을 시작한 호스트(또는 NAT 장비), 위치(내부·외부·구간) | 위조·NAT·프록시로 실제 주체와 다를 수 있음 |
| 출발지 포트 | 클라이언트인지 서버 응답인지, OS 특성, 연결 순서 | 단독으로는 의미가 약함 |
| 둘의 조합 | 한 호스트 안의 개별 연결(소켓) 식별 | 시간 범위를 함께 봐야 함 |
클라이언트가 연결을 만들 때 OS는 임시(Ephemeral) 포트를 골라 출발지 포트로 씁니다. 이 선택 방식이 OS마다 달라, 출발지 포트 범위가 출발지 IP의 성격을 확인하는 보조 단서가 됩니다.
이벤트: 203.0.113.50:51734 → 192.168.10.20:22
↓
① 출발지 IP 분류: 사설? 공인? 어느 구간? 자산 대장에 있는가?
↓
② 출발지 포트 분류:
├─ 1024 이상 임시 범위 → 클라이언트가 시작한 연결 (일반적)
├─ 서비스 포트(53, 80, 123 등) → 서버의 응답이거나 특수한 경우
└─ 고정값 반복 → 도구·설정에 의한 연결 가능성
↓
③ 같은 출발지 IP의 다른 이벤트: 포트가 어떻게 변하는가? (증가·고정·무작위)
↓
④ NAT 여부: 이 IP가 실제 호스트인가, 여러 사용자를 대표하는 장비인가?
대표적인 OS별 기본 임시 포트 범위는 다음과 같습니다(55. Dynamic Port 참고).
| OS | 기본 범위 | 확인 명령 |
|---|---|---|
| Linux | 32768~60999 | sysctl net.ipv4.ip_local_port_range |
| Windows (Vista 이후) | 49152~65535 | netsh int ipv4 show dynamicport tcp |
| macOS | 49152~65535 | sysctl net.inet.ip.portrange.first |
출발지 포트 패턴별 해석입니다.
| 출발지 포트 패턴 | 가능한 해석 | 추가 확인 |
|---|---|---|
| 임시 범위, 연결마다 바뀜 | 일반 클라이언트 연결 | 출발지 IP 평판·자산 |
| 서비스 포트(예: 80, 443)에서 출발 | 서버의 응답 패킷(방향 해석 주의) | 앞선 요청 패킷이 있었는가 |
| 53 → 53, 123 → 123 | DNS 서버 간 질의, NTP 대칭 모드 등 일부 프로토콜의 정상 동작 | 출발지가 DNS·NTP 서버인가 |
| 67 → 68 | DHCP 서버 응답 | 인가된 DHCP 서버인가 |
| 고정된 비임시 포트가 여러 목적지에 반복 | 도구나 특수 설정이 만든 패킷 가능성 | 목적지 포트 분포, 응답 여부 |
| 같은 출발지에서 포트가 1씩 증가 | 짧은 시간에 연속으로 새 연결 생성 | 연결 수·목적지 수 |
| 출발지 포트 0 | 정상 TCP/UDP 통신에서는 쓰이지 않음. 조작된 패킷이나 조각화 패킷 해석 문제 | 원본 패킷 확인 |
출발지 IP 쪽에서는 "이 IP가 무엇을 대표하는가" 를 먼저 정합니다.
| 출발지 IP 유형 | 의미 | 주의 |
|---|---|---|
| 내부 사용자 PC 대역 | 개별 사용자 | DHCP로 시간에 따라 다른 PC일 수 있음 → DHCP 로그 확인 |
| 내부 서버 대역 | 특정 서버 | 서버가 먼저 연결을 시작하는 것이 정상인지 |
| 방화벽·프록시·로드밸런서 IP | 여러 사용자를 대표 | 원래 출발지는 장비 로그나 X-Forwarded-For 같은 헤더에 |
| 외부 공인 IP | 인터넷 사용자·서비스 | 평판 조회, 클라우드·VPN·Tor 대역 여부 |
| 사설 IP가 외부 인터페이스로 유입 | 위조 또는 라우팅 설정 오류 | 들어온 인터페이스 확인 |
실습 예시 — 본인 실습망 서버에서 들어온 연결의 출발지 IP와 출발지 포트를 함께 보고, Linux 임시 포트 범위를 확인합니다(Rocky/Ubuntu 공통).
# 임시 포트 범위
sysctl net.ipv4.ip_local_port_range
# 22번으로 들어온 연결의 출발지 IP:포트
ss -Htn state established '( sport = :22 )' | awk '{print $4}'
# 방화벽 로그(ufw 예)에서 출발지 IP별 출발지 포트 최솟값·최댓값·건수
grep -o 'SRC=[^ ]*.*SPT=[0-9]*' /var/log/ufw.log |
awk '{ip=$1; sub("SRC=","",ip); n=split($NF,a,"="); p=a[n]+0;
c[ip]++; if(!(ip in mn)||p<mn[ip])mn[ip]=p; if(p>mx[ip])mx[ip]=p}
END{for(i in c) print c[i], i, mn[i]"-"mx[i]}' | sort -rn | head
Rocky Linux에서 firewalld 차단 로그는 /var/log/ufw.log가 아니라 커널 로그(journalctl -k, /var/log/messages)에 남으며, firewall-cmd --set-log-denied=all처럼 로깅을 켜야 기록됩니다.
출력 형식 예시(값은 환경마다 다름):
38 203.0.113.50 40000-40000
5 198.51.100.7 49812-61230
2 10.10.99.5 33120-58811
| 출발지 | 해석 |
|---|---|
| 203.0.113.50, 38건 모두 포트 40000 | 연결마다 같은 출발지 포트 → 일반 OS 동작과 다름. 목적지 포트가 다양한지 확인(95. Firewall Log의 Port) |
| 198.51.100.7, 49812~61230 | Windows·macOS 계열 범위와 일치하는 일반 클라이언트 모습 |
| 10.10.99.5, 33120~58811 | Linux 기본 범위와 일치. 관리망 배스천이면 기준선 안 |
출발지 포트 범위로 OS를 추정할 수는 있지만 설정 변경, NAT(PAT)의 포트 변환 때문에 확정 근거로 쓰지 않습니다.
| 흔적 위치 | 출발지 분석에 쓰는 값 |
|---|---|
| 방화벽 로그 | 원본·변환 후 출발지 IP·포트, 인터페이스 |
| 웹·프록시 로그 | 클라이언트 IP, X-Forwarded-For |
| DHCP·VPN 로그 | 시간대별 IP ↔ 호스트·사용자 매핑 |
| IDS Alert | src_ip, src_port (방향은 트리거 패킷 기준) |
관제자가 확인할 질문
오탐 주의: 서버 응답 패킷만 보고 "출발지 포트 443에서 공격"이라고 읽는 방향 착오가 흔합니다. 또 NAT 공인 IP나 프록시 IP는 많은 사용자를 대표하므로 이 IP를 바로 차단하면 정상 사용자까지 막을 수 있습니다. 출발지 IP 자체의 심화 분석은 05. 네트워크 스캔 징후 분석 영역 240. Source IP 분석에서 다룹니다.