📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 186편
이전 글: 185. Stateful Firewall · 다음 글: 187. Firewall Log

1. 개념

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 예외 규칙을 위쪽에 둠

2. 동작 원리

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이 필터보다 나중에 일어나므로 필터 규칙은 "변환된 목적지 + 변환 전 출발지"를 기준으로 작성합니다. 상용 방화벽은 제품마다 이 기준이 다르므로(변환 전 주소로 정책을 쓰는 제품도 있음) 반드시 해당 제품 문서의 처리 순서를 확인해야 합니다.


3. 주요 특징

방화벽에서 자주 쓰는 NAT 규칙 유형입니다.

유형변환 대상대표 용도netfilter 대상
Source NAT(동적, Hide NAT)출발지 → 공인 IP(포트도 변환)내부 사용자의 인터넷 접속SNAT, MASQUERADE
Destination NAT(포트 포워딩)목적지 공인 IP·포트 → 내부 서버DMZ 서버 공개DNAT
1:1(Static) NAT공인 IP 하나 ↔ 사설 IP 하나서버 전용 공인 IPSNAT + DNAT 쌍
NAT 예외(No-NAT)변환하지 않음사이트 간 VPN 구간RETURN/ACCEPT로 NAT 체인 탈출

장비별로 NAT 설정 위치가 다릅니다.

장비·도구NAT 설정 위치특징
iptables / nftablesnat 테이블(PREROUTING·POSTROUTING)규칙 순서대로 첫 일치 적용
firewalld(Rocky 기본)영역(zone)의 masquerade, forward-port내부적으로 nftables 규칙 생성
ufw(Ubuntu 기본)/etc/ufw/before.rules의 *nat 구역명령어로 직접 지원하지 않아 파일 편집
pfSenseFirewall › NAT(Port Forward, 1:1, Outbound)Outbound 모드: Automatic, Hybrid, Manual, Disable

4. 예시

실습 예시 — 방화벽 역할 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 결과에서 원래 방향·응답 방향 주소가 다르게 보이는 화면


5. 보안 관점

  • NAT는 차단 장치가 아닙니다. DNAT 규칙을 만드는 순간 내부 서비스가 외부에 노출되며, 실제 허용 여부는 필터 규칙이 결정합니다. pfSense의 포트 포워딩은 연결된 필터 규칙(Filter rule association)을 함께 만들 수 있어 NAT와 필터를 한 쌍으로 관리해야 합니다.
  • 사용하지 않는 포트 포워딩, 임시로 만든 1:1 NAT는 대표적인 노출 경로입니다. NAT 규칙도 필터 규칙처럼 정기 검토 대상입니다.
  • NAT 예외 규칙이 너무 넓으면(예: 내부 전체 대역) 의도하지 않은 구간이 변환 없이 라우팅될 수 있습니다.
  • 내부 사용자가 공인 IP로 내부 서버에 접속하는 NAT 반사(Hairpin NAT) 는 출발지·목적지 해석을 복잡하게 만들어 로그 분석 시 혼동을 줍니다.

6. SOC 관점

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)를 기록하도록 따로 구성해야 합니다.

관제자가 확인할 질문

  • 지금 보고 있는 로그의 IP는 NAT 전인가, 후인가?
  • PAT 환경에서 공인 IP 하나를 여러 단말이 공유했다면, 시각과 변환 후 포트까지 일치하는 기록을 찾았는가?
  • 방화벽 장비와 로그 서버의 시각이 동기화되어 있는가(몇 초 차이로 다른 사용자가 매칭될 수 있음)?

오탐 주의: PAT 환경에서 IP만으로 단말을 특정하면 다른 사용자를 지목할 수 있습니다. 로그 필드 해석은 06 영역 272. Firewall Log 구조에서 다룹니다.


7. 핵심 정리

  • Firewall NAT 정책은 인터페이스·원본 조건·변환 결과·순서로 구성된 규칙 목록입니다.
  • NAT는 연결의 첫 패킷에서 평가되고 결과는 연결 추적 테이블에 저장됩니다.
  • netfilter에서는 DNAT → 필터 → SNAT 순서이므로 필터 규칙은 변환 후 목적지 기준으로 작성하며, 상용 장비는 제품별 순서를 확인해야 합니다.
  • Source NAT, Destination NAT, 1:1 NAT, NAT 예외를 구분하고 NAT와 필터 규칙을 한 쌍으로 관리합니다.
  • 관제에서는 NAT 변환 기록(시각·포트 포함)이 있어야 공인 IP를 내부 단말로 역추적할 수 있습니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글