본문 바로가기
Azure/Azure Infra & Networking

Azure Networking - Azure Firewall로 DNAT/SNAT 구성하기

by ww0610 2025. 12. 1.

개요

불타는 벽, Firewall입니다.

Azure Firewall과 UDR을 이용해

외부 → 내부로 들어오는 트래픽(DNAT)과
내부 → 외부로 나가는 트래픽(SNAT) 흐름을 구성해 보겠습니다.

구성 요소

DNAT은 Destination NAT의 줄임말입니다

번역하면 목적지...네트워크 주소 변환입니다.

외부에서 특정 IP나 포트로 들어오면 목적지 주소를 내부의 서버 주소로 바꿔주는 기능인데요

Firewall Public IP:8080으로 들어온 요청을
Ubuntu VM:80으로 전달하도록 만드는 것이 DNAT입니다.

 

SNAT은 Source NAT, 출발지...주소 변환입니다
내부 서버가 외부로 나갈 때, 서버의 출발지 주소(Private IP)를 Firewall Public IP로 바꿔주는 기능입니다.
VM이 인터넷에 요청을 보낼 때 그 요청의 출발지를 Firewall Public IP로 대체해 주는 구조입니다.

진행 과정

네트워크 환경 구성

먼저 네트워크 환경을 만들어주겠습니다.

Azure VNet 생성
.

적당한 IP 대역으로 설정해 준 뒤...

.

배포가 되었다면 리소스로 이동해 줍니다.

.

VNet - 서브넷으로 이동한 뒤 추가를 해줍니다.

.
.

여기서 서브넷의 용도를 Azure Firewall으로 바꿔줍니다.

그러면 자동으로 서브넷 이름도 AzureFirewallSubnet으로 설정됩니다.

Azure Firewall 배포를 위해 서브넷 용도를 Azure Firewall로 지정하는 설정 화면
.

이제...Public IP를 생성해 주도록 합니다.

Azure Portal에서 공용 IP 주소 메뉴에서 새 공용 IP를 생성하는 화면
.

테스트용이기 때문에 간단하게 설정해 준 뒤 만들어줬습니다.

.


Firewall 생성

먼저 네트워크 환경을 만들어주겠습니다.

Azure Portal의 Azure Firewall 목록 화면에서 새 방화벽 리소스를 만들기 위한 만들기 버튼
.

SKU는 똑같이 표준으로 진행하겠습니다.

.

Azure Firewall을 만들 때는 먼저 사용할 방화벽 정책을 생성해야 합니다.

여기서 정책 이름과 지역을 지정한 뒤 표준 계층으로 생성합니다

Azure Firewall 생성 과정에서 새 방화벽 정책을 만들기 위해 정책 이름·지역·계층을 설정하는 화면
.

아까 만들어준 VNet과 Public IPfmf 연결해 줍니다.

.
.


VM 생성

DNAT/SNAT 동작을 확인하기 위해 테스트용 VM을 하나 생성합니다.
저는 리눅스로 했습니다만, 윈도우도 상관없습니다 다만 리눅스로 하면 뭔가 좀 더 있어 보입니다.
이 VM이 나중에 Azure Firewall을 통해 외부에서 접속되는 대상이 됩니다

DNAT 대상이 될 Ubuntu Server VM을 생성하기 위해 이미지와 사용자 이름·비밀번호를 입력하는 Azure Portal 화면
.

또 아까 만들어둔 VNet을 선택하게 되면 Firewall용으로 만들어둔 서브넷을 붙일 수 있습니다.

.


Ubuntu 웹 서버 설치

VM이 생성되었다면, 트래픽 테스트를 위해 웹 서버를 설치해 주도록 합니다.

sudo apt update
sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2

생성한 Azure VM에 Ubuntu 웹 서버를 설치
.

sudo systemctl status apache2 입력했을 때

저렇게 active가 나오면 되고

.

curl localhost 했을   기본적인 HTM이 나오면 아주 정상입니다.


UDR 생성

VM이 외부로 나갈 때 모든 아웃바운드 트래픽이 Azure Firewall을 경유하도록 하기 위해 사용자 정의 경로(UDR)를 만듭니다.
여기서는 Route Table만 먼저 생성하고, 이후에 서브넷(vm-snet)에 연결해 Firewall을 강제로 통과하도록 구성합니다

.
VM 서브넷에 연결할 사용자 정의 경로(UDR)를 만들기 위한 Route Table 생성 단계
.

VM의 모든 아웃바운드 트래픽(0.0.0.0/0)을 Azure Firewall로 보내기 위해 경로를 추가합니다.
대상 주소는 0.0.0.0/0으로 지정하고, 다음 홉 주소에는 Azure Firewall의 프라이빗 IP를 입력합니다.
이 설정으로 VM이 인터넷으로 나갈 때 반드시 Firewall을 경유하도록 강제할 수 있습니다

UDR(Route)에서 0.0.0.0/0 트래픽의 다음 홉을 Azure Firewall 프라이빗 IP로 지정하는 설정 화면
.

vm-snet 서브넷을 선택한 뒤 라우팅 테이블로 TerrywooUDR을 지정하면,

해당 서브넷의 모든 아웃바운드 트래픽이 설정된 경로(0.0.0.0/0 → Firewall Private IP)로 전달됩니다.
이렇게 하면 VM의 아웃바운드 경로가 기본 인터넷 게이트웨이가 아닌 Azure Firewall을 반드시 거치도록 강제하게 됩니다.

Azure Portal에서 vm-snet 서브넷을 편집하며, 라우팅 테이블 목록에서 TerrywooUDR을 선택해 서브넷에 사용자 정의 경로를 연결하는 화면
.


