Đang tải bài viết...
DMZ trên Firewall là gì? Đặt Web Server trên Proxmox vào vùng DMZ đúng cách
Lời giải kinh điển cho bài toán này là DMZ (Demilitarized Zone): một vùng mạng riêng nằm giữa Internet và LAN, nơi đặt những máy chủ phải public. Bài này mình giải thích DMZ là gì, nó làm được những gì, rồi minh họa bằng một ví dụ thực tế: web server 172.16.17.252/24 chạy trên Proxmox, nối trực tiếp từ cổng DMZ của firewall vào card mạng của Proxmox, đi qua bridge vmbr1.
DMZ là gì?
DMZ (vùng phi quân sự) mượn tên từ thuật ngữ quân sự: một vùng đệm giữa hai bên đối địch. Trong mạng máy tính, DMZ là một subnet riêng, tách biệt hoàn toàn với LAN, được gắn vào một cổng vật lý (hoặc một interface logic) riêng trên firewall. Cổng đó thường được gọi là cổng DMZ.
Như vậy một firewall có hỗ trợ DMZ thường có ít nhất ba "vùng" (zone):
- WAN (Untrust): phía Internet, không tin cậy.
- LAN (Trust): mạng nội bộ, nơi chứa máy trạm, server quản trị, dữ liệu nhạy cảm.
- DMZ (Semi-trust): vùng bán tin cậy, chứa các dịch vụ public như web, mail, DNS, reverse proxy.
Điểm mấu chốt: mọi lưu lượng đi giữa ba vùng này đều phải đi qua firewall và bị kiểm soát bằng rule. DMZ không tự động an toàn, nó an toàn vì firewall quyết định ai được nói chuyện với ai.
Các chức năng chính của cổng DMZ
1. Cách ly dịch vụ public khỏi mạng nội bộ
Đây là chức năng quan trọng nhất. Máy chủ trong DMZ nằm ở một subnet khác LAN, nên nếu bị chiếm quyền, kẻ tấn công vẫn bị kẹt trong DMZ. Muốn đi tiếp vào LAN, chúng phải vượt qua thêm một lớp rule của firewall.
2. Kiểm soát lưu lượng theo từng hướng
Firewall áp rule riêng cho từng hướng đi, thay vì một chính sách chung cho cả mạng. Cấu hình phổ biến nhất như sau:
| Hướng | Mặc định | Ý nghĩa |
|---|---|---|
| WAN → DMZ | Chặn, chỉ mở cổng cần thiết | Chỉ cho phép 80/443 (hoặc cổng dịch vụ) đến đúng server, qua NAT/port forward. |
| LAN → DMZ | Cho phép có chọn lọc | Admin được SSH, quản trị web server. Người dùng LAN truy cập web như bình thường. |
| DMZ → LAN | Chặn toàn bộ | Server trong DMZ không được chủ động kết nối vào LAN. Đây là chốt chặn chống đi ngang (lateral movement). |
| DMZ → WAN | Chặn, mở tối thiểu | Chỉ cho DNS, NTP, cập nhật gói (80/443) để server tự vá lỗi. |
3. Ẩn cấu trúc mạng nội bộ
Từ ngoài Internet chỉ nhìn thấy IP public và các cổng được publish ra DMZ. Dải LAN, các server quản trị, NAS... hoàn toàn không lộ diện.
4. Tập trung giám sát và ghi log
Mọi kết nối vào/ra DMZ đều đi qua một điểm duy nhất là firewall. Bạn có thể bật IPS/IDS, lọc theo GeoIP, giới hạn số kết nối, ghi log riêng cho vùng này mà không ảnh hưởng đến LAN.
5. Giới hạn phạm vi thiệt hại khi sự cố xảy ra
Một web server bị deface hay dính mã độc là chuyện có thể xảy ra với bất kỳ ai. Khác biệt nằm ở chỗ: nếu nó ở DMZ, bạn chỉ phải dựng lại một máy; nếu nó ở LAN, bạn phải rà soát cả mạng.
Lưu ý: cổng DMZ khác với "DMZ host" trên router gia đình
Nhiều router dân dụng có mục "DMZ host" cho phép nhập một IP để router chuyển tiếp toàn bộ cổng từ Internet vào máy đó. Về bản chất đây chỉ là một dạng port forward mở hết cổng, máy đó vẫn nằm chung LAN, không có cách ly gì cả, thậm chí còn kém an toàn hơn port forward thông thường. Bài này nói về DMZ thật sự: một interface riêng, một subnet riêng, một bộ rule riêng trên firewall.
Mô hình ví dụ: Web Server trên Proxmox trong DMZ
Mình có một server Proxmox với ba card mạng, mỗi card phục vụ một mục đích. Trong đó cổng DMZ của firewall được cắm trực tiếp vào card enp1s0f1, card này là cổng vật lý duy nhất của bridge vmbr1.
| Bridge | NIC vật lý | Địa chỉ IP | Vai trò |
|---|---|---|---|
| vmbr0 | enp7s0 | 172.16.16.250/24 | Management, kết nối LAN, gateway 172.16.16.254 |
| vmbr1 | enp1s0f1 | Không gán IP | DMZ, nối thẳng cổng DMZ của firewall |
| vmbr2 | enp1s0f0 | 10.10.10.253/24 | Storage |
Web server là một VM (ID 109) gắn card mạng vào vmbr1, đặt IP tĩnh 172.16.17.252/24. Toàn bộ sơ đồ trông như sau:

