study/네트워크

DMZ란? (개념 및 구현 방법)

dddzr 2025. 4. 6. 22:13

📌 DMZ와 내부 네트워크 구조 및 구현 방법

DMZ의 개념과 내부 네트워크 구조 및 구현 방법에 대해 알아보자!! 😊

 

🔍1. DMZ(Demilitarized Zone, 비무장지대)란?

1-1. 내부망/외부망 이란?

🔹 내부 네트워크 (Internal Network)

  • 기업이나 조직 내부에서만 접근 가능한 네트워크
  • 사설 IP (Private IP)를 사용하여 외부에서는 직접 접근 불가
  • 내부망에는 데이터베이스(DB), 애플리케이션 서버(WAS) 등이 위치

 

🔹 외부 네트워크 (Internet)

  • 전 세계적으로 연결된 공용 네트워크
  • 공인 IP (Public IP)를 사용하여 누구나 접근 가능
  • 웹사이트, API 서버 등이 외부 네트워크에서 서비스됨

 

1-2. DMS란?

🔹 DMZ (Demilitarized Zone, 비무장 지대)

  • 내부망과 외부망 사이의 완충 지대 역할을 하는 네트워크 구역
  • 외부에서 접근할 수 있지만, 내부망과 직접 연결되지 않도록 보호
  • 웹 서버, API Gateway, 로드 밸런서(ALB), DNS, FTP, Mail 서버 등을 배치
  • DMZ의 서버는 공인 IP + 사설 IP를 모두 사용하여 내부망과 통신 가능

 

1-3. 왜 DMZ가 필요할까?

  • 보안 강화: 외부에서 직접 내부 네트워크에 접근할 수 없도록 차단
  • 공개 서버 보호: 웹 서버 등 인터넷에 노출되는 서버를 격리하여 내부망 보호
  • 네트워크 구조 최적화: 외부와 내부에서 접근할 때 보안 정책을 다르게 적용 가능

 

📌 2. DMZ 네트워크 구조 및 서비스 배치 예시

✅2-1. 온프레미스 환경 (사내 데이터센터)

[ 인터넷 Client ]
     ↓ (203.0.113.10, 공인 IP)
[ DMZ (Web Server)]
     ↓ (192.168.1.10, 사설 IP)
[ 내부망 (WAS, DB)]
     ↓ (192.168.2.10, 사설 IP)

  예제 시나리오
1️⃣ 외부 사용자가 203.0.113.10 (공인 IP)로 접속 (실제로는 도메인 주소로)
2️⃣ DMZ 내 Web Server가 요청을 직접 처리(정적 리소스) or 내부망의 WAS 서버(동적 요청) (192.168.2.10)로 요청 전달
3️⃣ WAS 서버는 DB(192.168.2.20)와 통신(방화벽으로 접근 제어 (DMZ ↔ 내부망 제한적 허용))

4️⃣ 응답이 역순으로 전달됨

 

방화벽 설정

보통 방화벽(Firewall)과 함께 사용된다!

이중 방화벽(외부: 인터넷-DMZ 외부 트래픽 필터링, 내부: DMZ-내부 네트워크 내부 보호 강화화) 구조가 안전.  

  • 인터넷 → DMZ: 80/443 (HTTP/HTTPS) 허용
  • DMZ → 내부망: TCP 8080 (WAS 서버), TCP 1521 (DB 서버)만 허용
  • 내부망 → DMZ: 응답만 허용 (외부 직접 접근 ❌)

 

✅2-2. 클라우드 환경 (AWS 예시)

AWS에서는 퍼블릭 서브넷이 DMZ 역할을 수행한다.

[ 인터넷 Client ]
     ↓ (공인 IP 자동 할당)
[ 퍼블릭 서브넷 (DMZ) - ALB, API Gateway ]
     ↓ (10.0.1.10, 사설 IP)
[ 프라이빗 서브넷 (내부망) - WAS, DB ]
     ↓ (10.0.2.10, 사설 IP)

  예제 시나리오
1️⃣ 사용자가 ALB(Application Load Balancer) 또는 API Gateway (공인 IP)를 통해 접속
2️⃣ ALB가 WAS (사설 IP: 10.0.2.10)로 요청 전달
3️⃣ WAS가 DB (사설 IP: 10.0.3.20)와 통신
4️⃣ 응답이 역순으로 전달됨

 

보안 그룹(Security Group) 설정

✅ 보안 그룹은 AWS에서 개별 인스턴스 수준의 방화벽 역할을 한다!

✅기존 방화벽이 네트워크 전체를 보호한다면, 보안 그룹은 서버별로 세밀하게 트래픽을 관리하는 방식

  • 인터넷 → 퍼블릭 서브넷(ALB, API Gateway): 80/443 허용
  • 퍼블릭 서브넷(ALB) → 프라이빗 서브넷(WAS): TCP 8080 허용
  • 프라이빗 서브넷(WAS) → DB 서브넷: TCP 3306 (MySQL) 또는 TCP 5432 (PostgreSQL) 허용
  • 프라이빗 서브넷 → 인터넷 직접 접근 ❌ (NAT Gateway 필요)

 

⭐2-3. msa프로젝트 배치 예시

 각 서비스는 내부망에 배치하고, 외부에서는 Gateway를 통해서만 접근하도록 구성

 

2-3-1. 기본 네트워크 아키텍처

보안을 위해 MSA 환경에서 보통 DMZ, 내부망(Private Network), Database Layer로 구성.

 

1️⃣ 클라이언트(Client)

  • 웹, 모바일 앱 등
  • API Gateway를 통해 요청을 보냄

