본문 바로가기
IT/Proxmox

[네트워크] Proxmox 방화벽 규칙: 복잡한 홈랩 네트워크 보안 최적화

by 수누다 2026. 6. 10.

[네트워크] Proxmox 방화벽 규칙: 복잡한 홈랩 네트워크 보안 최적화

안녕하세요, 13년차의 서버실입니다. 홈랩을 운영하다 보면 네트워크 환경이 점점 복잡해지는 거, 저만 그런 거 아니죠? 처음엔 단출하게 시작했다가, VM(Virtual Machine)도 늘어나고, LXC(Linux Container)도 추가하고, 심지어는 IoT 기기들까지 연결하면서 보안은 뒷전이 되기 쉬운데요. 특히 Proxmox VE 위에서 다양한 서비스를 돌리다 보면, 각 VM이나 컨테이너 간의 트래픽을 어떻게 제어하고 보호할지가 큰 숙제가 됩니다.

오늘은 제가 직접 경험했던 복잡한 홈랩 환경에서 Proxmox 방화벽 규칙을 활용해서 네트워크 보안을 강화하고 트래픽을 최적화했던 실전 사례를 공유해볼까 합니다. 삽질 좀 하면서 배웠던 내용들을 솔직하게 풀어낼 테니, 혹시 비슷한 고민을 하고 계신다면 이 글이 조금이나마 도움이 되셨으면 좋겠습니다!

Proxmox 방화벽 규칙이 적용된 복잡한 홈랩 네트워크 아키텍처 다이어그램

홈랩 환경에서 Proxmox VE 호스트를 중심으로 VM, LXC, 라우터, 그리고 외부 인터넷까지 연결된 복잡한 네트워크 아키텍처를 보여주는 다이어그램입니다. 방화벽 아이콘이 중요하게 배치되어 있습니다.

Proxmox 방화벽 규칙 개념 파고들기: 쉽게 말해, 네트워크의 문지기

Proxmox 방화벽은 단순히 호스트(Host) 레벨에서만 작동하는 게 아니라, 개별 VM이나 LXC(컨테이너) 레벨에서도 세밀하게 제어할 수 있다는 게 큰 장점입니다. 쉽게 말해, 네트워크 트래픽의 문지기 역할을 하는 거죠.

  • 호스트(Host) 레벨 방화벽: Proxmox VE 서버 자체에 적용되는 방화벽입니다. 모든 VM/LXC 트래픽이 이 방화벽을 통과하거든요. 가장 바깥쪽에서 전체적인 보안 정책을 설정할 때 유용해요.
  • VM/LXC(Guest) 레벨 방화벽: 개별 가상 머신이나 컨테이너에 적용되는 방화벽입니다. 특정 서비스나 애플리케이션에 대한 접근을 세밀하게 제어할 때 쓰더라고요.

그리고 Proxmox 방화벽 규칙을 이야기할 때 빼놓을 수 없는 개념이 바로 Ingress(인그레스, 외부에서 내부로 들어오는 트래픽)Egress(이그레스, 내부에서 외부로 나가는 트래픽)입니다. 인그레스는 외부 공격으로부터 내부를 보호하는 데 중요하고, 이그레스는 내부 시스템이 불필요하거나 악의적인 외부 통신을 하는 것을 막는 데 필요하죠.

Proxmox 방화벽은 기본적으로 `iptables` 기반으로 동작합니다. 우리가 GUI나 CLI로 설정하는 내용들이 결국은 호스트의 `iptables` 규칙으로 변환되어 적용되는 방식이거든요. 이걸 직접 `iptables` 명령어로 관리할 수도 있지만, Proxmox의 통합된 관리 기능 덕분에 훨씬 편하게 관리할 수 있어요.

실전 구현: 복잡한 홈랩 서비스 보안 강화 사례

저희 홈랩에는 다음과 같은 서비스들이 운영되고 있었어요.

  • Web Server VM: Nginx 프록시 서버로, 외부에서 80/443 포트로 접근 가능해야 합니다.
  • Database Server LXC: PostgreSQL이 동작하며, Web Server VM과 일부 내부 관리 VM에서만 5432 포트로 접근 가능해야 합니다. 외부 접근은 절대 금지!
  • Management VM: 내부에서만 SSH(22번 포트)로 접근 가능하며, 다른 내부 VM들과 제한적인 통신이 필요합니다.
  • Monitoring LXC: Prometheus, Grafana가 동작하며, 내부 관리 VM에서 3000번 포트로 Grafana 접근이 가능해야 합니다.

