pfSense의 NAT, Port Forwarding

1. 들어가기 전에 — NAT란 무엇인가

1-1. NAT의 기본 개념

NAT(Network Address Translation, 네트워크 주소 변환) 은 한 네트워크의 IP 주소를 다른 네트워크의 IP 주소로 변환해 주는 기술입니다. 가장 흔한 사용 예시는 다음과 같습니다.

  • 사내 사설 IP(192.168.1.10) → 공인 IP(203.0.113.5)로 변환 → 인터넷 접속
  • 외부에서 공인 IP(203.0.113.5:443) 접속 → 내부 사설 IP(192.168.1.10:443)로 전달

1-2. NAT는 왜 필요한가?

  1. IPv4 주소 부족 — 전 세계가 사용하기에 IPv4 주소(약 43억 개)가 모자라기 때문에, 사설 IP를 NAT로 공유합니다.
  2. 보안 — 내부 IP가 외부에 노출되지 않아 직접 공격이 어렵습니다.
  3. 유연성 — 내부 네트워크 구조를 외부와 독립적으로 운영할 수 있습니다.

1-3. ⚠️ 매우 중요: NAT는 IPv4 전용

NAT는 IPv4에만 존재하며, IPv6에는 없습니다.
IPv6는 주소 공간이 매우 넓어(약 340간 개) 모든 장치에 공인 주소를 부여할 수 있기 때문입니다.
따라서 본 포스팅의 모든 내용은 IPv4 전제입니다.


2. pfSense의 NAT 종류 한눈에 보기

pfSense는 4가지 종류의 NAT를 지원합니다. 본 강의는 Port Forward를 다룹니다.

종류방향용도
Port Forward외부 → 내부외부에서 내부 서버 접근 (웹/메일/원격 등)
1:1양방향공인 IP 1개 ↔ 사설 IP 1개 완전 매핑
Outbound내부 → 외부내부 네트워크가 외부 나갈 때 출발 IP 변환 (기본 자동)
NPtIPv6 ↔ IPv6IPv6 프리픽스 변환 (NAT 아니지만 유사)

3. pfSense의 기본 트래픽 정책

pfSense를 처음 설치하면 다음과 같이 동작합니다.

방향기본 동작
LAN → WAN (내부 → 외부)모두 허용 (Default Allow)
WAN → LAN (외부 → 내부)모두 차단 (Default Block)
LAN → pfSense 자체 (관리)✅ 허용
WAN → pfSense 자체❌ 차단

즉, 외부에서 내부로 무엇이든 접근하려면 반드시 명시적으로 규칙을 만들어야 합니다.
Port Forward가 바로 이 역할을 합니다.


4. Port Forward의 동작 원리

4-1. 개념 흐름도

[외부 사용자]

    │ "203.0.113.5:443으로 접속"

┌──────────────────────────────────┐
│  pfSense WAN 인터페이스          │
│  공인 IP: 203.0.113.5            │
└──────────────┬───────────────────┘

               │ ① NAT 규칙: 443 → 192.168.1.10:443
               │ ② 방화벽 규칙: 허용

┌──────────────────────────────────┐
│  내부 서버                        │
│  사설 IP: 192.168.1.10:443       │
└──────────────────────────────────┘

4-2. 핵심 포인트

Port Forward 규칙 1개를 만들면 두 가지가 동시에 생성됩니다.

  1. NAT 규칙: 목적지 주소/포트를 내부 IP로 변환
  2. 방화벽 규칙(Filter Rule): 해당 트래픽을 통과시키도록 허용

⚠️NAT 규칙만 있고 방화벽 규칙이 없으면 트래픽은 통과하지 못합니다.
실제 트래픽 통과 여부를 결정하는 것은 방화벽 규칙입니다.


5. Port Forward 규칙 생성

5-1. 설정 경로

Firewall  →  NAT  →  Port Forward 탭  →  Add (▲ 위 / ▼ 아래)

▲(위에 추가)▼(아래에 추가) 버튼이 있는데, 규칙은 위에서 아래로 평가됩니다. 충돌하는 규칙이 있을 때는 더 구체적인 규칙을 위쪽에 두는 것이 좋습니다.

5-2. 각 필드 상세 설명

① Disabled

  • 체크 시 규칙을 비활성화 (삭제하지 않고 잠시 끌 때 유용)

② No RDR (NOT)

  • 일치하는 트래픽에 대해 NAT를 적용하지 않음
  • 매우 특수한 경우에만 사용 (일반적으로 체크 안 함)

③ Interface

  • NAT를 적용할 인터페이스
  • 외부에서 들어오는 트래픽을 처리하므로 일반적으로 WAN 선택

④ Address Family

  • IPv4, IPv6, IPv4+IPv6 중 선택
  • NAT는 IPv4 전용이므로 보통 IPv4 선택

⑤ Protocol

  • 트래픽의 프로토콜 지정. 강의에서 언급된 주요 항목:
