📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 186편
이전 글: 185. Stateful Firewall · 다음 글: 187. Firewall Log
Firewall NAT 정책은 방화벽 장비가 "어떤 트래픽의 어떤 주소·포트를 무엇으로 바꿀지"를 정의한 규칙 목록입니다. NAT와 PAT의 기본 개념은 176. NAT·177. PAT에서, NAT가 보안 정책에서 갖는 의미와 포트 포워딩의 위험은 06 영역 268. Firewall NAT·269. Port Forwarding에서 다룹니다. 이 글은 장비에 NAT 규칙을 어떻게 구성하고, 필터 규칙과 어떤 순서로 적용되는지에 집중합니다.
방화벽의 NAT 규칙은 보통 다음 항목으로 구성됩니다.
| 구성 요소 | 의미 | 예(값은 환경마다 다름) |
|---|---|---|
| 적용 인터페이스·구역 | 어느 방향 트래픽에 적용할지 | WAN 인터페이스, outside 구역 |
| 원본 조건(Original) | 변환 전 출발지·목적지·서비스 | 출발지 192.168.10.0/24 |
| 변환 결과(Translated) | 바꿀 주소·포트 | 출발지 → 인터페이스 공인 IP |
| 규칙 순서 | 여러 규칙 중 먼저 일치하는 규칙 적용 | NAT 예외 규칙을 위쪽에 둠 |
NAT 규칙은 연결의 첫 패킷에서 평가되고, 결과는 연결 추적 테이블(conntrack, 세션 테이블)에 저장됩니다. 이후 같은 연결의 패킷과 응답 패킷은 테이블을 보고 자동으로 변환·역변환됩니다(185. Stateful Firewall 참고).
Linux netfilter 기준으로 NAT와 필터 규칙의 처리 순서는 다음과 같습니다.
외부에서 들어온 패킷 (목적지 203.0.113.10:443)
↓ PREROUTING (nat) ── DNAT: 목적지 → 10.10.30.10:443
↓ 라우팅 결정 (변환된 목적지 기준)
↓ FORWARD (filter) ── 허용/차단 판단: 목적지 10.10.30.10 기준으로 비교
↓ POSTROUTING (nat) ── SNAT/MASQUERADE: 필요한 경우 출발지 변환
↓ 출력 인터페이스로 전송
여기서 중요한 점은 필터 규칙이 보는 주소가 NAT 전인지 후인지입니다. netfilter에서는 DNAT이 필터보다 먼저, SNAT이 필터보다 나중에 일어나므로 필터 규칙은 "변환된 목적지 + 변환 전 출발지"를 기준으로 작성합니다. 상용 방화벽은 제품마다 이 기준이 다르므로(변환 전 주소로 정책을 쓰는 제품도 있음) 반드시 해당 제품 문서의 처리 순서를 확인해야 합니다.
방화벽에서 자주 쓰는 NAT 규칙 유형입니다.
| 유형 | 변환 대상 | 대표 용도 | netfilter 대상 |
|---|---|---|---|
| Source NAT(동적, Hide NAT) | 출발지 → 공인 IP(포트도 변환) | 내부 사용자의 인터넷 접속 | SNAT, MASQUERADE |
| Destination NAT(포트 포워딩) | 목적지 공인 IP·포트 → 내부 서버 | DMZ 서버 공개 | DNAT |
| 1:1(Static) NAT | 공인 IP 하나 ↔ 사설 IP 하나 | 서버 전용 공인 IP | SNAT + DNAT 쌍 |
| NAT 예외(No-NAT) | 변환하지 않음 | 사이트 간 VPN 구간 | RETURN/ACCEPT로 NAT 체인 탈출 |
장비별로 NAT 설정 위치가 다릅니다.
| 장비·도구 | NAT 설정 위치 | 특징 |
|---|---|---|
| iptables / nftables | nat 테이블(PREROUTING·POSTROUTING) | 규칙 순서대로 첫 일치 적용 |
| firewalld(Rocky 기본) | 영역(zone)의 masquerade, forward-port | 내부적으로 nftables 규칙 생성 |
| ufw(Ubuntu 기본) | /etc/ufw/before.rules의 *nat 구역 | 명령어로 직접 지원하지 않아 파일 편집 |
| pfSense | Firewall › NAT(Port Forward, 1:1, Outbound) | Outbound 모드: Automatic, Hybrid, Manual, Disable |
실습 예시 — 방화벽 역할 Linux VM(WAN ens33, DMZ ens38, 내부 ens37)에서 NAT 정책을 구성하는 흐름입니다. 인터페이스·IP는 예시(값은 환경마다 다름)이며, 203.0.113.10은 실습망에서 WAN 주소로 가정한 문서용 IP입니다.
# 공통: 라우팅(포워딩) 활성화
sudo sysctl -w net.ipv4.ip_forward=1
# (1) Source NAT: 내부망이 WAN으로 나갈 때 출발지를 WAN 주소로 변환
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens33 -j MASQUERADE
# (2) Destination NAT: WAN 443 → DMZ 웹 서버
sudo iptables -t nat -A PREROUTING -i ens33 -d 203.0.113.10 -p tcp --dport 443 \
-j DNAT --to-destination 10.10.30.10:443
# (3) 필터 규칙은 "변환 후 목적지" 기준으로 허용
sudo iptables -A FORWARD -i ens33 -o ens38 -d 10.10.30.10 -p tcp --dport 443 \
-m conntrack --ctstate NEW -j ACCEPT
# 확인
sudo iptables -t nat -L -n -v --line-numbers
Rocky에서 firewalld를 쓰는 경우 같은 의도를 영역 설정으로 표현합니다.
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --zone=external --permanent \
--add-forward-port=port=443:proto=tcp:toport=443:toaddr=10.10.30.10
sudo firewall-cmd --reload
변환 기록은 연결 추적 테이블에서 확인합니다(Rocky conntrack-tools, Ubuntu conntrack 패키지).
# 형식 예시 (값은 환경마다 다름)
$ sudo conntrack -L -p tcp --dport 443
tcp 6 431999 ESTABLISHED src=198.51.100.7 dst=203.0.113.10 sport=51514 dport=443 src=10.10.30.10 dst=198.51.100.7 sport=443 dport=51514 [ASSURED] mark=0 use=1
앞쪽 src/dst는 원래 방향, 뒤쪽은 응답 방향입니다. 응답의 출발지가 10.10.30.10이라는 것은 목적지가 DMZ 서버로 변환되었다는 뜻입니다.
📷 [실습 화면 삽입 위치]
iptables -t nat -L -n -v출력에서 DNAT 규칙의 패킷 카운터가 증가한 화면과, 같은 시각conntrack -L결과에서 원래 방향·응답 방향 주소가 다르게 보이는 화면
NAT 지점 앞뒤로 로그에 기록되는 IP가 달라집니다. 외부 서버나 위협 인텔리전스가 알려 준 IP는 변환 후 공인 IP이므로, 실제 내부 단말을 찾으려면 NAT 변환 기록이 필요합니다.
외부 기관 통보: 203.0.113.1:40001 → 198.51.100.50:443, 10:15:32
↓ 방화벽 NAT(PAT) 로그 검색: 시각 + 변환 후 포트 40001
↓ 변환 전 주소 확인: 192.168.10.5:51514
↓ DHCP·인증 로그로 해당 시각 192.168.10.5 사용자 확인
변환 기록을 남기는 방식은 장비마다 다릅니다. 상용 방화벽은 변환 생성 이벤트를 별도 로그로 남기기도 합니다(형식 예시: Cisco ASA %ASA-6-305011: Built dynamic TCP translation from inside:192.168.10.5/51514 to outside:203.0.113.1/40001). Linux는 conntrack 이벤트(conntrack -E)를 기록하도록 따로 구성해야 합니다.
관제자가 확인할 질문
오탐 주의: PAT 환경에서 IP만으로 단말을 특정하면 다른 사용자를 지목할 수 있습니다. 로그 필드 해석은 06 영역 272. Firewall Log 구조에서 다룹니다.