Hình 1: Sơ đồ cổng DMZ của firewall nối trực tiếp vào vmbr1 trên Proxmox
Vì sao vmbr1 không gán IP?
Đây là chi tiết nhỏ nhưng rất đáng giá. Khi vmbr1 không có địa chỉ IP, nó chỉ đóng vai một switch layer 2 ảo: nối cổng vật lý enp1s0f1 với card mạng của các VM. Bản thân host Proxmox không có chân nào trong vùng DMZ, nên:
- Từ DMZ không thể truy cập vào giao diện quản trị Proxmox (cổng 8006) hay SSH của host qua dải 172.16.17.0/24.
- Nếu web server bị chiếm, kẻ tấn công không có đường vòng qua hypervisor để sang LAN.
- Management của Proxmox nằm hoàn toàn ở vmbr0, tách bạch khỏi DMZ.
Cấu hình phía Proxmox
Bước 1: Cấu hình bridge vmbr1
Vào Node → System → Network, chọn vmbr1 → Edit. Để trống IPv4/CIDR và Gateway, chỉ khai báo Bridge ports là enp1s0f1, đặt Comment là DMZ cho dễ nhận biết. Nhớ nhấn Apply Configuration sau khi lưu.

Hình 2: Bridge vmbr1 không có IP, bridge port là enp1s0f1, comment DMZ
Cấu hình tương đương trong /etc/network/interfaces:
auto vmbr1
iface vmbr1 inet manual
bridge-ports enp1s0f1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
Với inet manual, bridge được bật lên nhưng không có IP, đúng như mục tiêu của chúng ta.
Bước 2: Gắn card mạng của VM vào vmbr1
- Chọn VM web server → Hardware → Network Device → Edit.
- Ở ô Bridge chọn vmbr1, Model chọn VirtIO (paravirtualized) để có hiệu năng tốt nhất.
- VLAN Tag để no VLAN, vì cổng DMZ của firewall ra frame untagged.
- Nhấn OK.

