Giới thiệu vấn đề
Đồng hồ điểm 2 giờ sáng, màn hình điện thoại chợt sáng đèn với một alert đỏ chói: “Critical network issue detected on internal services.” Cảm giác đó, hẳn anh em IT cũng quen mặt. Sau vài cú ssh vào các node Proxmox, nhận ra ngay là một con VM dev nào đó đang làm loạn, hoặc tệ hơn, có nguy cơ lộ lọt dữ liệu ra ngoài.
Trong homelab của mình, với 12 VM và container trên Proxmox VE, mình coi đây là một ‘playground’ để thử nghiệm mọi thứ trước khi đưa lên môi trường thật. Tuy nhiên, việc quản lý, tách biệt và bảo mật các phân đoạn mạng ở đây luôn là một thách thức lớn. Nếu không có một hệ thống rõ ràng, mọi thứ có thể biến thành một mớ bòng bong không lối thoát.
Những lúc như vậy, tôi biết mình cần một giải pháp nghiêm túc hơn là chỉ dựa vào firewall mặc định của hypervisor. Dù Proxmox hay KVM có các tính năng mạng cơ bản, chúng không đủ để đáp ứng nhu cầu phân luồng hoặc kiểm soát truy cập sâu.
Bạn cũng khó có thể triển khai VPN gateway như với một thiết bị firewall/router chuyên dụng. Cứ thử tưởng tượng bạn có một database server, một web server, và một dev machine – tất cả đều chung một mạng phẳng, không có ranh giới rõ ràng. Một lỗi cấu hình nhỏ trên dev machine cũng có thể ảnh hưởng tới database, hoặc tệ hơn, mở cửa cho những kẻ không mời mà đến.
Đó là lúc tôi bắt đầu nhìn về OPNsense hay pfSense – những giải pháp firewall/router mã nguồn mở mạnh mẽ, có thể biến thành một bức tường lửa ảo kiên cố ngay trong môi trường ảo hóa của chúng ta. Mục tiêu không chỉ là chặn đứng những rủi ro từ bên ngoài. Chúng còn giúp tạo ra các “vùng an ninh” riêng biệt bên trong hệ thống ảo.
Điều này đảm bảo mỗi ứng dụng, mỗi dịch vụ đều được bảo vệ đúng mức. Quan trọng nhất, ta có thể kiểm soát được luồng dữ liệu giữa chúng. Nó giống như việc mình tự tay thiết kế và xây nên một pháo đài nhiều lớp cho “cơ ngơi” ảo của mình vậy.
Khái niệm cốt lõi
Trước khi đi sâu vào các bước cấu hình cụ thể, mình cần nắm rõ một vài khái niệm nền tảng. Đây là những thứ mình đã vật lộn để hiểu rõ khi bắt đầu xây dựng hệ thống của riêng mình, và tin rằng nó sẽ giúp anh em đỡ đau đầu hơn.
OPNsense và pfSense là gì?
Chúng là hai hệ điều hành firewall/router mã nguồn mở mạnh mẽ, xây dựng trên FreeBSD, biến máy ảo thành thiết bị mạng chuyên nghiệp. Chúng cung cấp firewall, routing, VPN Gateway, load balancing, IDS/IPS… Mình dùng chúng để quản lý luồng mạng giữa các máy ảo và ra Internet. Mình chuộng OPNsense hơn chút vì giao diện hiện đại, nhưng pfSense cũng rất ổn định.
Tại sao cần Firewall/Router ảo trong KVM/Proxmox?
Dựa vào firewall mặc định của hypervisor hay từng VM là chưa đủ. Firewall ảo giúp:
- Phân đoạn mạng: Tách các VM thành các zone riêng biệt (web, database, dev). Firewall là điểm giao cắt duy nhất, mọi traffic đều được kiểm tra.
- Kiểm soát chi tiết: Tạo quy tắc cụ thể: Web VM chỉ truy cập DB trên port 3306 từ một IP nhất định.
- Quản lý tập trung: Quản lý firewall tại một nơi duy nhất thay vì trên từng VM.
- Tính năng nâng cao: VPN, IDS/IPS cho bảo mật toàn diện.
Các thành phần mạng ảo trong KVM/Proxmox
Để firewall ảo hoạt động, cần hiểu:
- Linux Bridge (
vmbrXtrên Proxmox,brX/virtual network trên KVM): Các “switch ảo” cho VM kết nối. Sẽ tạo nhiều bridge để phân tách WAN, LAN. - Virtual Network Interface Card (vNIC): Mỗi VM có vNIC, cắm vào bridge. Firewall ảo cần ít nhất 2 vNIC: một cho WAN, một cho LAN.
Hiểu rõ những điều này sẽ giúp quá trình cấu hình trôi chảy hơn.
Thực hành chi tiết
Được rồi, lý thuyết đủ rồi. Giờ là lúc chúng ta phải đối mặt với thực tế: Làm sao để biến những ý tưởng kia thành một hệ thống mạng ảo bảo mật hoạt động trơn tru. Nhớ lại cái cảm giác 2 giờ sáng, mình cần sự chính xác tuyệt đối ở đây.
1. Chuẩn bị môi trường mạng trên Hypervisor
Mình cần tạo các “cổng” mạng ảo trên Proxmox host.
Mục tiêu:
- Mạng WAN: Kết nối ra Internet, thường là
vmbr0(bridge với card mạng vật lýeno1). - Mạng LAN: Mạng nội bộ cho các VM,
vmbr1(hoàn toàn ảo, không gắn vật lý).
Trên Proxmox VE Host (chỉnh sửa /etc/network/interfaces):
# File: /etc/network/interfaces
# ... (cấu hình hiện có của vmbr0 nếu đã có) ...
auto vmbr0 # Mạng WAN
iface vmbr0 inet static
address 192.168.1.10/24 # IP Proxmox host trên WAN
gateway 192.168.1.1
bridge-ports eno1 # Thay 'eno1' bằng card vật lý của bạn
bridge-stp off
bridge-fd 0
auto vmbr1 # Mạng LAN ảo
iface vmbr1 inet static
address 10.0.0.1/24 # IP tùy chọn cho Proxmox host trên LAN
bridge-ports none
bridge-stp off
bridge-fd 0
Áp dụng: systemctl restart networking
2. Tạo máy ảo cho OPNsense/pfSense
Tạo một VM mới trên Proxmox với:
- OS type: Other (FreeBSD 64-bit)
- CPU: 1-2 cores, RAM: 1GB-2GB, Disk: 8GB-16GB
- Network Devices:
- Net0 (WAN): Bridge
vmbr0, ModelVirtIO. - Net1 (LAN): Bridge
vmbr1, ModelVirtIO.
- Net0 (WAN): Bridge
Sử dụng qm create trên Proxmox CLI:
VMID=101 # ID tùy chọn
ISO_PATH=/var/lib/vz/template/iso/OPNsense-24.1.amd64.iso
STORAGE=local-lvm
qm create $VMID --name opnsense-fw --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --net1 virtio,bridge=vmbr1 --ostype other
qm set $VMID --scsi0 $STORAGE:8,format=qcow2
qm set $VMID --ide2 $STORAGE:iso/$ISO_PATH,media=cdrom
qm set $VMID --boot order=ide2;scsi0 --serial0 socket --vga qxl # Serial console rất tiện
qm start $VMID
3. Cài đặt và cấu hình cơ bản OPNsense/pfSense
Cài đặt từ ISO như bình thường. Khi khởi động lại, qua console:
- Assign Interfaces: Gán
vtnet0cho WAN,vtnet1cho LAN. - IP Configuration:
- WAN: DHCP hoặc Static IP từ mạng ngoài.
- LAN: Bắt buộc đặt IP tĩnh, ví dụ
10.0.0.1/24. Đây sẽ là Gateway cho các VM client.
- Truy cập Web GUI: Từ máy tính, truy cập
https://10.0.0.1và đăng nhập (root/mật khẩu đã đặt).
4. Thiết lập Routing ảo và Firewall Rules
Đây là lúc chúng ta định hình bảo mật.
a. Cấu hình DHCP Server cho LAN
Vào Services -> DHCPv4 -> [LAN]. Bật DHCP và cấu hình dải IP (ví dụ: 10.0.0.100-200). DNS có thể trỏ về 10.0.0.1.
b. Phân đoạn mạng với Rules nâng cao (Ví dụ: Web và Database)
Giả sử VM Web (IP: 10.0.0.10) và VM DB (IP: 10.0.0.20). Yêu cầu: Web truy cập DB trên port 3306, các VM khác không được.
-
Tạo Aliases (Firewall -> Aliases):
Web_Server_IP(10.0.0.10),DB_Server_IP(10.0.0.20),MySQL_Port(3306). -
Tạo Firewall Rules trên Interface LAN (Firewall -> Rules -> LAN): (Quy tắc chạy từ trên xuống)
- Rule 1: Allow Web to DB
- Action:
Pass, Interface:LAN, Protocol:TCP - Source:
Web_Server_IP - Destination:
DB_Server_IP, Destination Port:MySQL_Port
- Action:
- Rule 2: Block others to DB MySQL
- Action:
Block, Interface:LAN, Protocol:TCP - Source:
LAN net(hoặcany) - Destination:
DB_Server_IP, Destination Port:MySQL_Port - Lưu ý: Rule 2 phải nằm ngay DƯỚI Rule 1.
- Action:
- Rule 3: Default LAN Allow All
- Action:
Pass, Interface:LAN, Protocol:Any - Source:
LAN net, Destination:Any - Rule này nằm DƯỚI tất cả các quy tắc chặn/hạn chế.
- Action:
Luôn nhấn
Apply changessau khi chỉnh sửa. - Rule 1: Allow Web to DB
5. Cấu hình máy ảo Client
Các VM khác cần được cấu hình để sử dụng firewall ảo làm gateway:
- Network: Gán card mạng của chúng vào
vmbr1(mạng LAN ảo). - Gateway: Đặt Gateway là IP LAN của OPNsense/pfSense (
10.0.0.1). - DNS: Đặt DNS là
10.0.0.1hoặc DNS công cộng.
Ví dụ trên VM Ubuntu client (chỉnh sửa /etc/netplan/*.yaml):
network:
ethernets:
eth0:
dhcp4: no
addresses: [10.0.0.10/24] # IP tĩnh
routes:
- to: default
via: 10.0.0.1 # Gateway OPNsense/pfSense
nameservers:
addresses: [10.0.0.1, 8.8.8.8]
version: 2
Áp dụng: sudo netplan apply
Với việc này, mọi traffic của VM client sẽ qua OPNsense/pfSense, và mọi quy tắc bạn đặt ra sẽ được áp dụng. Bạn đã thành công trong việc tạo ra một lớp bảo mật mạnh mẽ và linh hoạt.
Kết luận
Vậy là chúng ta đã cùng nhau “giải quyết” bài toán bảo mật mạng ảo, từ những đêm dài trăn trở với alert cho đến việc tự tay xây dựng một hệ thống firewall/router ảo vững chắc. Cá nhân mình, sau khi triển khai OPNsense trên Proxmox homelab, không chỉ ngủ ngon hơn mà còn cảm thấy yên tâm hơn rất nhiều khi thử nghiệm các dịch vụ mới.
Việc cấu hình một firewall và routing ảo với OPNsense/pfSense trong môi trường KVM/Proxmox không chỉ đơn thuần là thêm một lớp bảo mật. Nó giúp bạn có một cái nhìn toàn diện và kiểm soát sâu sắc hơn về luồng dữ liệu trong hệ thống của mình. Từ phân đoạn mạng giúp giảm thiểu rủi ro, đến việc thiết lập các quy tắc chi tiết để đảm bảo chỉ traffic hợp lệ được phép đi qua – tất cả đều nằm trong tầm tay bạn.
Đây là một bước tiến lớn. Nó giúp bạn xây dựng hạ tầng ảo vừa mạnh mẽ, vừa an toàn, sẵn sàng cho cả những ý tưởng “điên rồ” nhất trong homelab. Quan trọng hơn, nó còn bảo vệ các ứng dụng quan trọng trên môi trường production. Hãy tiếp tục khám phá các tính năng khác của OPNsense/pfSense như VPN, IDS/IPS để tối ưu hóa hệ thống của bạn nhé!