이런 환경에서 제가 Proxmox 방화벽 규칙을 어떻게 적용했는지 단계별로 보여드릴게요.

1. 호스트 레벨 기본 정책 설정

가장 먼저 Proxmox VE 호스트의 방화벽을 활성화하고, 기본 정책을 설정합니다. 저는 Implicit Deny(암묵적 거부) 원칙을 좋아해서, 모든 트래픽을 기본적으로 차단하고 필요한 것만 허용하는 방식으로 설정했어요.

# 호스트 방화벽 활성화
pve-firewall start

# 기본 인그레스(Ingress) 정책: 모두 거부 (Drop)
pve-firewall set --input DROP

# 기본 이그레스(Egress) 정책: 모두 허용 (Accept) - 내부에서 외부로 나가는 트래픽은 일단 허용
pve-firewall set --output ACCEPT

# Proxmox GUI/SSH 접근을 위한 규칙 추가 (예시: 8006은 GUI, 22는 SSH)
pve-firewall rule add --action ACCEPT --proto tcp --dport 8006 --source 192.168.1.0/24
pve-firewall rule add --action ACCEPT --proto tcp --dport 22 --source 192.168.1.0/24

--source 192.168.1.0/24는 특정 내부 네트워크 대역에서만 접근을 허용한다는 의미입니다. 이렇게 하면 외부에서 Proxmox GUI나 SSH로 직접 접근하는 것을 막을 수 있거든요.

2. IPSet을 활용한 그룹 관리

여러 VM이나 LXC에서 공통적으로 접근해야 하는 IP 그룹이 있을 때, IPSet(아이피셋)을 사용하면 관리하기가 정말 편하더라고요. 저는 내부 관리용 IP 그룹을 만들어서 사용했어요.

# 'management-ips'라는 IPSet 생성
pve-firewall ipset add management-ips

# IPSet에 내부 관리용 IP 추가 (예시)
pve-firewall ipset add management-ips --cidr 192.168.1.100
pve-firewall ipset add management-ips --cidr 192.168.1.101

이렇게 설정하면 나중에 Proxmox 방화벽 규칙에서 --source +management-ips 처럼 깔끔하게 사용할 수 있어서 설정이 훨씬 간편해집니다.

3. 개별 VM/CT 방화벽 규칙 설정

이제 각 VM/LXC에 맞는 세부 규칙을 설정할 차례입니다.

Web Server VM (ID: 101)

  • 외부에서 80/443 포트 허용
  • 내부 DB Server LXC(ID: 102)로 5432 포트 Egress 허용
# VM 101의 방화벽 활성화
pve-firewall set --vmid 101 --enable 1

# 외부에서 80 (HTTP) 포트 인그레스(Ingress) 허용
pve-firewall rule add --vmid 101 --action ACCEPT --proto tcp --dport 80 --comment "Allow HTTP from external"

# 외부에서 443 (HTTPS) 포트 인그레스(Ingress) 허용
pve-firewall rule add --vmid 101 --action ACCEPT --proto tcp --dport 443 --comment "Allow HTTPS from external"

# DB Server LXC (ID 102)로 5432 포트 이그레스(Egress) 허용
pve-firewall rule add --vmid 101 --action ACCEPT --proto tcp --dport 5432 --dest 192.168.1.102 --direction out --comment "Allow DB access to DB Server"

Database Server LXC (ID: 102)

  • Web Server VM(ID: 101)과 내부 관리 IPSet에서만 5432 포트 인그레스 허용
  • 기타 모든 인그레스 트래픽 거부
# LXC 102의 방화벽 활성화
pve-firewall set --vmid 102 --enable 1

# Web Server VM (ID 101)으로부터 5432 포트 인그레스(Ingress) 허용
pve-firewall rule add --vmid 102 --action ACCEPT --proto tcp --dport 5432 --source 192.168.1.101 --comment "Allow DB access from Web Server"

