📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 177편
이전 글: 176. NAT · 다음 글: 178. ACL

1. 개념

PAT(Port Address Translation) 는 여러 내부 호스트의 출발지 주소를 공인 IP 하나로 바꾸면서, 각 연결을 출발지 포트로 구분하는 방식입니다. Cisco 계열에서는 NAT Overload, RFC 문서와 Linux 쪽에서는 NAPT, Linux의 동적 형태는 MASQUERADE라는 이름으로 불립니다. 원리와 역추적 절차는 49. 사설 IP · 공인 IP와 NAT — 로그의 IP가 서로 다른 이유에서 다뤘으므로, 이 글은 장비 설정과 운영에 집중합니다.

항목Static / Dynamic NAT (176. NAT)PAT
필요한 공인 IP 수내부 호스트 수만큼(동시 사용 기준)1개로 가능
연결 구분 기준IPIP + 포트(ICMP는 Query ID)
외부에서 먼저 연결Static은 가능불가 (포트 포워딩 설정이 있어야 함)
주 용도서버 공개, 주소 풀 운영사용자망의 인터넷 사용

2. 동작 원리

사용자 PC 두 대가 같은 외부 서버에 접속할 때 PAT 장비의 처리입니다.

PC-A 192.168.10.11:51514 ─┐                           ┌→ 198.51.100.20:443
PC-B 192.168.10.12:51514 ─┤→ [PAT 라우터 203.0.113.2] ─┤
                          │   변환 테이블               │
                          │   .11:51514 ⇄ 203.0.113.2:51514
                          │   .12:51514 ⇄ 203.0.113.2:1024  ← 포트 충돌 → 다른 포트 할당
                          ↓
응답 dst 203.0.113.2:1024 → 테이블 조회 → 192.168.10.12:51514 로 역변환
  • Cisco IOS 계열은 가능하면 원래 출발지 포트를 유지하고, 이미 사용 중이면 같은 범위의 다른 포트를 할당하는 방식으로 동작합니다(버전·설정에 따라 다름). 그래서 변환 전후 포트가 같아 보이는 항목도 많습니다.
  • 한 공인 IP의 포트 번호는 프로토콜(TCP·UDP)별로 최대 65,535개이므로, 동시 연결이 매우 많으면 포트가 소진될 수 있습니다. 이때는 PAT 풀(공인 IP 여러 개 + overload)을 씁니다.
  • 변환 항목은 연결이 끝나거나 타임아웃이 지나면 삭제되고, 해당 포트는 다른 호스트에 재사용됩니다.

3. 주요 특징

변환 항목이 유지되는 시간은 장비마다 다르며 로그 대조에 직접 영향을 줍니다.

구분Cisco IOS 계열 기본값(버전별 확인)Linux conntrack 확인 방법
TCP 연결86400초 (ip nat translation tcp-timeout)sysctl net.netfilter.nf_conntrack_tcp_timeout_established
TCP FIN/RST 후60초 (finrst-timeout)..._tcp_timeout_close_wait 등 상태별 값
UDP300초 (udp-timeout)sysctl net.netfilter.nf_conntrack_udp_timeout
DNS60초 (dns-timeout)UDP 값 적용
ICMP60초 (icmp-timeout)sysctl net.netfilter.nf_conntrack_icmp_timeout
  • 같은 공인 IP·포트가 시간을 두고 다른 내부 호스트에 재사용됩니다. 그래서 역추적에는 반드시 정확한 시각이 필요합니다.
  • PAT 뒤의 호스트는 외부에서 직접 접근할 수 없으므로, 외부 → 내부 서비스 공개는 포트 포워딩(DNAT)으로 따로 구성합니다(269. Port Forwarding).
  • Linux MASQUERADE는 나가는 인터페이스의 현재 주소를 자동으로 쓰며, 인터페이스가 내려가면 관련 conntrack 항목을 정리합니다. 주소가 고정이면 SNAT(snat to)가 권장됩니다.

4. 예시

실습 예시 — GNS3 등의 Cisco IOS 계열 경계 라우터 설정입니다. Gi0/0이 외부(203.0.113.2), Gi0/1이 사용자망(192.168.10.1)이며 값은 예시(값은 환경마다 다름)입니다.

interface GigabitEthernet0/0
 ip nat outside
interface GigabitEthernet0/1
 ip nat inside

access-list 1 permit 192.168.10.0 0.0.0.255
ip nat inside source list 1 interface GigabitEthernet0/0 overload

