다시 돌아온 서버 구성편, 네트워크 구성과 방화벽 이야기입니다.
기존에 있었던 구성
위와 같이 구성을 생각했는데요
문제는 웹 호스팅과 원격 컴퓨팅을 실행해야하는 환경 속에서,
가지고 있는 공유기가 지원하는 방화벽 설정이나 포트포워딩 기능이 매우 불편하다는 점입니다.
물론 단순히 하나의 PC에 대해서 포트포워딩을 지원하는 것 쯤은 오래된 공유기도 할 수 있다는 점이지만,
- 많은 사람들이 원격 접속을 실행한다는 점
- 학교 IP를 사용한다는 점
- 2대의 물리적인 하이퍼바이저가 있다는 점
때문에 각각 관리하기가 너무 불편하고 비효율점이라는 것입니다.
상황 정리
현재 상황은 아래와 같으며,
pfSesne는 방화벽 OS이며, 물리적으로 설치하는 것이 권장되지만 여건이 안되면 가상화를 하는 아주 유용한 오픈소스입니다.
위 상황에서 문제점은 없어보이지만,
방화벽을 3개를 통과해야하는 상황에 이르게 된다는 것입니다.
실제 산업 현장에서는 내부 보안을 위해서 이중 삼중으로 방화벽을 설치하는 경우를 들었지만,
위와 같은 경우
- 방화벽이 설령 있더라도 가상화라는 부분에서 방화벽을 겹겹으로 만드는 것에 큰 의미가 없다는 점,
- 서버 컴퓨터와 공유기를 연결하는 랜선이 이중화가 아닌 리눅스 브릿지(Linux Bridge) 기능을 이용한 하나의 랜선으로 밖에 연결이 안되어 있다는 점
아주 엄격하게(아는 정도 내에서) 따지고 들면 이 부분들을 짚을 수 있고
무엇보다 가장 중요한 점은
Proxmox, 하이퍼바이저 클러스터의 장점 기능은 Live Migration을 사용하기 위해서
같은 설정을 물리적인 컴퓨터 2대, 그리고 방화벽(pfSense) 모두 해줘야 한다는 점입니다.
보기 편하기 위해서 추상된 그림으로 보면 아래와 같습니다.
각각의 VM은 방화벽1, 방화벽2를 통해서 네트워크를 노출해야합니다.
네트워크 외부로 노출해야하는 VM의 경우(VM1, VM2, VM3) 웹, API 서버 같은 VM들이 있습니다.
외부로 노출할 필요가 없는 VM의 경우(VM4) 지금 여러분들이 이 화면을 보고 있는 스마트폰와 컴퓨터 즉 일반적인 경우에 해당됩니다.
감이 안잡힌다면 네트워크 외부의 사용자가 여러분의 스마트폰이나 컴퓨터에 접속할 필요가 없다?
그러면 VM4와 같이 방화벽이 없는(자체적으로 방화벽은 있지만, 여기서 말하는 것은 제가 직접 구성한 것을 의미) 네트워크를 통해서 인터넷을 사용합니다.
그러면 뭐가 문제인가?
외부 네트워크에 VM이 노출되도록 포트를 포워딩한다면 총 2개의 각각 다른 방화벽을 지나가야합니다.
VM 숫자는 구분을 위함일뿐 의미는 없습니다
VM1, VM5가 각각 같은 작업을 하는 도중에 하이퍼바이저가 장애가 생기거나 점검을 위해서 종료를 한다고 합시다.
그러면 VM1은 하이퍼바이저 클러스터의 장점인 Live Migration을 이용해서
VM1이 실행되고 있었던 물리적인 장치 Dell r510에서 i5-3570으로 끊김없이 옮길 수 있습니다.
하지만, 같은 클러스터를 사용하지만 네트워크을 어떤 네트워크 인터페이스를 통해서 연결을 해야할지
또 방화벽1에서 설정했던 포트 포워딩을 다시 방화벽2에서 똑같이 설정해줘야
외부 네트워크로 VM을 노출할 수 있습니다.
공유기 방화벽에서 설정한 포트 포워딩은 그대로 존재하겠지만,
방화벽 2의 입장에서는 단순히 VM1이 이사왔을 뿐, 방화벽 설정은 업데이트하지 않았기 때문에
외부에서 봤을 때 포트는 노출이 되어있지만 회신하는 VM은 없는 그런 상황입니다.
그림으로 나타내면 위와 같은 상태이며, 방화벽2는 모르고 있는 상태라고 보시면 됩니다.
이 설명 같은 경우 하나의 VM1이 이동했을 때를 가정한 것이지만, 나중에 수많은 VM이 있다면…
엄청 힘들겠죠?
또 다른 문제
위 그림에서 보시다시피 포트(Port) 번호 또한 관리해야하는 자원입니다.
어떤 포트번호를 노출할 것인지 지정을 해줘야하며
서로 다른 VM 간 혼동이 발생하지 않도록 개방할 포트 번호를 부여할 때 규칙을 통해서 부여하는 등…
상당히 귀찮은 작업일 수 있습니다.
또한 가상화된 방화벽에 내부망, 즉 LAN 부분이 따로 존재하기 떄문에
하이퍼바이저 간에 통신이 상당히 귀찮아지며
만약 하이퍼바이저 간의 통신을 위해서 WAN 인터페이스를 잘못 노출시켰다가는 대참사가 일어날 수 있습니다.
물론 Source IP를 제한하면 방지할 수 있으나, 공유기 넘어 ‘진짜’ 인터넷(WAN)을 포함한 인터페이스까지에 대한 정의를 내리는 것이기 때문에
내부 IP(RFC 1918)를 이용한 공격을 한다고 감안하면 상당히 위험할 수 있다고 생각합니다(이론상 가능하니깐)
그래서 방화벽1, 방화벽2 외부 즉, 같은 공유기 내부간의 통신을 허용하는 안전하다고 생각할법한 발상을 해서
WAN 인터페이스를 열어 두면
위와 같은 상황이라고 볼 수 있습니다.
물론 내부망 통신만을 위해서 Source IP를 사설 IP(RFC 1918)이나 네트워크 대역을 직접 제한할 수 있겠지만
상당히 귀찮아질 것 같아서
하나의 방화벽으로 통일했습니다.
그래서 구축한 방화벽
그래서 쓰레기통 옆에서 줍줍한 컴퓨터를 이용해
집에서 가져온 네트워크 카드를 하나 꽂아 이론상 권장되는 물리적인 방화벽을 따로 구축했습니다.
주황색으로 표시한 부분이 리얼텍 1Gbps 랜카드입니다.
하지만 공급되는 인터넷은 100Mbps라서… 이건 학교가 그렇게 했으니 어쩔 수 없습니다.
그래서 기존에 있는 pfSense는 모두 제거 했으며,
이제는 다 같은 내부망에 존재하기 때문에 Private IP 주소를 이용해서 쉽게 구성할 수 있게되었습니다.
네, 위와 같은 이유로 버려진 컴퓨터를 이용해 하나의 방화벽으로 통일한 것에 대해서 작성했습니다.
…
버리지말걸…