# 내부 관리 IPSet으로부터 5432 포트 인그레스(Ingress) 허용
pve-firewall rule add --vmid 102 --action ACCEPT --proto tcp --dport 5432 --source +management-ips --comment "Allow DB access from Management IPs"

# 기본 인그레스(Ingress) 정책을 명시적으로 Drop으로 설정 (이게 중요!)
pve-firewall set --vmid 102 --input DROP

여기서 --input DROP을 명시적으로 설정해주는 게 정말 중요합니다. 이 규칙이 없으면 호스트 레벨의 기본 정책을 따르게 되는데, 만약 호스트 레벨이 ACCEPT라면 의도치 않게 DB가 외부에 노출될 수 있거든요. 저는 이 부분에서 삽질 좀 했습니다 ㅎㅎ.

Proxmox VE 웹 인터페이스에서 방화벽 규칙을 설정하는 화면

Proxmox VE 웹 인터페이스에서 특정 VM의 방화벽 규칙 설정 화면을 보여주는 스크린샷입니다. 인그레스/이그레스 규칙, 액션 (ACCEPT/DROP) 유형 등이 명확하게 표시되어 있습니다.

⚠️ 주의사항 & 트러블슈팅: 삽질하며 배운 것들

Proxmox 방화벽 규칙을 설정하면서 제가 겪었던 주요 삽질 경험과 해결책을 공유합니다. 혹시 비슷한 문제에 봉착하셨다면 참고해주세요!

  1. 규칙 순서의 중요성: Proxmox 방화벽 규칙은 위에서 아래로 순서대로 적용됩니다. 특정 트래픽을 DROP하는 규칙이 먼저 있다면, 그 뒤에 ACCEPT 규칙이 아무리 있어도 해당 트래픽은 이미 차단된 후라 소용이 없어요. 저는 특정 포트를 열었는데도 통신이 안 되길래 한참 헤맸습니다. 항상 넓은 범위의 DROP 규칙보다 좁은 범위의 ACCEPT 규칙이 먼저 오도록 배치해야 한다는 걸 배웠거든요. Proxmox GUI에서 규칙 순서를 쉽게 조정할 수 있으니 참고하세요.
  2. 로그 확인은 필수: 방화벽 규칙이 제대로 동작하는지, 어떤 트래픽이 차단되는지 확인하는 가장 좋은 방법은 로그를 보는 거예요. pve-firewall log 명령어를 사용하면 방화벽에 의해 처리된 트래픽 로그를 실시간으로 확인할 수 있습니다.이 로그를 통해 어떤 규칙에 의해 트래픽이 `DROP`되었는지, `ACCEPT`되었는지 알 수 있어서 트러블슈팅에 정말 도움이 됩니다.
  3. # Proxmox 호스트에서 방화벽 로그 확인 pve-firewall log # 특정 VM의 로그만 보고 싶다면 pve-firewall log --vmid 101
  4. `INPUT`/`OUTPUT` vs `IN`/`OUT`: Proxmox GUI나 CLI에서 direction 옵션으로 in(인그레스) 또는 out(이그레스)을 설정합니다. 하지만 pve-firewall set --input DROP 처럼 전체 정책을 설정할 때는 inputoutput을 사용하죠. 이게 처음엔 좀 헷갈리더라고요. Proxmox 방화벽 규칙 설정할 때 헷갈리지 않게 잘 구분해서 사용해야 합니다.
  5. Security Group 활용: 만약 여러 VM이나 LXC에 동일한 Proxmox 방화벽 규칙 세트를 적용하고 싶다면 Security Group(보안 그룹) 기능을 활용하면 정말 효율적입니다. 한 번 만들어두면 여러 게스트에 재사용할 수 있거든요. 다음 번에 기회가 된다면 Security Group을 깊이 다뤄볼게요.

검증 & 결과: 드디어 성공적인 네트워크 보안 구축!

