Proxmox 홈서버에 OPNsense 방화벽 VM 구축기 [1]

Proxmox에 OPNsense를 VM으로 올리는 튜토리얼

목차

Proxmox 홈서버를 오래 굴리다 보니, 웹서버보다도 메일서버 쪽에서 신경 쓰이는 로그가 자주 보이기 시작했습니다.

취약점 탐지나 무차별 대입 공격 봇으로 보이는 트래픽이 지속적으로 들어왔습니다.

일단 임시로 Proxmox 자체 방화벽 기능을 이용해, 허용되지 않은 Source의 접근을 모두 막아서 해결을 했었습니다.

이것도 나쁘진 않았지만, 조금 더 앞단에서 트래픽을 보고 걸러내야 한다고 생각했습니다.

그래서 OPNsense를 VM으로 올려 별도의 방화벽 레이어를 만들게 되었습니다.

홈 서버 환경과 고민

저는 Proxmox가 설치된 서버 한 대로 다양한 서비스들을 구동하고 있습니다.

특히 외부에 노출된 서비스는

  • 웹 서버
  • 메일 서버
  • VPN
  • 게임(마인크래프트) 서버

등이 있습니다.

웹은 뭐 클라우드플레어가 막아준다고는 하지만.. 아이피로 직접 들어오는 스캐너 트래픽이나 메일 서버는 그대로 외부에 노출되어 있다고 봐도 되는 구조였습니다.

그래서 이 서비스들의 앞단에, 별도의 방화벽을 구축해 보안을 강화하기로 결정했습니다.

왜 OPNsense였나

방화벽으로 유명한 pfSense의 Fork 버전이면서 비교적 현대적인 UI와 기능을 지원하는 OPNsense가 적합하다고 생각되어 결정하게 되었습니다.

또 다양한 플러그인으로 기능 확장도 가능하고요.

네트워크 설계

이 부분에서 고민을 좀 했습니다.

기존에는 Proxmox 호스트와 여러 게스트가 모두 같은 네트워크에 직접 연결된 상태였습니다.

이 경우 구성은 단순하지만, 외부에 노출되는 서비스까지 내부망과 비슷한 위치에 놓이게 되어 보안상 아쉬움이 있었습니다.

특히 웹서버, 메일서버, VPN처럼 외부 요청을 직접 받는 서비스는 조금 더 분리된 네트워크에서 관리하고 싶었습니다.

 

그래서 Proxmox 내부에서 네트워크를 두 구역으로 나누기로 했습니다.

하나는 기존 내부망과 연결되는 구간이고, 다른 하나는 OPNsense 뒤에 위치하는 보호망입니다.

OPNsense VM은 이 두 네트워크 사이에 위치하며, 앞단에서 들어오는 트래픽을 검사한 뒤 뒤쪽 게스트로 전달하는 역할을 맡습니다.

결국 이런 구성이 만들어졌습니다.

이 구성을 위해 Proxmox에서는 두 개의 브리지를 사용했습니다.

vmbr0는 집 공유기 및 기존 내부망과 연결되는 브리지이고, OPNsense 입장에서는 WAN이 됩니다.

다만 여기서 한 가지 주의할 점이 있습니다. 이 글에서 말하는 WAN 인터넷에 직접 연결된 공인망이 아니라, OPNsense를 기준으로 바깥쪽에 있는 네트워크를 의미합니다.

제 환경에서는 OPNsense가 집 공유기 아래에 놓여 있기 때문에, vmbr0 역시 실제로는 집 내부망에 속해 있습니다.

그럼에도 OPNsense 입장에서는 이쪽이 바깥 방향 네트워크이기 때문에 WAN으로 인식하게 됩니다.

반대로 vmbr1은 OPNsense 뒤쪽에 새로 만든 별도 브리지이고, OPNsense 입장에서는 LAN이 됩니다.

이쪽에는 보호할 VM과 CT를 연결했고, OPNsense 뒤에서 보호받는 내부 보호망 역할을 하도록 구성했습니다.

 

즉, 쉽게 말하면 기존 집 내부망 아래에, OPNsense를 통해 내부망을 하나 더 만든 구조라고 볼 수 있습니다.

 

그리고 OPNsense VM에는 네트워크 인터페이스를 두 개 연결했습니다.

첫 번째 인터페이스는 vmbr0에 연결해 WAN으로 사용했고, 두 번째 인터페이스는 vmbr1에 연결해 LAN으로 사용했습니다.

