DMZ란? (개념 및 구현 방법)
📌 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로 트래픽 전달