프로토콜사용 예
TCP웹(HTTP/HTTPS), SSH, FTP 등 대부분의 서비스
UDPDNS, VoIP, SIP, 게임 서버
TCP/UDP둘 다 사용하는 경우 (예: DNS)
ICMPping (정확히는 ICMP Echo Request)

💡”대부분의 서비스는 TCP를 쓰지만, VoIP/SIP는 UDP, ping은 ICMP를 쓴다.”

⑥ Source (출발지)

  • 기본적으로 숨겨져 있으며 any (어디서든 오는 요청 허용)
  • 펼쳐서 특정 IP/네트워크로 제한 가능
  • 보안 강화: 특정 본사 IP만 허용하는 식으로 활용

⑦ Destination (목적지)

  • 이 규칙이 가장 중요한 필드
  • 일반적으로 WAN address (pfSense의 공인 IP) 선택
  • 옵션:
    • WAN address: pfSense가 받은 공인 IP로 들어오는 요청
    • Single host or alias: 특정 IP 하나
    • Network: 특정 대역
    • any: 아무 곳으로 가는 트래픽 (❌ 권장 안 함)

⚠️ Destination을 any로 두면 규칙이 너무 헐겁게 적용되어 보안 위험이 커집니다.

⑧ Destination port range (목적지 포트 범위)

  • 외부에서 접근할 포트 지정
  • From port ~ To port 형식 (단일 포트면 둘이 같은 값)
  • 미리 정의된 포트 목록 사용 가능: HTTP(80), HTTPS(443), SSH(22), DNS(53) 등
  • 사용자 정의 포트도 입력 가능

⑨ Redirect target IP (내부 대상 IP)

  • 트래픽을 전달할 내부 호스트의 IP 주소
  • 예: 사내 웹서버 192.168.1.10
  • Alias로 등록해 두면 관리가 편함

⑩ Redirect target port (내부 대상 포트)

  • 내부 호스트의 포트
  • 일반적으로 외부 포트와 동일하게 설정
  • 다르게 설정하면 → 포트 난독화(port obfuscation) 기법 (아래 6장 참고)

⑪ Description

  • 규칙 설명 (관리상 필수, 나중에 보면 절대 못 알아봄)
  • 예: Web server access from internet

⑫ No XMLRPC Sync

  • CARP(고가용성) 환경에서 이 규칙을 동기화하지 않을 때 체크
  • 일반 환경에서는 무시

⑬ NAT Reflection (NAT 반사)

선택지:

  • Use system default (기본값)
  • Enable (Pure NAT) 또는 Enable (NAT + Proxy)
  • Disable

📌 NAT Reflection이란?
내부 네트워크에서 자기 회사의 공인 IP/도메인으로 접속할 때도 정상 동작하게 해주는 기능.
예: 사내에서 https://mycompany.com 입력 시, 외부로 나갔다 돌아오지 않고 바로 내부 서버로 연결됨.
활성화하지 않으면 사내에서는 도메인 접속이 안 되는 경우가 있음.

⑭ Filter rule association (필터 규칙 연결) ★★★

  • 가장 중요한 옵션
  • 선택지:
    • Add associated filter rule (권장, 기본값) — NAT 규칙과 연동된 방화벽 규칙 자동 생성
    • Add unassociated filter rule — 별도의 방화벽 규칙 생성 (수동 편집 가능)
    • Pass — 방화벽을 거치지 않고 통과
    • None — 방화벽 규칙 안 만듦 (❌ 일반적으로 트래픽 통과 안 됨)

⚠️ None을 선택하면 NAT만 만들어지고 방화벽이 막아서 실제로는 동작하지 않는다.
초보자가 가장 많이 하는 실수.


6. 포트 난독화(Port Obfuscation) 기법

6-1. 개념

표준 포트(예: SSH 22, HTTPS 443) 대신 임의의 외부 포트로 받아 내부의 표준 포트로 연결시키는 기법.

6-2. 예시

외부 8001 포트로 접속 → 내부 192.168.1.1:443 으로 전달
항목
Destination port (외부)8001
Redirect target port (내부)443

6-3. 효과

  • 자동화된 포트 스캐너의 1차 공격을 회피
  • 봇이 보통 22, 80, 443 같은 표준 포트만 노림
  • ⚠️ 완벽한 보안은 아님 — 작정한 공격자는 전체 포트 스캔으로 찾아냄
  • 즉, 방어 심도(defense in depth)의 한 층으로만 활용

6-4. 권장 사항

  • 매우 높은 포트 번호 사용 (예: 49152~65535 영역)
  • 다른 보안 조치(인증서, IP 제한, fail2ban 등)와 반드시 병행

7. 실전 예제 — pfSense 웹 관리 페이지를 외부에서 접근하기

⚠️ 실제 환경에서는 보안상 권장되지 않으며, 학습 목적으로만 사용하세요.

7-1. 시나리오

  • 외부에서 https://공인IP:8001로 접속
  • 내부 pfSense 자체(192.168.1.1:443)로 연결