Proxmox 방화벽 규칙을 적용한 뒤에는 반드시 제대로 동작하는지 검증해야 합니다. 저는 주로 다음과 같은 방법으로 확인합니다.

  1. Proxmox GUI 확인: 가장 직관적인 방법이죠. 각 VM/LXC의 방화벽 탭에서 규칙들이 제대로 등록되었는지 확인해요.
  2. pve-firewall status 명령어로 전체 상태 확인:
  3. # Proxmox 호스트 방화벽 상태 확인 pve-firewall status # 특정 VM의 방화벽 상태 확인 pve-firewall status --vmid 101
  4. iptables -L -n -v 명령어로 실제 적용된 규칙 확인: Proxmox 호스트에 SSH로 접속해서 실제 `iptables` 규칙이 어떻게 적용되었는지 확인하는 건 매우 중요합니다. Proxmox 방화벽이 내부적으로 `iptables`를 사용하기 때문에, 이 명령어를 통해 최종적으로 적용된 규칙의 세부 사항을 볼 수 있거든요.이 명령어를 보면 Proxmox가 생성한 `PVEFW-*` 체인들을 볼 수 있어요. 이 체인들이 우리가 설정한 Proxmox 방화벽 규칙을 담고 있는 거죠.
  5. # Proxmox 호스트에서 iptables 규칙 확인 iptables -L -n -v
  6. 외부/내부에서 nmap 스캔: 가장 확실한 검증 방법입니다. 의도적으로 차단되어야 할 포트가 열려있는지, 허용되어야 할 포트가 닫혀있는지 nmap으로 스캔해보는 거거든요.이 검증을 통해 제가 의도했던 대로 Web Server VM의 80, 443 포트만 외부에서 접근 가능하고, DB Server LXC의 5432 포트는 Web Server VM과 관리용 IP에서만 접근 가능하도록 설정되었음을 확인했습니다. 드디어 됐다! 🎉
  7. # 외부에서 Web Server VM (192.168.1.101)의 80, 443, 22, 5432 포트 스캔 nmap -p 80,443,22,5432 192.168.1.101 # Web Server VM (192.168.1.101)에서 DB Server LXC (192.168.1.102)의 5432 포트 스캔 nmap -p 5432 192.168.1.102
Proxmox 방화벽 규칙 적용 후 네트워크 트래픽 흐름 및 방화벽 로그 시각화

방화벽 규칙 적용 후, Proxmox VE 호스트와 VM/LXC 간의 네트워크 트래픽 흐름을 시각적으로 보여주는 다이어그램입니다. 로그 스니펫이 함께 표시되어 방화벽이 성공적으로 작동하고 있음을 나타냅니다.

마무리하며: 더 안전하고 효율적인 홈랩을 위해

오늘은 Proxmox 방화벽 규칙을 활용해서 복잡한 홈랩 환경의 네트워크를 최적화하고 보안을 강화했던 제 경험을 공유해드렸습니다. 처음엔 Proxmox 방화벽이 낯설고 `iptables`와의 관계도 헷갈려서 삽질 좀 했지만, 한번 제대로 설정해두니 든든하더라고요. 홈랩이 점점 커지면서 보안에 대한 고민이 많았는데, Proxmox 방화벽 덕분에 한시름 놓았습니다.

Proxmox 방화벽 규칙을 활용한 보안의 핵심은 Implicit Deny(암묵적 거부) 원칙을 가지고 필요한 트래픽만 명시적으로 허용하는 것이에요. 그리고 IPSet이나 Security Group 같은 기능을 활용해서 관리 효율을 높이는 것도 중요하죠. 무엇보다 중요한 건, 규칙을 설정한 뒤에는 반드시 로그를 확인하고 다양한 방법으로 검증하는 것입니다!

이 글이 여러분의 Proxmox 홈랩 보안 강화에 작은 도움이 되었기를 바랍니다. 다음 글에서는 Proxmox와 VPN을 연동해서 원격에서도 안전하게 홈랩에 접근하는 방법에 대해 다뤄볼까 합니다. 기대해주세요!

Proxmox 방화벽 규칙 설정 핵심 요약 및 유용한 팁 인포그래픽

Proxmox 방화벽 규칙 설정의 핵심 요약, IPSet 및 Security Group 활용 팁, 그리고 트러블슈팅 가이드가 포함된 인포그래픽입니다. 깔끔하고 이해하기 쉬운 디자인으로 제작되었습니다.