구축 배경
홈 랩을 확장하면서 가정용 Wi-Fi 네트워크와 홉 랩 인프라용 네트워크 간의 분리 및 격리, 라우팅 및 접근 제어 그리고 그 외 서비스에 필요한 기능 구현이 필요했습니다. 그래서 네트워크 최상단에 방화벽과 라우터 역할을 할 수 있는 OPNsense를 직접 구축해 보기로 했습니다.
이번 포스팅에서는 시리즈로 하드웨어 선정부터 설치, 구성과 방화벽 규칙 설정, 그리고 각종 서비스 설정까지 전반적인 내용에 대해서 다뤄보고자 합니다.
OPNsense란?
OPNsense는 pfSense와 m0n0wall을 기반으로 개발이 시작되어 2015년 1월에 첫 공식 릴리즈가 이루어진 FreeBSD 기반의 오픈소스 방화벽 및 라우팅 플랫폼입니다. 발표된 지 딱 10년이 된 프로젝트로 Deciso B.V.에 의해 설립되었으며 지금까지 꾸준한 개발과 업데이트가 이루어지고 있습니다. 매주 보안 업데이트를 제공하고 있으며, 연간 2회의 주요 릴리즈 업데이트도 제공하고 있는 엔터프라이즈급 방화벽 소프트웨어입니다.
웹 기반의 직관적인 사용자 인터페이스를 통해 복잡한 네트워크 설정을 비교적 쉽게 관리할 수 있으며, 다양한 기능들을 제공합니다. 방화벽의 기본이 되는 IDS/IPS와 같은 보안 기능과, 상태 기반 패킷 검사 기능을 제공하며 VPN(IPsec, OpenVPN, Wireguard), DNS, DHCP와 같은 네트워크 서비스 및 모니터링과 리포팅 기능, 각종 서드파티 플러그인 등 정말 다양한 기능을 제공합니다. 또한 오픈소스의 장점인 검증 가능한 소스 코드를 통해 높은 신뢰성도 보장하고 있습니다.
OPNsense
OPNsense has 20 repositories available. Follow their code on GitHub.
github.com
개인적으로는 OPNsense만 잘 활용해도 중규모 수준의 엔터프라이즈 네트워크 환경의 경계 방어에는 문제가 없지 않을까 생각할 정도로 강력한 기능들을 제공합니다.
하드웨어 사양
강력한 기능을 가진 OPNsense를 물리장비로 구현하기 위해서는 안정적인 하드웨어가 필요합니다. OPNsense의 공식 문서를 살펴보면 아래와 같이 필요한 하드웨어 사양을 확인할 수 있습니다.
Minimum
Processor | 1 GHz dual core cpu |
RAM | 2 GB |
Intall methos | Serial console or video (vga) |
Install target | SD or CF card with a minimum of 4GB, use nano images for installation. |
Reasonable
Processor | 1 GHz dual core cpu |
RAM | 4 GB |
Intall methos | Serial console or video (vga) |
Install target | 40 GB SSD, a minimum of 2 GB memory is needed for the installer to run. |
Recommended
Processor | 1.5 GHz multi core cpu |
RAM | 8 GB |
Intall methos | Serial console or video (vga) |
Install target | 120 GB SSD |
Throughput
Throughput (Mbps) | Hardware requirements | Feature set | User / Networks |
11-150 | Basic spec. | narrowed | adjusted (10-30) |
11-150 | Minimum spec. | reduced | adjusted (10-30) |
151-350 | Reasonable spec. | all | substantial (30-50) |
350-750+ | Recommended spec. | all | substantial+ (50-150+) |
Mbps (Mbit/s or Mb/s) - Megabit per seccond - 1,000,000 bits per second |
또한, 문서에는 FreeBSD 하드웨어 목록 및 권장사항에서 이야기하는 Intel 네트워크 인터페이스를 추천하고 있었습니다. 위 표와 네트워크 인터페이스 추천을 바탕으로 아래 두 가지 기준에 맞는 하드웨어를 찾아보았습니다.
- Recommended 수준의 하드웨어 스펙
- 네트워크 인터페이스는 Intel로...
역시 없는 게 없는 알리... 알리익스프레스에서 마침 알맞은 제품을 찾을 수 있었습니다. Topton Mini PC 제품으로 특이하게도 따로 제품 명이 있는 것이 아니라 '12세대 방화벽 라우터 인텔 N100 i226-V 팬리스 미니 PC...' 주저리주저리 길게 제품 스펙을 나열해 둔 것이 특징입니다. 뭐랄까... 디자인은 개나 줘버린 맛으로만 승부하는 막걸리 패키징 같은 느낌? 어쨌든 생긴 건 아래와 같습니다.
제품 이름에서도 알 수 있지만 그 스펙을 살펴보면 우선 프로세서는 Intel의 N100 프로세서로 4 코어 4 스레드의 스펙을 가지고 있습니다. RAM과 SSD는 옵션으로 고를 수 있는데, 저는 8GB RAM과 128GB SSD 옵션을 선택하여 Recommended 스펙에 딱 맞추었습니다. 네트워크 인터페이스가 상당히 인상적인데 Intel의 i226-V 2.5G RJ45를 6개나 제공한다는 것입니다. 후기도 제법 있고 Youtube에도 영상이 좀 있는 것으로 보아 괜찮아 보여 구매를 결정했습니다. 처음 받았을 때는 기본적으로 pfSense가 설치되어 있는데 아무래도 좀 찜찜해서 완벽하게 삭제해 주고, OPNsense를 설치했습니다. 결론적으로 말씀드리면 지금까지 아무런 문제 없이 준수한 성능을 발휘하고 있습니다. 아무래도 제조사 측에서 산업용으로 분류하는 제품이라 그 내구성도 나쁘지 않을 것 같습니다.
OPNsense 설치를 위한 준비
OPNsense를 설치하기 위해서 우선 부팅 USB를 만들어야 합니다. https://opnsense.org/download/에 접속하여 vga 형식의 image 파일을 다운로드합니다. 여러 가지 방식이 있는데 만약 VM에서 테스트를 해보고 싶으시다면 dvd 형식의 image를 다운로드하여도 됩니다. Windows를 사용하는 경우에는 Rufus를, MacOS를 사용하는 경우에는 balenaEtcher를 사용하여 부팅 USB를 만들 수 있습니다. MacOS의 경우에는 기억이 좀 가물가물한데, CLI 환경에서 명령어를 통해 만들었던 것 같기도 합니다.
아래 내용은 셀프 구축한 방화벽의 하드웨어 장비 설치부터 OPNsense 배포, 그리고 간단한 설정에 대한 내용을 다룰 예정입니다. 단, 저는 이미 하드웨어로 설치를 마무리하였기 때문에, OPNsense 배포와 그 후 설정 과정은 가상환경에서 VM을 통해 보여드리도록 하겠습니다. 본 포스팅에서는 2025년 2월 현재 최신 버전인 OPNsense 25.1 Ultimate Unicorn 버전을 기준으로 합니다.
OPNsense 설치
1. 물리적 네트워크 토폴로지
이번 포스팅에서 다룰 네트워크의 물리적 구성은 위와 같습니다. 특별할 것은 없지만, 이것이 기본이 되어 여러 네트워크 구성에 참고가 되었으면 합니다. 그리고 방화벽이나 라우터에 직접 호스트를 연결하는 경우는 극히 드물지만, 간단한 예시 환경인 것을 감안해 주시면 감사하겠습니다.
2. 네트워크 포트 연결
우선 통신사 모뎀과 OPNsense 방화벽이 될 물리 장비의 포트를 케이블로 연결합니다. 이번 실습에서는 ETH 0를 사용하겠습니다. 나머지 포트는 Host 1과 Host 2에 연결해 줍니다. 가상 환경에서 이 포스팅 내용을 따라 하신다는 해당 가상 환경에 맞도록 위와 같이 설정해 주시면 되겠습니다.
3. USB 또는 IOS 이미지를 통한 부팅
다음으로 할 작업은 USB를 미니 PC의 첫 번째 부팅 매체로 설정하는 것입니다. Topton Mini PC의 경우 전원을 넣고 F2 키를 누르면 BIOS로 진입합니다. 메뉴에서 부팅 순서를 찾아 USB가 첫 번째 부팅 순서를 가지도록 설정한 후 저장하고 재부팅합니다. 아마 가상환경이라면 부팅 이미지를 마운트 하면 자동으로 부팅이 될 것입니다.
4. OPNsense Install
OPNsense로 부팅을 하게 되면 위와 같은 화면이 잠깐 나왔다가 금방 다음 단계로 넘어갑니다. 스스로 하드웨어도 확인하고, 중간에 사용자가 직접 개입할 수 있는 구간도 있지만 우선은 완전히 부팅이 될 때까지 기다립니다. 그럼 아래와 같은 화면을 만나게 됩니다.
위 화면에 출력된 내용을 자세히 살펴보겠습니다. 우선 2개의 인터페이스를 설정한 모습입니다. LAN으로 vmx0 인터페이스를, WAN으로 vmx1 인터페이스를 설정하고 있습니다. 그리고 현재 OPNsense가 라이브 모드로 실행되고 있다고 알려주고 있으며, 'root'로 로그인하면 그대로 라이브 모드로 사용을 하는 것이고, 'installer'로 로그인하면 설치를 시작할 수 있다고 합니다.
기본적으로, OPNsense는 첫 번째 인터페이스를 LAN으로 설정하며 192.168.1.1을 이 인터페이스의 주소로 가지게 됩니다. 또한 WAN은 DHCP 모드로 설정되어 있어 만약 DHCP로 IP를 받은 인터페이스가 있다면 그 인터페이스가 WAN 인터페이스가 될 것입니다. 어쨌든, 기본 설정은 우리가 원하는 설정이 아닙니다. 거기다가 라이브 모드의 경우 기기가 재부팅되면 기존 설정들이 모두 사라지기 때문에 곤란하기도 하구요. SSD나 HDD에 영구적으로 설치를 위해 'installer'로 로그인을 합니다. 초기 비밀번호는 'opnsense'입니다.('root'의 경우에도 로그인 비밀번호는 'opnsense'로 동일합니다.)
키보드 맵은 기본값을 사용하면 됩니다. 이 화면에서는 바로 Enter를 입력합니다.
다음 화면은 파일 시스템 선택 및 다양한 설치 메뉴에 대한 내용입니다. 우리는 처음 설치이니 위 두 개 메뉴인 ZFS와 UFS 중 하나를 선택하고 설치하면 됩니다. 두 파일 시스템에 대한 설명은 간략하게 표로 정리해 보았습니다.
ZFS(Z File System) | 더 현대적이고 고급 기능을 제공하는 파일 시스템 |
데이터 무결성 검사와 자동 복구 기능이 내장 | |
스냅샷, 압축, 중복제거 등 고급 기능 제공 | |
RAID 기능이 파일 시스템 레벨에서 통합 | |
최소 8GB RAM 권장 | |
UFS(Unix File Sysmtem) | 더 전통적이고 가벼운 파일 시스템 |
적은 시스템 자원으로도 동작이 가능(최소 2GB RAM) | |
ZFS에 비해 단순한 구조로 트러블슈팅에 용이 | |
기본적인 파일 시스템 기능에 충실 | |
오랜 기간 검증된 안정성 |
하드웨어 사양이 충분하다면 ZFS를, 제한적이라면 UFS를 선택하는 쪽이 좋아 보입니다. 저는 ZFS를 선택해 보겠습니다.
다음 화면은 RAID를 선택하는 것입니다. 우선은 SSD가 하나이므로 'stripe'를 선택하겠습니다. 필요에 따라 RAID를 선택하면 되겠습니다.
하나의 디스크만이 있으므로 해당 디스크를 선택합니다. 스페이스바를 누르면 대괄호 안에 '*'가 생기는데 이것이 바로 디스크가 선택된 것입니다. Enter를 입력하여 다음 화면으로 넘어갑니다.
설치를 진행하면 디스크의 기존 데이터가 삭제된다는 경고가 표시됩니다. 화살표키로 'YES'를 선택한 다음 Enter를 입력합니다.
본격적인 설치가 진행됩니다. 자동으로 진행되므로 설치가 마무리될 때까지 잠깐 기다리도록 하겠습니다.
설치가 완료되면 위와 같은 화면이 등장합니다. Root의 비밀번호를 변경하거나, 설치 절차를 마무리하고 재부팅을 할 수 있습니다. 우선 Root 비밀번호 변경을 진행해 보겠습니다.
Root 비밀번호는 앞으로 CLI 환경, 또는 Web UI 환경에서도 사용되므로 미리 변경해 주는 것이 좋습니다. 지금 변경하지 않더라도, 다음에 Web UI 환경에서 설정을 통해 변경할 수도 있습니다. 변경된 비밀번호 확인하기 위해 다시 한번 입력해 주고 'Complete Install' 메뉴를 선택하고 Enter를 입력합니다. 이렇게 되면 재부팅을 하고 나면 설치 절차가 마무리됩니다.
5. 최초 인터페이스 설정
재부팅이 완료되고 나면, 사용자 ID를 'root'로 하고 앞선 설치과정에서 설정했던 비밀번호로 로그인을 합니다.
이제 본격적으로 인터페이스 설정에 들어갑니다. '1'을 입력하고 Enter를 입력합니다.
'1) Assign interfaces' 모드에 들어가면 가장 먼저 LAGG 설정이 있는지 물어봅니다. OPNsense LAGG란 Link Aggregation, Bonding, Fault Tolerance 등을 위한 기능으로 네트워크를 조금 공부해 보신 분들이 라면 잘 아시리라 생각합니다. 쉽게 말해서 2개 이상의 인터페이스를 묶어서 하나의 인터페이스터럼 사용하는 기술입니다. 이번 실습에서는 이를 사용하지 않을 예정이므로 'n'을 입력합니다. 다음으로 VLAN 설정을 하게 되는데 역시 'n'을 입력하고 넘어갑니다. 그러면 현재 기기에 있는 네트워크 인터페이스 목록을 보여줍니다. 저의 경우 가상머신이라 'vmx0'과 같은 인터페이스 명을 가지고 있습니다. 실제 물리장비에서는 'igc2'와 같은 이름이 출력됩니다.
저는 첫 번째 인터페이스인 'vmx0'을 통신사 모뎀과 연결된 인터페이스(물리 장비의 ETH 0 인터페이스)인 WAN 인터페이스로 사용하겠습니다. 실제로는 DHCP를 통해 공인 IP 주소를 받아오지만, 이번 포스팅에서는 가상 환경에 해당 대역대에는 DHCP 서비스를 하지 않고 있어 static으로 설정할 것입니다.
다음은 LAN 인터페이스 설정입니다. 이름 그대로 로컬 네트워크로 사용할 인터페이스입니다. 이 인터페이스는 조금 중요한데, 최초 설정을 마무리하고 다른 설정들을 위해 해당 Web UI 접속을 위한 인터페이스이기 때문입니다. LAN 인터페이스로 'vmx1'을 입력하고 Enter를 입력하면 다른 인터페이스를 추가로 설정할 수 있습니다. 우선은 빈 값으로 Enter를 입력하여 넘어갑니다. Web UI를 통해 설정할 것이기 때문입니다. 마지막으로 지금까지의 설정대로 구성을 진행할 것인지를 물어보는데 'y'를 입력하고 Enter를 입력합니다.
이렇게 최초 인터페이스 설정이 마무리되었습니다. LAN 인터페이스에 기본 OPNsense의 default IP 주소인 192.168.1.1이 부여된 것을 확인할 수 있습니다.
6. Web UI를 활용한 OPNsense 설정
마지막 단계로 Web UI를 활용하여 OPNsense 설정을 해보도록 하겠습니다. 그러기 위해서는 우선 앞선 네트워크 토폴로지에서 등장했던 'Host 1'을 준비해야 합니다. 저는 역시 VM을 사용하여 Ubuntu 22.04 Desktop으로 준비하였습니다.
OPNsense의 LAN 인터페이스와 동일한 네트워크에 위치할 수 있도록 VM의 IP 주소를 192.168.1.2로 설정하였으며, Gateway는 192.168.1.1, DNS는 8.8.8.8로 설정하겠습니다. 그리고 웹 브라우저를 통해 192.168.1.1로 접속합니다.
OPNsense는 기본적으로 사설 인증서를 내장하고 있어서, 웹 브라우저를 통해 접근하면 보안 경고가 발생됩니다. 이를 무시하고 접속하면 Web UI에 접근할 수 있습니다.
앞선 CLI 환경에서 사용하던 사용자 이름(root)과 비밀번호를 사용하여 접속합니다.
최초에 접속하면 이와 같이 Wizard가 실행됩니다. 이를 통해 설정을 진행할 수 있습니다.
처음에는 이 방화벽의 Hostname과 Domain, 언어, DNS 등을 설정할 수 있습니다. 언어에는 한국어도 지원하므로 한국어를 설정하셔도 됩니다. 다만 번역이 아직 다소 부자연스러운 부분이 있습니다. 이번 포스팅에서는 기본값을 그대로 사용하도록 하겠습니다. DNS Server는 Primary와 Secondary를 설정할 수 있습니다. 아래 Override DNS 체크박스가 체크되어 있으면 WAN이 DHCP로 주소가 설정될 때, ISP에서 제공해 주는 DNS 서버로 설정을 덮어쓰게 됩니다. 따라서 저는 이 체크박스를 해제하고 8.8.8.8과 1.1.1.1을 지정해 주었습니다. 그 아래 Unbound DNS의 경우 설정을 건드리지 않고 넘어가겠습니다.
다음으로 Timezone 설정입니다. 현재 위치한 지역의 Timezone으로 설정하고 다음 단계로 넘어갑니다.
이번에는 WAN 인터페이스에 대한 설정입니다. 앞선 CLI 환경에서는 어떤 인터페이스를 WAN 인터페이스로 사용할지에 대한 설정이었다면, 이곳에서는 WAN 인터페이스의 IP 주소라던지, 다른 네트워크 요소들에 대한 설정을 할 수 있습니다. 만약 ISP로부터 공인 IP를 공급받거나, 혹은 내부적으로 사용 시에도 WAN 인터페이스가 연결된 네트워크에 DHCP 서비스가 작동 중이라면 이 설정을 DHCP로 그대로 두어도 상관없습니다. 실제 제가 구축한 홈 랩에도 최상단 방화벽의 WAN 포트는 DHCP로 작동하고 있습니다.
본 포스팅에서는 OPNsense의 WAN 인터페이스가 연결된 네트워크에 DHCP 서비스가 없으므로, 이를 Static으로 설정하겠습니다.
WAN interface의 IP 주소를 192.168.100.250으로 하고 Subnetmask를 255.255.255.0으로 설정합니다. 추가로 WAN이 속한 네트워크의 게이트웨이 주소를 Upstream Gateway 주소로 입력해 줍니다. 그럼 인터넷으로 전달되어야 할 트래픽들이 Gateway로 보내지게 됩니다.
다음은 LAN 인터페이스 설정인데, 이것은 그대로 두고 넘어가도록 하겠습니다.
마지막으로 Root 계정의 비밀번호를 설정합니다. 앞선 설치 과정에서 설정하였다면 그대로 넘어가도 좋고, 만약 설정하지 않았다면 보안상 여기에서 다른 복잡한 비밀번호로 설정하는 것을 권장드립니다. 저는 앞선 설치과정에서 설정하였기 때문에 여기에서는 다음 단계로 넘어가도록 하겠습니다.
설정이 완료되면 위와 같은 화면이 나타납니다. 이제 대시보드로 접근해 보겠습니다.
OPNsense의 대시보드입니다. 지난 24년 하반기 패치 때 실시간 트래픽 그래프, 원형 그래프 등이 업데이트되어 한눈에 여러 가지 정보를 확인할 수 있게 되었습니다. 우측 상단에 연필 모양을 클릭하여 대시보드의 위젯을 추가하거나 위치를 변경할 수도 있습니다.
이것으로 OPNsense 설치에 관련한 첫 번째 포스팅을 마치려 합니다. 다음 편에서는 방화벽 Rule을 설정하여 서로 다른 네트워크 간의 통신을 차단하거나 허용하는 기본적인 방화벽 사용에 대한 내용과, 부가적인 기능들을 설정하는 방법에 대해서 알아보도록 하겠습니다.
▼ OPNsesne로 방화벽 추구하기 [2편]
OPNsense로 방화벽 구축하기 [2편]
앞선 포스팅 OPNsense로 방화벽 구축하기 [1편]에서 이어집니다. 1편을 먼저 보고 읽어보시길 추천드립니다. OPNsense로 방화벽 구축하기 [1편]구축 배경 홈 랩을 확장하면서 가정용 Wi-Fi 네트워크와
tech-recipe.tistory.com
'System > System & Service' 카테고리의 다른 글
OPNsense로 방화벽 구축하기 [3편] (2) | 2025.03.08 |
---|---|
OPNsense로 방화벽 구축하기 [2편] (0) | 2025.02.25 |
[Ubuntu 20.04] Tomcat 서버 구축 - 2편 (0) | 2023.08.12 |
[Ubuntu 20.04] Tomcat 서버 구축 - 1편 (0) | 2023.08.10 |
[Ubuntu 20.04] OpenVPN을 활용한 VPN 서비스 구축 (2) | 2023.06.30 |