2️⃣ DMZ (Gateway 위치)

  • API Gateway를 배치 (ex: Spring Cloud Gateway, Nginx, Kong, Traefik)
  • 인증/인가, 로드 밸런싱, 요청 라우팅 담당
  • 외부에서는 Gateway를 통해서만 접근 가능

3️⃣ 내부망(Private Network)

  • 개별 마이크로서비스 배치 (User, Order, Product, Payment 등)
  • Gateway를 통해서만 접근 가능 (직접 접근 ❌)

4️⃣ 데이터베이스 레이어

  • 각 서비스가 필요에 따라 독립적인 DB를 가질 수도 있고, 공유할 수도 있음
  • 내부망에서만 접근 가능
[Client] 
    │
   ▼
[API Gateway] (DMZ)  
    │
    ├──> [User Service] (내부망)
    ├──> [Order Service] (내부망)
    ├──> [Product Service] (내부망)
    ├──> [Payment Service] (내부망)
    │
   ▼
[Database Layer] (내부망)

 

 

✅ 3. 실제 구현 방법 (사설 IP + 공인 IP 설정)

✅ 3-1. 내부망 vs 외부망 (사설 IP vs 공인 IP)

내부망과 외부망은 사용되는 IP 대역에 따라 논리적으로 결정되며, IP 주소 설정 방식에 따라 내부 또는 외부망으로 구분할 수 있다! 😊

 

📌 IP 대역에 따른 내부망/외부망 구분

🔹 내부망 (Private Network)

    • 사설 IP(Private IP)를 사용하여 외부 인터넷에서 직접 접근할 수 없음
    • 사설 IP 대역 (RFC 1918 표준)
      • 10.0.0.0 ~ 10.255.255.255
      • 172.16.0.0 ~ 172.31.255.255
      • 192.168.0.0 ~ 192.168.255.255
    • 예시: 192.168.1.10, 10.0.1.20
    • 내부망 서버는 NAT Gateway, 프록시, VPN 등을 통해서만 외부와 통신 가능!

 

🔹 외부망 (Public Network)

  • 공인 IP(Public IP)를 사용하여 인터넷에서 접근 가능
  • 공인 IP 대역
    • 전 세계적으로 고유하게 할당된 IP (ISP 또는 클라우드에서 제공)
  • 예시: 203.0.113.10, 52.78.23.45

 

📌 IP 대역으로 내부망과 외부망을 구분하는 이유?

  • 사설 IP 대역은 인터넷에서 직접 접근할 수 없도록 설계됨 → 보안 강화
  • 공인 IP는 외부에서 접근할 수 있도록 전 세계에서 고유하게 사용됨
  • DMZ 영역에서는 공인 IP(외부 접근용) + 사설 IP(내부망 통신용)을 함께 사용하여 보안과 접근성을 조정함

 

✅ 3-2. DMZ에서 IP 이용

즉, DMZ 서버는 외부에서 공인 IP로 접근 가능하고, 내부망과는 사설 IP로 통신하는 방식!

 

🔹공인 IP (Public IP) 활용

  • 공인 IP는 인터넷에서 접근 가능한 IP 주소이며, 고유한 값이 할당됨
  • DMZ 내 웹 서버(API Gateway, 로드 밸런서 등)에 공인 IP 할당
  • DNS 설정을 통해 도메인(www.example.com)을 공인 IP와 연결

 

🔹사설 IP (Private IP) 활용

  • 사설 IP는 내부망에서만 사용되는 IP 주소로, 외부 인터넷에서는 직접 접근 불가
  • 내부망(WAS, DB)은 사설 IP만 사용하여 외부 노출 방지
  • DMZ에서 내부망으로 접근할 때 사설 IP를 이용하여 통신

 

🔥 공인 IP VS 사설 IP

구분 사설 IP (Private IP) 공인 IP (Public IP)
사용 목적 내부망과 통신 (WAS, DB 등) 외부에서 접근 (웹 서버, API Gateway)
외부에서 접근 가능? ❌ (외부 직접 접근 불가) ✅ (인터넷에서 접근 가능)
할당 대상 WAS, DB, 내부망 서버 Web Server, API Gateway
사용 환경 내부 네트워크 전용 외부 서비스 노출용

 

사설 IP를 이용한 내부망 통신 방법 (택1)

DMZ에 배치된 서버(Web Server, Gateway 등)가 내부망과 통신할 때는 사설 IP를 직접 지정해야 한다.

 

🔹 직접 사설 IP 입력 (환경 변수, 설정 파일 활용)

  • Web Server → 내부망(WAS) 연결 시 192.168.2.10 직접 설정
API_GATEWAY_URL=http://192.168.2.10:8080
DATABASE_URL=jdbc:mysql://192.168.3.20:3306/mydb

 

🔹 내부 DNS 서버 활용 (사설 도메인 사용)

사설 IP는 내부망 전용이라서, 일반적인 공용 DNS에서는 등록되지 않는다. 

하지만 내부망에서 도메인처럼 사용하고 싶다면 사설 DNS 서버를 사용하면 됨.

  • Web Server가 was.example.local을 호출하면, 내부 DNS가 192.168.2.10로 변환
was.example.local → 192.168.2.10
db.example.local → 192.168.3.20

 

🔹 로드 밸런서 활용 (AWS, 클라우드 환경)

  • 내부망의 WAS가 여러 대 있을 경우, 사설 로드 밸런서를 이용해서 트래픽 분산 가능
internal-lb.example.com → 내부망 WAS로 트래픽 전달