출력 형식 예시입니다.

R1# show ip nat translations
Pro Inside global       Inside local          Outside local        Outside global
tcp 203.0.113.2:51514   192.168.10.11:51514   198.51.100.20:443    198.51.100.20:443
tcp 203.0.113.2:1024    192.168.10.12:51514   198.51.100.20:443    198.51.100.20:443
udp 203.0.113.2:40211   192.168.10.11:40211   198.51.100.53:53     198.51.100.53:53

실습 예시 — Linux 게이트웨이 VM에서 같은 기능을 구성합니다(ens33이 외부, ip_forward=1 가정, 런타임 설정).

# nftables (Rocky/Ubuntu 공통)
sudo nft add table ip nat
sudo nft 'add chain ip nat postrouting { type nat hook postrouting priority 100 ; }'
sudo nft add rule ip nat postrouting oifname "ens33" ip saddr 192.168.10.0/24 masquerade

# iptables 방식으로 쓰는 경우의 같은 의미
# sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens33 -j MASQUERADE

# Rocky: firewalld로 구성 (외부 인터페이스가 속한 zone에 적용)
sudo firewall-cmd --zone=external --change-interface=ens33 --permanent
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload

external zone은 firewalld 기본 zone 중 masquerade가 이미 켜져 있는 zone입니다. 변환 결과는 sudo conntrack -L -s 192.168.10.0/24의 reply 튜플에서 공인 IP·변환 포트로 확인합니다.

📷 [실습 화면 삽입 위치] 내부 VM 두 대가 같은 외부 주소로 접속한 뒤 게이트웨이의 conntrack 결과에서 두 연결의 reply 목적지 포트가 서로 다르게 할당된 부분을 표시한 화면


5. 보안 관점

  • PAT는 인바운드 연결을 자연스럽게 막지만 방화벽은 아닙니다. 내부 호스트가 먼저 연결한 세션의 응답은 들어오므로, 악성코드의 외부 통신(C2)은 PAT를 그대로 통과합니다. 아웃바운드 통제는 183. Outbound 정책에서 다룹니다.
  • 포트 소진은 가용성 문제입니다. 내부 감염 호스트의 대량 연결(스캔, 웜 전파 시도 등)이 공인 포트를 소진하면 다른 사용자까지 인터넷 사용이 실패할 수 있습니다.
  • 외부 서비스가 공인 IP 기준으로 차단하면 같은 PAT 뒤의 모든 사용자가 영향을 받습니다. 사용자망과 서버망의 PAT 공인 IP를 분리하면 영향 범위와 추적이 명확해집니다.

6. SOC 관점

흔적확인할 수 있는 것
방화벽·라우터 NAT 로그시각 + 공인 IP:포트 ↔ 내부 IP:포트
변환 테이블 크기, 포트 사용률한 내부 호스트의 과도한 연결 수
외부 기관 통보(공인 IP, 포트, 시각)역추적 시작점

관제자가 확인할 질문

  • 외부 통보에 출발지 포트와 정확한 시각(시간대 포함) 이 있는가? 없으면 후보가 여러 개일 수 있습니다.
  • 변환 항목이 많은 내부 호스트가 있다면, 그 목적지가 다양한가(스캔 성격) 한 곳에 집중되는가?
  • NAT 로그를 남기는 장비의 시간은 NTP로 동기화되어 있는가?

오탐 주의: 브라우저·업데이트 프로그램은 정상적으로도 동시 연결을 많이 만듭니다. 변환 항목 수만으로 판단하지 말고 목적지 분포와 연결 결과를 함께 봅니다. PAT 환경의 Firewall NAT 정책은 186. Firewall NAT 정책에서 이어집니다.


7. 핵심 정리

  • PAT는 공인 IP 하나를 여러 내부 호스트가 쓰도록 IP와 포트를 함께 변환하며, Cisco에서는 overload로 설정합니다.
  • ip nat inside source list 1 interface g0/0 overload에서 ACL 1은 변환 대상 출발지를 고르는 용도입니다.
  • 공인 포트는 타임아웃 후 재사용되므로 역추적에는 정확한 시각과 포트가 필요합니다.
  • Linux에서는 nftables masquerade, iptables MASQUERADE, firewalld --add-masquerade로 구성합니다.
  • PAT는 방화벽이 아니며, 포트 소진은 내부 대량 연결의 징후이자 가용성 문제입니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글