219. DMZ (Demilitarized Zone, 비무장지대)
⚠️ 이 문서는 기업의 네트워크 보안 아키텍처에서 가장 위험하고 더러운 바깥세상(인터넷)과 절대 지켜야 할 가장 안전한 내부망(사내 데이터베이스) 사이에 완충 지대로 존재하며, **어쩔 수 없이 외부 사용자에게 서비스를 제공하기 위해 해킹의 위험을 감수하고 밖으로 반쯤 열어두는 특수 격리 구간인 'DMZ'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 군사 용어인 비무장지대에서 따온 말로, 인터넷(적군)과 사내망(아군) 사이에서 어느 쪽의 완벽한 지배도 받지 않는, 외부 방화벽과 내부 방화벽 사이에 샌드위치처럼 껴 있는 고립된 논리적/물리적 서브넷 공간이다.
- 가치: 불특정 다수의 고객이 접속해야 하는 대국민 웹 서버(Web)나 외부와 메일을 주고받는 이메일 서버(SMTP)를 이 공간에 가두어, 설령 이 서버들이 해커에게 100% 탈취당하더라도 해커가 사내 핵심망(DB)으로 침투하는 수평 확산을 원천 차단한다.
- 기술 체계: DMZ 안의 서버는 외부(인터넷)의 접속을 받을 수는 있지만, DMZ 안의 서버가 '먼저(Initiate)' 내부망 깊숙한 곳으로 새로운 접속을 요구하는 통신 룰(Outbound)은 방화벽에 의해 철저하게 차단되도록 설계(단방향 허용)하는 것이 원칙이다.
Ⅰ. 극단적 분리의 딜레마: 서버를 어디에 둘 것인가?
인터넷과 단절된 회사는 비즈니스를 할 수 없다.
- 내부망에 웹 서버를 두는 최악의 한 수:
- 일반 고객이 물건을 사려면 웹 서버(포트 80/443)에 접속해야 하므로 인터넷 방화벽을 열어주어야 한다.
- 만약 웹 서버를 사내망 깊숙이 두면, 해커가 고객으로 위장해 방화벽을 통과한 뒤 웹 서버의 취약점(예: 웹쉘 업로드)을 뚫어버린다. 웹 서버가 사내망에 있으니 옆에 있는 고객 DB와 회계 서버까지 순식간에 프리패스로 다 털리게 된다.
- 인터넷망에 웹 서버를 두는 무모한 한 수:
- 그렇다고 방화벽 바깥쪽 생짜 인터넷(Public) 한가운데에 웹 서버를 던져두면, 고객은 접속하기 편하겠지만 서버는 하루도 안 되어 해커의 봇(Bot) 공격에 장악당하고 좀비 PC가 되어버린다.
- DMZ (완충 지대)의 발명:
- "안도 아니고 밖도 아닌 제3의 공간을 만들자."
- 밖에서 들어오는 무식한 공격은 1차 방화벽이 막아주고, 웹 서버가 뚫리더라도 뒤에 있는 2차 방화벽이 굳게 잠겨있어 내부망으로는 한 발짝도 못 들어오게 가둬버리는 사방이 막힌 감옥(샌드박스)을 설계한 것이다.
📢 섹션 요약 비유: 궁궐(사내망) 깊숙이 외부 상인(고객)을 들이자니 첩자(해커)가 두렵고, 궁궐 밖 산속에 상점을 짓자니 산적에게 털립니다. 그래서 궁궐 외곽 성벽(외부 방화벽)과 내성(내부 방화벽) 사이에 '앞마당(DMZ)'을 만들고, 상인은 외곽 성문을 열어 이 앞마당까지만 들어와 장사(웹 서버)하게 한 뒤, 내성으로는 절대 한 발짝도 못 들어오게 막는 구조입니다.
Ⅱ. DMZ에 배치해야 할 서버 vs 안 되는 서버
어떤 시스템을 감옥(DMZ)에 넣어야 하는가는 명확한 룰이 있다.
- DMZ 배치 O (외부와 통신하는 프런트엔드 서버):
- 웹 서버 (Web Server): 80, 443 포트로 고객의 트래픽을 직접 받아내는 최전선 총알받이 서버.
- 이메일 서버 (SMTP Relay): 외부 인터넷과 메일을 주고받아야 하는 서버.
- DNS 서버 (External): 도메인 주소를 알려주기 위해 외부에 노출되어야 하는 서버.
- 프록시 서버 (Reverse Proxy) / API Gateway: 뒷단으로 넘겨주기 전에 앞에서 트래픽을 가로채서 필터링하는 대문 역할.
- DMZ 배치 X (절대 넣으면 안 되는 백엔드 서버):
- 데이터베이스 (DB 서버): 고객의 개인정보, 비밀번호 등 가장 치명적인 자산은 절대 밖에서 찔러볼 수 없게 내부망 깊숙한 곳(Private Subnet)에 숨겨야 한다.
- WAS (웹 애플리케이션 서버, Tomcat 등): 비즈니스 로직과 소스코드가 들어있는 WAS도 예전엔 DMZ에 두었으나, 최근에는 보안을 극대화하기 위해 웹 서버(DMZ)와 WAS(내부망)를 찢어서(3-Tier 아키텍처) WAS를 내부망으로 숨기는 것이 국룰이다.
📢 섹션 요약 비유: 앞마당(DMZ)에는 외부 손님을 웃으며 맞이할 접객원(웹 서버)과 우편 수발을 할 심부름꾼(메일 서버)만 내보냅니다. 회사의 금고(DB)와 핵심 레시피를 알고 있는 수석 주방장(WAS)은 혹시 모를 납치에 대비해 절대 앞마당에 나가지 못하게 하고 가장 깊숙한 내실에 꽁꽁 숨겨둡니다.
Ⅲ. DMZ 방화벽 통제 규칙 (ACL Rule) 4원칙
DMZ를 진정한 '비무장' 지대로 만드는 것은 엄격한 일방통행 규칙이다.
- 외부 인터넷 $\rightarrow$ DMZ (허용):
- 고객이 웹사이트에 들어와야 하므로, 80/443 등 특정 서비스 포트만 제한적으로 허용(Allow)한다.
- 내부망 $\rightarrow$ DMZ (허용):
- 내부 관리자가 DMZ 서버를 패치하거나 모니터링해야 하므로 통신을 허용(Allow)한다.
- DMZ $\rightarrow$ 외부 인터넷 (제한적 허용/차단):
- DMZ에 있는 웹 서버는 보통 밖으로 먼저 나갈 일이 없다. 만약 웹 서버가 갑자기 인터넷의 이상한 IP로 접속을 시도한다면, 해커가 웹 서버를 뚫고 외부 해커 본진(C&C 서버)으로 데이터를 빼돌리려는(Data Exfiltration) 짓일 확률이 99%다. 원칙적으로 차단한다.
- DMZ $\rightarrow$ 내부망 (절대 금지 / 극히 제한):
- 가장 중요한 보안 규칙이다. DMZ에 있는 서버가 뜬금없이 사내망의 직원 PC나 다른 DB에 '먼저' 접속을 시도하는 것(Outbound)은 100% 해킹당해 수평 확산(Lateral Movement)을 시도하는 것이다. 내부 방화벽에서 가차 없이 100% 차단(Deny)해야 한다. (단, 웹 서버가 사전에 약속된 WAS의 특정 포트 하나로 쿼리를 날리는 것만 핀셋으로 구멍을 뚫어 허용한다.)
📢 섹션 요약 비유: 앞마당(DMZ)에 있는 접객원은 손님이 들어오는 것(인터넷 $\rightarrow$ DMZ)은 반갑게 맞이하지만, 접객원 본인이 무기를 들고 내성(내부망)으로 뛰어 들어가려 하거나(DMZ $\rightarrow$ 내부망), 내성에서 들은 비밀을 가지고 성 밖으로 뛰쳐나가려 하면(DMZ $\rightarrow$ 인터넷) 즉시 등 뒤에서 화살을 쏴버리는(차단 룰) 잔인하지만 완벽한 통제 룰입니다.