DNAT 규칙 생성 및 테스트

이제 Firewall Policy 내에서 DNAT 규칙을 추가해 줍니다.

여기서 만든 규칙들이 외부에서 들어온 트래픽을 특정 VM의 Private IP로 딱 전달해 주게 됩니다.

Azure Firewall Policy의 DNAT 규칙 메뉴에서 규칙 컬렉션 추가 버튼을 클릭하는 화면.
.

원본 유형, 원본 프로토콜, 원본IP는 전부  * 이걸로 설정하고

.

대상(방화벽 IP 주소)에는 Firewall의 Public IP를 넣고,

변환된 주소에는 실제로 서비스를 제공할 VM의 Private IP를 입력합니다.
이걸 통해 외부 8080 요청이 내부 VM의 80 포트로 NAT 변환되어 전달됩니다

DNAT 규칙에서 Firewall Public IP와 VM Private IP를 매핑하여 포트를 변환하는 설정 화면
.

Firewall Public IP는 여기에 있고

.

VM Private IP는 여기 있습니다.

.

규칙이 완성된 모습입니다.

.

이제 엣지를 열고 http://<Firewall-Public-IP>:8080

로 접속해 보면 다음과 같이 웹 서버가 나오는 것을 볼 수 있습니다.

즉, VM의 IP가 노출되어 있는 것이 아니라

Firewall의 Public IP가 VM의 앞단에서 트래픽을 받아 VM으로 전달해 주는 모습입니다. 기특합니다.

.


(선택) SSH DNAT 규칙 생성 및 테스트

이건 굳이 안 해도 되는 건데

SSH로 Firewall Public IP에 접속하면 자동으로 VM에 연결하게끔 만들어주는 규칙입니다.

.

대상 포트는 외부 사용자가 접속할 포트(5022)로 지정하고,

대상(방화벽 IP 주소)에는 Firewall Public IP
이 규칙을 통해 외부에서 Firewall Public IP:5022로 접속하면,

내부 VM의 SSH 포트(22)로 NAT 변환되어 전달됩니다.

Azure Firewall DNAT 규칙에서 외부 SSH 포트 5022를 내부 VM의 SSH 포트로 변환하기 위해 원본, 프로토콜, 대상 포트, Firewall Public IP를 설정하는 화면
.
.,

처음에는 절대 까먹은 게 아니라 의도적으로 

ssh -p 5022 (Id)@퍼블릭IP

로 접근하니 로그인이 차단되었고

ssh -p 5022 (Id)@Firewall 퍼블릭 IP로 접근하니 내부 VM(10.20.3.4)의 SSH 세션으로 정상 접속되었습니다.
DNAT 규칙이 외부 포트 5022 요청을 내부 VM의 SSH 포트 22로 정확히 변환하고 전달하고 있읍니다...;;

.


SNAT

마지막 SNAT입니다. 

VM의 모든 아웃바운드 트래픽이 Azure Firewall을 반드시 거치도록 만드는 SNAT 준비 단계입니다.
대상 주소는 0.0.0.0/0으로 지정하고, 다음 홉 형식은 Virtual Appliance, 주소에는 Firewall Private IP(10.20.2.4)를 입력합니다.


이 경로가 있어야 VM이 인터넷으로 나갈 때 Firewall을 경유하도록 강제할 수 있으며, Firewall의 SNAT 규칙이 적용됩니다

UDR 경로에서 0.0.0.0/0 기본 경로를 Virtual Appliance로 지정하고 다음 홉 주소에 Azure Firewall Private IP를 입력한 화면
.

앞에서 만든 SNAT용 UDR(udr-fw-out)을 VM이 속한 서브넷(vm-snet)에 연결해 줍니다

.

VM의 아웃바운드 트래픽을 허용하고 SNAT을 적용하기 위해 네트워크 규칙 컬렉션을 생성해 줍니다.

.
.

여기까지 설정해 주면 DNAT, SNAT이 모두 적용되었습니다.

SSH 접속을 통해 DNAT이 적용된 VM에 로그인한 뒤, curl ifconfig.me 명령으로 VM의 아웃바운드 트래픽이 Firewall Public IP로 SNAT 변환되는 것을 확인하는 화면
.

상단에서는 Firewall Public IP:5022로 SSH에 붙으며

DNAT 규칙이 외부 요청을 VM 내부 포트 22로 정확히 전달하고 있고
하단에서는 VM 내부에서 curl ifconfig.me를 실행했을 때 Firewall Public IP가 표시되며

VM의 아웃바운드 트래픽이 SNAT 규칙에 의해 Firewall의 Public IP로 변환되어 외부로 나가고 있음을 보여줍니다.


즉, 인바운드는 DNAT으로, 아웃바운드는 SNAT으로 기가 막히게 성공적인 모습입니다. 기특합니다22


뭔가 이번 테스트는 트러블슈팅할 것이 많았습니다. 다음은 VPN입니다

 


<참고자료>

Azure Firewall이란? | Microsoft Learn

 

Azure Firewall이란?

Azure Firewall은 Azure Virtual Network 리소스를 보호하는 관리되는 클라우드 기반 네트워크 보안 서비스입니다.

learn.microsoft.com

아웃바운드 연결을 위한 SNAT(Source Network Address Translation) - Azure Load Balancer | Microsoft Learn

 

아웃바운드 연결을 위한 SNAT(Source Network Address Translation) - Azure Load Balancer

SNAT(Source Network Address Translation)를 사용하여 아웃바운드 인터넷 연결에 Azure Load Balancer를 사용하는 방법을 알아봅니다.

learn.microsoft.com

 

반응형