1. 수정하는 이유
지난번에 구성한 네트워크 구조를 조금 손보려고 한다.
굳이 지금까지 문제없이 잘 쓰던 네트워크 구성을 손보는 이유는 다음과 같다.
가. Default network를 비우고 싶다.
Default Network는 초기 테스트나 임시 연결 용도로만 사용할 예정.
아무래도 시스템이 자동으로 생성한 기본 네트워크라 장치를 연결하고 서비스를 운영하는 것에 적합하지 않아 보인다.

실제로 Unifi에서 VLAN을 격리시키는 옵션을 활성화해도 Default → 다른 모든 VLAN으로의 통신은 Drop 하지 않는다.
(Default Network → 다른 VLAN으로의 통신을 따로 차단해야 할지 모르겠다.)
나. Zone-Based Firewall

얼마 전부터 Unifi에서 Zone-Based Firewall를 사용하라고 추천하고 있다.
장기적으로 Unifi가 Zone-Based Firewall에 더 집중할 것 같아서 이번 기회에 옮기고자 한다.
다. 반갑지 않은 손님들

생전 처음 보는 국가에서 자꾸 방문하신다.
한동안 개인적으로 힘든 일 때문에 홈서버에 관심을 갖지 못했는데 어느 순간부터 엄청 방문해 주신다.
IDS/IPS도 최고 수준으로 높이고, 국가별 접근 제한도 강화했는데 여전히 방문해 주신다.
가끔 DDoS도 해주시길래 이 참에 보안도 강화할 겸 전체적으로 손보려고 한다.
2. 준비하기

시작하기 앞서 작업이 완료되기 전까지 모든 포트포워딩을 해제하여 외부로부터의 모든 접속을 차단한다.

모든 VM과 컨테이너를 종료한다.
Default network에 있는 Proxmox Host를 다른 네트워크로 이동시킨다.
IP를 수정하는 방법은 앞서 다룬 적 있으니 참고한다.

우선 라우터에서 Fixed IP를 수정한 다음 Proxmox IP를 변경한다.


3. ZBF 사용법
ZBF는 논리적인 Zone으로 그룹화하고, 그들 간의 트래픽 흐름을 제어하는 매우 직관적인 관리 방식이다.

기본적으로 Predefined Zone을 제공한다.
각 Predefined Zone의 종류 및 역할, 각 Zone 간의 동작 방식은 다음과 같다.
| Zone 종류 | 역할 및 기본 동작 내용 |
| Internal | 내부 신뢰망, 기본적으로 내부→외부는 허용, 내부→내부는 자유 통신 |
| External | 인터넷/외부로의 트래픽을 제어하는 미신뢰 영역 |
| Gateway | GW 자체 관련 트래픽(DHCP, DNS, 관리 등)에 해당. 관리 콘솔 접근. |
| VPN | 원격 접근 및 사이트 간 VPN 트래픽 허용 영역 |
| Hotspot | 게스트 Wi-Fi 전용, 내부 네트워크와 분리된 제한 영역 |
| DMZ | 외부 노출 리소스(웹/메일 서버 등)의 접근 전용 영역 |
| Custom Zone | 특별 목적별 네트워크 구역. 기본은 차단, 필요시 정책 추가 |

그리고 사용자의 필요에 따라서 Custom Zone도 정의할 수 있다.

누른다!

누른다!!

빠밤!
4. Zone 생성
VLAN 재구성한다.
불필요한 VLAN을 삭제하고, 더 단순하게 방화벽을 구성하기 위해서 일부 장치들을 다른 VLAN으로 옮긴다.
필요한 Zone을 생성한다.
가. Hotspot

일단 신뢰할 수 없는 게스트 장치를 위한 Hotspot VLAN을 생성한다.
라우터에 연결된 사무용 PC를 비롯한 신뢰할 수 없는 디바이스를 위한 VLAN이다.
이 네트워크는 기본적으로 “클라이언트 간 격리(Client Isolation)” 개념이 적용되어 있어서, 같은 VLAN에 붙어 있더라도 디바이스 간 직접 통신은 차단된다고 한다.
나. DMZ

Nginx Proxy Manager가 위치할 DMZ VLAN을 생성한다.

당연히 Proxmox에서 VLAN ID를 변경해 준다.
Unifi에서는 Static IP와 Port forwarding을 수정해야 한다.
Port forwarding은 아래에서 수정하겠다.
다. Internal
다음으로 같은 Zone에 속한 VLAN 간에 서로 통신이 불가능한 Internal 4개가 필요하다. (나의 경우엔)

각각 Management, Service 1, Private, Develop으로 이름을 바꾼다.

외부와 완벽하게 격리되는 Isolated Internal과 DMZ를 거쳐서 제한적으로 접근 가능한 Served Internal을 추가한다. (이름은 내 마음이다.)
VLAN, Zone 설정이 마무리된 상태고 이제 필요한 방화벽 규칙만 추가하면 된다.
5. 방화벽 수정

시작하기에 앞서 예전에 추가한 방화벽 규칙을 모두 삭제한다.
처음부터 다시 구축하는 것이 더 빠르다.
새로운 Custom Zone을 생성하면 기본적으로 거의 모든 것을 차단하기 때문에 손볼 것이 거의 없다.
가. External → DMZ 접근 허용

Before

after
이번에 포트포워딩에서도 Object를 사용할 수 있게 업데이트해서 두 줄로 끝이다. (unifi 또 당신입니까)

심지어 포트포워딩 수행 시 External → DMZ로의 접근 허용 규칙은 자동으로 추가된다 😉

unifi는 정말 chill하다
나. Reverse Proxy 접근 허용
NPM에서 Authentik과 immich로의 접근 허용해야 한다.

DMZ에서 Service 1으로 80과 443 TCP/UDP를 허용하면 된다.

그러면 자동으로 Service 1 → DMZ로의 return도 허용된다 😉

이번에 변경된 IP가 있어서 NPM 설정도 수정했다.
다. IP 블랙리스트 적용

External → DMZ로 들어오는 traffic에 대하여 IP 블랙리스트를 운용한다.
라. VPN
각자 VPN server마다 필요한 접근 권한을 추가하거나 제한하면 된다.
결과적으로 디바이스를 추가하거나 제거하기 쉬워지고 방화벽을 유지보수하기 굉장히 쉬워졌다.
또한 Zone들과의 상호작용만 파악하면 전체 네트워크의 흐름을 파악할 수 있어서 좋은 거 같다.