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는 왜 필요한가?
- IPv4 주소 부족 — 전 세계가 사용하기에 IPv4 주소(약 43억 개)가 모자라기 때문에, 사설 IP를 NAT로 공유합니다.
- 보안 — 내부 IP가 외부에 노출되지 않아 직접 공격이 어렵습니다.
- 유연성 — 내부 네트워크 구조를 외부와 독립적으로 운영할 수 있습니다.
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 변환 (기본 자동) |
| NPt | IPv6 ↔ IPv6 | IPv6 프리픽스 변환 (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개를 만들면 두 가지가 동시에 생성됩니다.
- NAT 규칙: 목적지 주소/포트를 내부 IP로 변환
- 방화벽 규칙(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 등 대부분의 서비스 |
| UDP | DNS, VoIP, SIP, 게임 서버 |
| TCP/UDP | 둘 다 사용하는 경우 (예: DNS) |
| ICMP | ping (정확히는 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. 설정값
| 필드 | 값 |
|---|---|
| Interface | WAN |
| Protocol | TCP |
| Source | any (또는 본인 IP만 허용 권장) |
| Destination | WAN address |
| Destination port range | 8001 ~ 8001 |
| Redirect target IP | 192.168.1.1 (pfSense LAN IP) |
| Redirect target port | 443 (HTTPS) |
| Description | External pfSense admin access |
| Filter rule association | Add 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 = None | Add 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. 핵심 요약 (한 줄 정리)
- NAT는 IPv4 전용, IPv6에는 없다.
- pfSense는 기본적으로 외부 → 내부 트래픽을 모두 차단한다.
- 외부 접근 허용 = Port Forward 규칙 생성 (
Firewall → NAT → Port Forward). - Port Forward 규칙 1개 = NAT 규칙 1개 + 방화벽 규칙 1개 (자동 연동).
- Filter rule association을
None으로 두면 안 된다. - Destination은 항상
WAN address로 좁히고, Source도 가능한 한 제한한다. - 포트 난독화는 보조 수단일 뿐, 진짜 보안은 인증서/VPN/접근 제한으로 구현.
- NAT Reflection은 내부에서 자기 도메인으로 접속 시 필요.
- 트래픽 처리 순서: NAT → 방화벽 (방화벽은 변환된 IP 기준).
- 규칙은 위에서 아래로 평가되며, 더 구체적인 것을 위에 둔다.