Hình 3: Card mạng của VM 109 gắn vào bridge vmbr1, không gán VLAN tag
Bước 3: Đặt IP bên trong VM
Trong hệ điều hành của web server, đặt IP tĩnh với gateway là IP của firewall trên interface DMZ. Ví dụ với Ubuntu dùng netplan (mình giả định interface DMZ của firewall là 172.16.17.254, bạn thay bằng IP thực tế của mình):
network:
version: 2
ethernets:
ens18:
addresses: [172.16.17.252/24]
routes:
- to: default
via: 172.16.17.254
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
Áp dụng bằng sudo netplan apply.
Cấu hình phía Firewall
Tùy hãng firewall (pfSense, OPNsense, FortiGate, Sophos, MikroTik...) giao diện sẽ khác nhau, nhưng logic chung thì giống nhau. Đầu tiên đặt IP cho interface DMZ thuộc cùng dải với web server, ví dụ 172.16.17.254/24. Sau đó dựng bộ rule theo nguyên tắc mặc định chặn, chỉ mở những gì cần:
| Nguồn | Đích | Dịch vụ | Hành động | |
|---|---|---|---|---|
| 1 | WAN | 172.16.17.252 | TCP 80, 443 | Allow (kèm DNAT/port forward về web server) |
| 2 | LAN (admin) | 172.16.17.252 | TCP 22, 80, 443 | Allow |
| 3 | 172.16.17.0/24 | DNS, NTP, repo | UDP 53, 123; TCP 80, 443 | Allow (để cập nhật và phân giải tên) |
| 4 | 172.16.17.0/24 | LAN 172.16.16.0/24 | Any | Deny + Log |
| 5 | Any | Any | Any | Deny |
Rule số 4 là rule quan trọng nhất của cả mô hình. Nó đảm bảo dù web server có bị chiếm, cũng không thể chủ động chạm vào LAN. Bật log cho rule này còn giúp bạn phát hiện sớm khi có ai đó đang dò quét từ trong DMZ ra.
Kiểm tra hoạt động
Cấu hình xong, đừng vội tin mà hãy kiểm tra cả hai chiều. Từ web server trong DMZ:
# Ra được gateway DMZ và Internet (kỳ vọng: thành công)
ping 172.16.17.254
curl -I https://example.com
# Vào được LAN và host Proxmox (kỳ vọng: timeout)
ping 172.16.16.250
curl -m 5 https://172.16.16.250:8006
Từ một máy ngoài Internet (ví dụ dùng 4G của điện thoại), truy cập vào IP public hoặc domain của bạn, trang web phải hiển thị bình thường. Nếu lệnh ping và curl vào 172.16.16.250 bị timeout thì bạn đã cách ly DMZ thành công.
Một số lưu ý khi triển khai
- Cắm đúng cổng vật lý: cổng DMZ của firewall phải nối đúng vào enp1s0f1. Cắm nhầm sang card thuộc vmbr0 sẽ khiến DMZ và LAN dùng chung một đoạn mạng, làm mất toàn bộ ý nghĩa cách ly.
- Không gắn VM của LAN vào vmbr1: bridge DMZ chỉ dành cho máy chủ public. Một VM nội bộ lỡ gắn vào đây sẽ nằm ngoài tầm bảo vệ như một server DMZ.
- Có thể bật thêm Proxmox Firewall: ở hình 3 có thể thấy tùy chọn Firewall trên card mạng của VM. Bật nó cho bạn thêm một lớp lọc ngay tại hypervisor, độc lập với firewall vật lý.
- DMZ không thay thế việc vá lỗi: cách ly chỉ giúp hạn chế thiệt hại, không ngăn được việc server bị khai thác. Cập nhật hệ điều hành, web server, plugin thường xuyên vẫn là việc bắt buộc.
- Hạn chế lưu thông tin đăng nhập nhạy cảm trên server DMZ: ví dụ mật khẩu database của LAN, SSH key có quyền vào máy nội bộ. Nếu cần kết nối về LAN, hãy mở đúng một rule cụ thể (ví dụ DMZ → máy database, đúng một cổng) thay vì nới lỏng cả dải.
- Sao lưu VM định kỳ: trên Proxmox có thể snapshot hoặc backup VM web server, khi có sự cố chỉ cần khôi phục lại trong vài phút.
Tổng kết
Cổng DMZ trên firewall tạo ra một vùng mạng riêng cho các dịch vụ public: tách khỏi LAN, bị kiểm soát bằng rule theo từng hướng, và dễ giám sát. Trong ví dụ trên, chỉ với một cổng DMZ cắm thẳng vào enp1s0f1, một bridge vmbr1 không gán IP và một VM web server 172.16.17.252/24, chúng ta đã có một mô hình đủ gọn để triển khai, đủ chặt để yên tâm: Internet vào được web server, LAN quản trị được web server, nhưng web server không thể chạm ngược vào LAN hay vào chính host Proxmox.
Nguyên tắc cần nhớ: DMZ an toàn nhờ rule của firewall, không phải nhờ cái tên. Cắm đúng cổng, đặt rule "mặc định chặn" và luôn kiểm tra lại bằng thực tế là bạn đã làm đúng gần hết việc.
Bình luận (0)
Vui lòng để bình luận.