이 역시 절대적인 인터넷-내부망 구분이라기보다는, OPNsense를 기준으로 어느 쪽이 바깥이고 어느 쪽이 안쪽인지에 따라 나눈 것이라고 이해하면 더 정확합니다.

이렇게 구성하면 외부에서 들어오는 요청은 먼저 공유기와 vmbr0를 거쳐 OPNsense에 도착하고, OPNsense의 방화벽 규칙을 통과한 뒤에야 vmbr1에 연결된 실제 서비스 게스트로 전달됩니다.

기존처럼 공유기가 곧바로 서비스 VM으로 트래픽을 넘기는 구조가 아니라, 그 앞에 OPNsense라는 별도의 보안 계층을 하나 추가한 셈이죠.

OPNsense VM 구축

이제 제가 어떻게 구성했는지 알아보겠습니다.

네트워크 설정

VM 생성에 앞서, 네트워크 브릿지 생성을 먼저 해줍니다.

Proxmox Web UI에서 다음과 같이 Linux Bridge를 생성합니다.

이름은 vmbr1로 설정했습니다.

나머지는 비워 둡니다(설명을 작성해도 좋겠네요)

이렇게 하면 OPNsense와 게스트들이 연결할 네트워크 브릿지가 생성됩니다.

VM 생성

새 VM을 생성합니다.

OS 이미지는 https://opnsense.org/download/ 에서 다운로드 가능합니다.

또는 ROK FOSS 같은 국내 미러를 사용하실 수 있습니다.

iso 이미지가 필요하기 때문에 dvd로 선택해 주세요.

다운로드한 이미지로 VM을 생성합니다.

다음과 같이 설정합니다.

  • CPU 코어 수 2 (본인 장비의 CPU 성능을 고려하여 설정), CPU 유형 host
  • 메모리 4096MB
  • 머신 q35, BIOS OVMF, 사전 등록 키는 체크 해제(체크하면 보안 부팅때문에 부팅이 안될 수 있습니다.)
  • Storage 32GB (SSD라면 "ssd 에뮬레이션", "버리기" 가 성능과 저장 공간에 도움이 될 수 있습니다.)

생성 후 부팅 전에 다음과 같이 네트워크 디바이스를 하나 더 추가합니다.

브릿지를 vmbr1로 설정합니다.

생성한 VM을 부팅합니다.

설치

잠시 기다리면 로그인 화면이 나옵니다.

초기 계정은 root/opnsense입니다.. 만 이것은 설치된 것이 아니라 Live mode이기 때문에 먼저 설치를 해야 합니다.

설치를 위해서는 installer/opnsense 계정으로 로그인하면 됩니다.

키맵을 설정하는 화면이 나오는데, 엔터를 눌러 넘어갑니다.

기본값인 ZFS를 선택합니다(OPNsense 공식 문서에서 UFS보다는 ZFS를 권장합니다).
엔터를 눌러 넘어갑니다.

단일 디스크에 설치하는 환경이기 때문에, stripe로 설정합니다. 엔터를 눌러 넘어갑니다.

설치할 디스크를 선택하는 화면입니다. 스페이스를 눌러 선택하고 넘어갑니다.

YES를 선택하여 설치합니다.

이제 잠시 기다리면 설치가 완료됩니다.

그냥 나갈 수도 있고, 루트 비밀번호를 지금 바꾸고 나갈 수도 있습니다.

개인적으로 지금 설정하는 것을 추천합니다.

비밀번호를 바꾸고 Complete Install 을 눌러 나오는 다음 화면에서 재부팅을 눌러 재부팅합니다.

초기 설정

이제 방금 설정한 루트 계정으로 로그인하면 다음과 같은 화면이 나오게 됩니다.

몇 가지 설정을 진행하고 넘어갑니다.

1을 입력해 네트워크 인터페이스 설정을 조정합니다.

LAGG와 VLAN은 엔터(N)를 눌러 넘어가고

WAN에 쓸 인터페이스를 설정합니다.

여기서 WAN은 위에서 말했듯 실제 외부망이 아니라, 집 안 내부망이 됩니다(OPNsense 기준으로는 WAN이죠)

vtnet0으로 설정합니다.

LAN은 vtnet1이 됩니다.

아까 VM을 생성할 때, vmbr1을 나중에 추가했기 때문에 vtnet1이 LAN(vmbr1)이 됩니다만

확실하게 하기 위해 MAC 주소를 확인하는 것이 좋습니다.

y를 눌러 진행합니다.

