📚 네트워크 · 패킷 분석 › 06. 방화벽 · IDS 기초 — 260편
이전 글: 259. Destination IP 정책 · 다음 글: 261. Destination Port 정책
Source Port 정책은 패킷의 출발지 포트를 조건으로 삼는 규칙입니다. 결론부터 말하면, 대부분의 방화벽 정책은 출발지 포트를 any로 둡니다. 클라이언트의 출발지 포트는 운영체제가 연결마다 임시로 고르는 값이어서 예측할 수 없고, 보내는 쪽이 마음대로 정할 수도 있기 때문입니다.
출발지 포트의 개념과 할당 방식은 02 영역 56. Source Port와 55. Dynamic Port에서 다뤘습니다. 이 글은 정책 조건으로서의 출발지 포트와 로그에서 출발지 포트가 주는 정보를 다룹니다.
| 구분 | 출발지 포트 | 목적지 포트 |
|---|---|---|
| 누가 정하는가 | 보내는 쪽(클라이언트 OS 또는 공격자) | 서비스가 열어 둔 포트 |
| 값의 성격 | 임시·가변 | 고정·서비스 식별 |
| 정책 조건으로 | 거의 쓰지 않음 | 핵심 조건 (261. Destination Port 정책) |
| 로그 분석 용도 | 세션·NAT 매핑 식별 | 서비스 식별 |
출발지 포트 기반 허용이 위험한 이유는 Stateless 필터에서 잘 드러납니다(253. Packet Filtering Firewall).
의도: 내부 DNS 조회의 "응답"을 통과시키려고
규칙: 외부 → 내부 UDP sport 53 허용
↓
정상 응답 203.0.113.53:53 → 192.168.10.25:53001 → 허용 (의도대로)
↓
위조 패킷 198.51.100.9:53 → 192.168.10.30:161 → 허용 (의도하지 않음)
↓ 출발지 포트를 53으로 맞추기만 하면
내부의 어떤 UDP 포트에도 도달 가능
Stateful 방화벽에서는 응답을 세션 테이블로 처리하므로 이런 규칙이 필요 없습니다(254. Stateful Firewall). 따라서 출발지 포트로 응답을 허용하는 규칙이 남아 있다면 과거 Stateless 설계의 흔적일 가능성이 높고, 검토 대상입니다.
출발지 포트가 고정되거나 의미를 갖는 예외적인 경우도 있습니다.
| 프로토콜 | 출발지 → 목적지 포트 | 비고 |
|---|---|---|
| DHCP | 클라이언트 68 → 서버 67 | 양쪽 포트 고정 |
| IKE(IPsec) | 500 → 500 (NAT 통과 시 4500) | VPN 장비 간 정책에 사용 |
| NTP | 서버 간 123 → 123인 경우 있음 | 클라이언트는 임시 포트 사용이 일반적 |
| 능동 모드 FTP 데이터 | 서버 20 → 클라이언트 임의 포트 | 서버가 연결을 시작 |
net.ipv4.ip_local_port_range로 확인하며 보통 32768–60999입니다. Windows(Vista 이후)는 기본 49152–65535를 씁니다.로그에서 출발지 포트 패턴을 해석하는 형식 예시입니다(값은 환경마다 다름).
# 형식 예시 — 같은 출발지의 차단 로그
10:31:02 deny tcp 198.51.100.61:40123 → 10.30.0.10:22
10:31:02 deny tcp 198.51.100.61:40123 → 10.30.0.10:23
10:31:02 deny tcp 198.51.100.61:40123 → 10.30.0.10:3389
10:31:03 deny tcp 198.51.100.61:40123 → 10.30.0.10:5900
분석 방법
실습 예시 — Linux의 임시 포트 범위를 확인합니다(Rocky/Ubuntu 공통).
sysctl net.ipv4.ip_local_port_range
관제자가 확인할 질문
| 출발지 포트 패턴 | 해석 |
|---|---|
| 연결마다 다른 임시 포트 | 일반 클라이언트 동작 |
| 고정 포트로 다수 목적지 SYN | 패킷 생성형 스캐너 가능성 |
| 외부 sport 53·123으로 내부 비서비스 포트 도달 | 위조·반사 트래픽, 규칙 우회 |
| 내부 서버의 출발지 포트가 서비스 포트(예: 443) | 서버의 응답 방향 트래픽 |
오탐 주의: 방화벽 로그의 출발지 포트만 보고 "내부 호스트가 443으로 연결을 시작했다"고 오해하기 쉽습니다. 출발지 포트가 서비스 포트라면 대개 서버가 보낸 응답 방향입니다. 방향 판단은 세션 시작 로그로 확인합니다.