7-2. 설정값

필드
InterfaceWAN
ProtocolTCP
Sourceany (또는 본인 IP만 허용 권장)
DestinationWAN address
Destination port range8001 ~ 8001
Redirect target IP192.168.1.1 (pfSense LAN IP)
Redirect target port443 (HTTPS)
DescriptionExternal pfSense admin access
Filter rule associationAdd associated filter rule

7-3. 접속 시 주의사항

  • 브라우저에서 인증서 경고 발생 → “Advanced” → “Accept the Risk and Continue”
  • 사설 IP 차단 옵션 때문에 안 될 수 있음
    • System → Advanced → Networking에서
      “Block private networks” 옵션 확인
    • 학습 환경(중첩 NAT 등)에서는 일시적으로 해제 필요

⚠️ 실제 운영 환경 권장사항

  • 관리 페이지는 절대 외부에 직접 노출 금지
  • VPN(WireGuard/OpenVPN) 통해 접근하도록 구성
  • 꼭 필요하면 Source를 본인 사무실 IP로 제한 + 인증서 + 강력한 비밀번호 + 2FA

8. NAT 규칙과 방화벽 규칙의 관계

8-1. 자동 생성 흐름

패킷 도착 (WAN)


1. NAT 규칙 적용 (주소 변환)


2. 방화벽 규칙 평가 (허용/차단)


   목적지 호스트로 전달 또는 폐기

8-2. 확인 방법

Firewall  →  Rules  →  WAN 탭
  • 자동 생성된 규칙은 수정 불가 (NAT 페이지에서만 수정 가능)
  • 색상 표시로 NAT 연동 규칙임을 알 수 있음

8-3. 처리 순서 ⚠️ 중요

pfSense는 패킷을 다음 순서로 처리합니다.

패킷 도착 (WAN)


1. NAT 규칙 적용 (주소 변환)


2. 방화벽 규칙 평가 (허용/차단)


   목적지 호스트로 전달 또는 폐기

즉, NAT가 먼저 일어나고 방화벽이 나중에 검사합니다. 따라서 방화벽 규칙은 변환된 후의 내부 IP 기준으로 작성됩니다.


9. 자주 하는 실수 & 트러블슈팅

증상원인해결
규칙 만들었는데 외부에서 접속 안 됨Filter rule association = NoneAdd associated filter rule로 변경
사내에서 도메인 접속 안 됨NAT Reflection 비활성화Enable (Pure NAT) 활성화
ISP가 사설 IP를 줌(이중 NAT)WAN이 사설 대역“Block private networks” 해제
변경 사항이 적용 안 됨Apply Changes 안 누름상단 노란 버튼 클릭
기존 연결은 되는데 새 연결 안 됨States 테이블 이슈Diagnostics → States에서 초기화
포트 충돌pfSense 자체가 같은 포트 사용 중pfSense 관리 포트 변경
ICMP(ping)이 안 됨Protocol을 TCP로 설정Protocol을 ICMP로 변경

10. 보안 체크리스트

✅ Port Forward 만들 때 반드시 확인

  • Source를 가능한 한 좁게 제한 (any 대신 특정 IP 대역)
  • Destination은 WAN address로 명시 (any 금지)
  • 표준 관리 포트(22, 3389, 443) 직접 노출 자제 → VPN 권장
  • 포트 난독화 적용 검토
  • Description에 만든 이유와 날짜 명시
  • Filter rule association = Add associated filter rule
  • 불필요한 규칙은 즉시 비활성화 또는 삭제

✅ 추가 보안 권장사항

  • 외부 노출 서비스에 fail2ban / 로그인 시도 제한 적용
  • HTTPS 인증서는 Let’s Encrypt 등으로 정식 발급
  • 정기적인 NAT 규칙 감사 (불필요한 규칙 제거)
  • WAF 또는 Reverse Proxy(HAProxy) 활용 고려

11. 핵심 요약 (한 줄 정리)

  1. NAT는 IPv4 전용, IPv6에는 없다.
  2. pfSense는 기본적으로 외부 → 내부 트래픽을 모두 차단한다.
  3. 외부 접근 허용 = Port Forward 규칙 생성 (Firewall → NAT → Port Forward).
  4. Port Forward 규칙 1개 = NAT 규칙 1개 + 방화벽 규칙 1개 (자동 연동).
  5. Filter rule association을 None으로 두면 안 된다.
  6. Destination은 항상 WAN address로 좁히고, Source도 가능한 한 제한한다.
  7. 포트 난독화는 보조 수단일 뿐, 진짜 보안은 인증서/VPN/접근 제한으로 구현.
  8. NAT Reflection은 내부에서 자기 도메인으로 접속 시 필요.
  9. 트래픽 처리 순서: NAT → 방화벽 (방화벽은 변환된 IP 기준).
  10. 규칙은 위에서 아래로 평가되며, 더 구체적인 것을 위에 둔다.