다음으로 2를 입력해 OPNsense의 IP 주소를 설정합니다.

여기서 LAN은 OPNsense가 내부망에서 사용할 주소, 즉 vmbr1 쪽 IP가 되고, WAN은 외부망에서 사용할 주소, 즉 vmbr0 쪽 IP가 됩니다.

저는 LAN을 192.168.100.1, WAN을 192.168.79.210으로 설정했습니다.

이 부분은 각자의 네트워크 환경에 맞게 설정하면 됩니다.

특히 LAN 쪽 IP 대역은 현재 사용 중인 공유기 네트워크 대역과 겹치지 않도록 잡아야 합니다.

예를 들어, 공유기에서 사용하는 대역이 192.168.0.x라면

WAN은 192.168.0.100, LAN은 192.168.10.1처럼 서로 다른 대역으로 나누어 설정할 수 있습니다.

 

이 설정은 나중에 Web UI에서도 변경할 수 있지만,

처음 접속할 때 편하게 진행하기 위해 이 단계에서 미리 설정하고 넘어가는 것이 좋습니다.

Web UI에 로그인

이제 OPNsense Web UI에 로그인 할 차례이죠.

WAN(vmbr0쪽) 아이피를 브라우저에 입력해 봅니다.

Web UI가 뜰 것이라 기대하셨다면.. 아직 아닙니다.

OPNsense에서는 기본적으로 WAN 에서의 Web UI 접근은 물론, 사설 IP 대역의 패킷이 WAN으로 들어오는 것도 차단합니다. (보통 WAN에서 사설 IP 대역 패킷이 들어온다면 정상적인 트래픽은 아니겠지요.)

그럼 어떻게 해야 할까요?

우선 처음에는 vmbr1 대역에서 접속을 한 뒤에 설정을 풀어주면 쉽게 사용이 가능합니다.

Proxmox에서 웹 브라우저 사용이 가능한 아무 VM을 만들거나, 기존에 있던 VM을 활용해봅니다.

VM 설정에서 네트워크 어댑터 브릿지를 vmbr1에 붙이면 그 VM이 OPNsense 브릿지 대역에 들어가니 거기서는 접속이 가능해집니다.

저는 기존에 있던 우분투 VM을 활용했습니다.

설정한 LAN 아이피로 접속하고 로그인합니다.

잠시 기다리면 사진과 같이 Confiuration Wizard가 표시됩니다.

크게 건드릴 설정은 없고, 타임존만 변경해주세요.

언어에 한국어도 있지만, 쓰다 보면 약간 번역이 애매한 부분들이 있어서 (Drop이 "삭제" 로 번역되어 있다던가요..) 영어로 쓰게 되더라고요.

다음 화면에서 WAN 설정을 진행합니다.

이 글의 내용처럼 고정 IP 방식을 사용한다면, Gateway는 본인 네트워크의 공유기 IP를 입력하면 됩니다.

그 다음부터는 건드릴 설정이 없으므로, Next를 눌러 계속 진행합니다.

설정이 모두 완료되었습니다.

멋진 대시보드가 반겨줍니다.

마무리

여기까지 하면 일단 Proxmox 위에 OPNsense를 올리고, 네트워크를 분리한 뒤 Web UI에 접속할 수 있는 상태까지는 구성한 셈입니다.

처음에는 쉽게 방화벽 VM 하나를 중간에 추가하는 작업으로만 생각했는데..
실제로는 네트워크를 어떻게 나눌지, OPNsense를 어느 위치에 둘지, 그리고 WAN과 LAN을 어떤 기준으로 볼지까지 함께 고민해야 하는 작업이었습니다.

특히 제 환경처럼 집 공유기 아래에 OPNsense를 두고, 그 아래에 또 하나의 보호망을 만드는 구조에서는 이 부분을 정확하게 이해하고 가는 것이 중요했습니다. 안 그러면 나중에 고칠 수가 없어요..

이제 기본적인 구축은 끝났으니, 앞으로는 실제로 보호가 필요한 게스트들을 vmbr1 대역으로 옮기고, 방화벽 규칙이나 포트포워딩, 그리고 IDS/IPS 같은 기능들을 추가로 구성해 나가면 됩니다.

또 지금은 VM을 통해 Web UI에 접속하지만, 집 내부망 기기에서 편하게 접근할 수 있게 정적 라우팅 설정도 하면 좋습니다.

이 부분들은 내용이 길어지는 관계로, 다음 글에서 따로 정리해 보려고 합니다.

 

This article was updated on

Related post