DMZ trên Firewall là gì? Đặt Web Server trên Proxmox vào vùng DMZ đúng cách

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ướngMặc địnhÝ nghĩa
WAN → DMZChặn, chỉ mở cổng cần thiếtChỉ cho phép 80/443 (hoặc cổng dịch vụ) đến đúng server, qua NAT/port forward.
LAN → DMZCho phép có chọn lọcAdmin được SSH, quản trị web server. Người dùng LAN truy cập web như bình thường.
DMZ → LANChặ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 → WANChặn, mở tối thiểuChỉ 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. 

BridgeNIC vật lýĐịa chỉ IPVai trò
vmbr0enp7s0172.16.16.250/24Management, kết nối LAN, gateway 172.16.16.254
vmbr1enp1s0f1Không gán IPDMZ, nối thẳng cổng DMZ của firewall
vmbr2enp1s0f010.10.10.253/24Storage

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:

DMZ trên Firewall là gì? Đặt Web Server trên Proxmox vào vùng DMZ đúng cách - ảnh 1

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.

DMZ trên Firewall là gì? Đặt Web Server trên Proxmox vào vùng DMZ đúng cách - ảnh 2

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:

bash

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

  1. Chọn VM web server → Hardware → Network Device → Edit.
  2. Ở ô Bridge chọn vmbr1, Model chọn VirtIO (paravirtualized) để có hiệu năng tốt nhất.
  3. VLAN Tag để no VLAN, vì cổng DMZ của firewall ra frame untagged.
  4. Nhấn OK.

DMZ trên Firewall là gì? Đặt Web Server trên Proxmox vào vùng DMZ đúng cách - ảnh 3

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):

bash

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ĐíchDịch vụHành động
1WAN172.16.17.252TCP 80, 443Allow (kèm DNAT/port forward về web server)
2LAN (admin)172.16.17.252TCP 22, 80, 443Allow
3172.16.17.0/24DNS, NTP, repoUDP 53, 123; TCP 80, 443Allow (để cập nhật và phân giải tên)
4172.16.17.0/24LAN 172.16.16.0/24AnyDeny + Log
5AnyAnyAnyDeny

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:

bash

# 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.

Tags:
Chia sẻ:

Bình luận (0)