비무장 지대(Public subnet)

우리나라처럼 휴전중인 국가들은 상호간의 협약에 의해 군사 충돌이 발생할 수 있는 접경 지역에 비무장 지대(DMZ; DeMilitarized Zone)를 지정하고 있습니다.

비무장지대를 설정하는 이유는 양측 세력이 직접적으로 접촉해서 생기는 무력 충돌을 방지하기 위함이며 이를 위해 비무장지대에는 군대의 주둔이나 무기의 배치를 정전 협정으로 금하고 있습니다.


컴퓨터 네트워크에서도 비무장지대가 존재하는데 이는 조직의 내부 네트워크와 (일반적으로 인터넷인) 외부 네트워크 사이에 위치한 서브넷을 의미합니다.

이는 외부의 사용자의 회사의 내부 서버에 직접 접속하여 자료를 유출하거나 해킹을 하지 못하도록 완충 역할을 하는 목적이 있습니다.


여기에 위치하는 서버는 외부에 공용 서비스를 제공하면서 내부 네트워크를 보호해야 하는 막중한 임무를 띄고 있으며 웹 서버나 메일 서버, FTP 서버, DNS 서버같이 잘 알려진(Well Known) 포트를 사용하는 서비스가 위치하게 됩니다.

이 책에서는 목적에 따라 네트워크를 분할한 경우 그 영역을 Zone 또는 Subnet 으로 기술하고 있으며 둘은 동일한 의미입니다.


보통 비무장지대 앞에 1차 방화벽을 설정하고 뒤에 2차 방화벽을 위치시키며 각각 방화벽은 다음과 같이 설정하고 있습니다.


1차 방화벽

1차 방화벽은 외부에서 DMZ 내 서비스로만 연결 가능하도록 설정하며 아래와 같은 정책으로 설정합니다.

  1. Deny all 정책에 의거하여 모든 입력 패킷을 차단
  2. DMZ 영역에서 서비스할 포트만 제한적으로 오픈. 예로 웹 서비스를 제공할 경우 80, 443 포트만 오픈하며 메일 서버일 경우 smtp 포트인 25번만 오픈.


DMZ 영역의 서버는 외부에서 연결 가능하므로 SELinux 나 리눅스 방화벽등을 설치해서 추가로 보호해야 하는 것이 좋으며 웹 서버는 WAS 에 대해 reverse proxy 와 static content 제공의 역할만 하도록 설정하는 것을 권장합니다.


또 DMZ 내의 모든 서버에는 gcc 컴파일러, gdb 등 개발과 디버깅 도구를 절대 설치하지 않는 것이 좋으며 사용하지 않는 서비스는 삭제하여 최대한 가볍고 기능이 적게 하는 것이 좋습니다.

리버스 프락시는 웹 브라우저가 컨텐츠를 요청시 이를 private 영역에 있는 WAS 에 전달하고 그 결과를 다시 웹 브라우저에 전달하는 방식을 의미합니다.

이렇게 동작하는 이유는 여러 가지가 있는데 중요한 이유중 하나는 보안으로 웹 서버를 DMZ 에 위치시키고 다른 네트워크 영역에 있는 WAS 에 요청하여 전달만 하면 되므로 보안이 견고해 집니다.


Private 영역

Private 영역은 외부에서 직접 연결할 필요가 없는 내부 서버를 위치시키는 영역으로 WAS 나 내부 관리 서버를 이곳에 두면 되며 2차 방화벽이 Private 영역 앞에 위치하게 됩니다.


2차 방화벽

2차 방화벽은 혹시 DMZ 영역내의 서버가 해킹당했을 경우 내부망으로 확산을 방지하는 역할을 수행합니다. 클라우드를 사용하지 않고 On-Premise 환경일 경우 2차 방화벽은 내부 네트워크를 보호해야 하므로 1차 방화벽과 다른 제품을 사용하는 것을 권장하고 있습니다.

일반적인 2차 방화벽의 정책은 다음과 같이 설정합니다.

  1. Deny all 정책에 의거하여 모든 입력 패킷 차단
  2. DMZ 내의 서비스를 정상적으로 제공하기 위해 내부망으로 연결이 필요한 포트만 제한적으로 오픈. 예로 웹 서버가 내부 WAS(Web Application Server) 로 연결해야 할 경우 해당 WAS 의 포트(tomcat: 8080, php-fpm:9000) 만 오픈합니다.
  3. DMZ 구역내에서 DBMS 등 내부의 중요 서버로 바로 연결하지 못하도록 모두 차단하는게 좋으며 DMZ 내 서버는 늘 해킹당할수 있다는 가정을 세우고 해킹시 내부 네트워크로 확산되지 않도록 보안 정책을 수립합니다.


3번같은 경우 웹 서비스를 mod_php 방식으로 할 경우 웹 서버가 DBMS 에 연결을 하도록 설정해야 정상적으로 동작합니다. 이는 보안 측면에서 좋은 해결책이 아니므로 웹 서버에서 바로 돌아가는 mod_php 방식 대신 php-fpm 같이 별도의 WAS 를 사용하도록 해야 네트워크를 분할하고 각 서버를 용도에 맞는 네트워크 구역에 위치시킬 수 있습니다.


Protected 영역

Protected 영역에 있는 서버는 외부 인터넷 연결도 차단하며 민감한 개인정보를 보관하는 DBMS 시스템이나 금융정보를 처리하는 응용 서비스 서버등이 이에 해당합니다.

이 영역에 있는 서버의 경우 외부 인터넷 차단으로 인해 업데이트와 패치가 불가능해지므로 이를 해결하기 위해서는 아래의 2가지 방법이 있습니다.

  1. 내부 시스템용 전용 업데이트 서버 구성
  2. protected 영역에서 업데이트 서버만 연결이 가능하도록 설정


구성이 번거롭지만 1번 방식대로 내부에 서버를 구성하는 것이 좋지만 설정과 구축이 까다로운 단점이 있으므로 2번 방식으로 처리하는 것이 조금 더 실용적인 방법입니다.