📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 95편
이전 글: 94. Port Scan · 다음 글: 96. IDS Alert의 Port
방화벽 로그는 관제에서 가장 많이 보는 로그 중 하나이며, 거의 모든 줄에 프로토콜·출발지 포트·목적지 포트가 들어 있습니다. 그런데 제품마다 필드 이름과 위치가 달라서, "포트가 어디에 있고 그 값이 무엇을 뜻하는지"를 먼저 알아야 로그를 읽을 수 있습니다.
이 글은 방화벽 로그에서 포트 필드를 찾고 해석하는 방법만 다룹니다. 방화벽 로그 전체 구조와 정책 분석은 06. 방화벽 · IDS 기초 영역 272. Firewall Log 구조, 273. Firewall Log 분석에서 다룹니다.
| 로그 원천 | 출발지 포트 필드 | 목적지 포트 필드 | 프로토콜 필드 |
|---|---|---|---|
| Linux netfilter LOG (iptables/nftables, ufw, firewalld) | SPT= | DPT= | PROTO= |
Windows Defender 방화벽 pfirewall.log | src-port | dst-port | protocol |
| 상용·오픈소스 방화벽(SIEM 정규화 후) | 예: src_port, sport | 예: dst_port, dport | 예: proto, service |
방화벽이 포트 값을 기록하는 과정은 다음과 같습니다.
패킷 도착 (IP 헤더 → Protocol 필드 확인)
↓
TCP/UDP이면 L4 헤더에서 Source Port, Destination Port 추출
ICMP이면 포트 대신 Type/Code 추출
↓
규칙 비교 (프로토콜 + IP + 포트)
↓
로그 규칙에 해당하면 기록: 동작(허용/차단) + 5-tuple + 부가 정보(Flag, 길이, 인터페이스)
↓
(NAT 장비) 변환 전 포트 / 변환 후 포트를 따로 기록하기도 함
TYPE=, CODE=를, Windows 로그는 icmptype, icmpcode를 기록하고 포트 칸은 비거나 -입니다.로그 형식별 포트 관련 필드와 해석 포인트입니다.
| 형식 | 포트와 함께 보면 좋은 필드 | 해석 포인트 |
|---|---|---|
| netfilter LOG | IN=/OUT=, SYN, ACK 등 Flag 문자열, LEN=, TTL= | IN=만 있으면 수신, OUT=만 있으면 송신, 둘 다 있으면 통과(포워딩) 패킷 |
| ufw | 앞부분 [UFW BLOCK]/[UFW ALLOW]/[UFW AUDIT] | 기본 설정에서는 차단 위주로 기록 |
| firewalld | 로그 접두어(존·동작 포함, 버전에 따라 형식 다름) | --set-log-denied 설정에 따라 기록 범위 결정 |
Windows pfirewall.log | action, path(SEND/RECEIVE), tcpflags, size | 로깅은 기본 꺼짐, 프로필별로 성공·차단 기록을 켜야 함. 최신 버전은 pid 필드 추가 |
포트 값을 읽을 때 자주 틀리는 부분을 정리합니다.
| 상황 | 흔한 착오 | 올바른 해석 |
|---|---|---|
차단 로그 SPT=443 DPT=51000 | 443 포트로 공격 | 서버 응답이 차단됨(상태 테이블에 없는 늦은 응답, 비대칭 경로 등) |
DPT= 없음 | 로그 누락 | ICMP 등 포트 없는 프로토콜 |
| 허용 로그인데 서비스 없음 | 서비스가 동작 중 | 방화벽은 허용했지만 서버가 RST로 거부했을 수 있음 → 세션 바이트 확인 |
| NAT 방화벽의 목적지 포트 | 내부 서버 포트 | 포트 포워딩 전(외부) 포트일 수 있음 → 변환 후 필드 확인 |
| 같은 연결이 여러 줄 | 여러 번의 공격 | 세션 시작·종료 로그를 따로 남기는 장비의 동작 |
실습 예시 — 본인 실습 VM에서 차단 로그를 켜고, 다른 VM에서 닫힌 포트로 접속을 시도한 뒤 포트 필드를 확인합니다.
# Ubuntu (ufw)
sudo ufw logging on
sudo tail -f /var/log/ufw.log
# Rocky Linux (firewalld)
sudo firewall-cmd --set-log-denied=all
sudo journalctl -k -f | grep -E 'REJECT|DROP'
# 다른 VM에서: 허용되지 않은 포트로 연결 시도 (예: 23)
nc -zv -w 2 192.168.10.20 23
ufw 차단 로그 형식 예시(값은 환경마다 다름, 한 줄을 보기 좋게 나눔):
Sep 30 10:15:02 ubuntu kernel: [UFW BLOCK] IN=ens33 OUT= MAC=...
SRC=192.168.10.10 DST=192.168.10.20 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=31000 DF
PROTO=TCP SPT=51022 DPT=23 WINDOW=64240 RES=0x00 SYN URGP=0
Windows 방화벽 로그 형식 예시(값은 환경마다 다름, 헤더의 필드 순서 기준):
#Fields: date time action protocol src-ip dst-ip src-port dst-port size tcpflags tcpsyn tcpack tcpwin icmptype icmpcode info path
2026-09-30 10:16:40 DROP TCP 192.168.10.10 192.168.10.30 51030 3389 52 S 1234567 0 64240 - - - RECEIVE
2026-09-30 10:16:41 DROP ICMP 192.168.10.10 192.168.10.30 - - 60 - - - - 8 0 - RECEIVE
| 줄 | 포트 관련 해석 |
|---|---|
| ufw | IN=ens33, OUT= 비어 있음 → 수신. PROTO=TCP SPT=51022 DPT=23, SYN → 23번으로의 연결 시작 패킷 차단 |
| Windows 1행 | 출발지 51030(임시 포트) → 목적지 3389, Flag S, RECEIVE → 인바운드 RDP 연결 시도 차단 |
| Windows 2행 | ICMP라 포트 칸이 -, icmptype 8은 Echo Request |
집계할 때는 목적지 포트 기준으로 먼저 묶습니다.
# 차단된 목적지 포트 상위 (ufw 예)
grep -o 'PROTO=[A-Z]* SPT=[0-9]* DPT=[0-9]*' /var/log/ufw.log |
awk '{print $1, $3}' | sort | uniq -c | sort -rn | head
관제자가 확인할 질문
| 오탐·혼동 원인 | 확인 방법 |
|---|---|
| 세션 만료 후 늦게 도착한 응답(차단 로그에 서비스 포트가 출발지로) | SPT가 서비스 포트, Flag가 ACK·FIN 등 |
| 비대칭 라우팅 | 같은 세션의 반대 방향 로그가 다른 장비에 있음 |
| 멀티캐스트·브로드캐스트 차단 | 목적지가 224.0.0.x, 255.255.255.255, 서브넷 브로드캐스트 |
| 방화벽 로그의 서비스 이름 | 포트 번호 기반 표기이므로 실제 프로토콜은 IDS·패킷으로 확인 |
방화벽 로그를 Alert·패킷과 연계하는 방법은 06 영역 296. Alert와 Firewall Log 연계에서 다룹니다.
SPT=/DPT=, Windows src-port/dst-port처럼 원천마다 이름이 다릅니다.