Loading...

Bài 56. (Lab) Dựng mạng phân đoạn với pfSense/OPNsense: DMZ, firewall rule, VPN

Khóa học CompTIA Security+ SY0-801 · Phần 3: Kiến trúc bảo mật · Bài 56 · 🎯 Objective 3.2 · ⏱️ Thực hành khoảng 2 giờ · 🧪 Có lab · 📝 5 câu bài tập cuối bài

🎯 Mục tiêu bài học

  • Dựng một firewall pfSense CE trên máy ảo với ba vùng mạng: WAN, LAN và DMZ (screened subnet).
  • Viết firewall rule theo nguyên tắc mặc định chặn, chỉ mở đúng luồng cần thiết, và hiểu thứ tự đánh giá rule.
  • Cấu hình port forward (NAT) để công bố một máy chủ web trong DMZ ra bên ngoài.
  • Dựng OpenVPN truy cập từ xa (remote access) và giới hạn quyền của người dùng VPN.
  • Kiểm tra bằng kết quả thực tế: LAN vào được DMZ, DMZ không vào được LAN, bên ngoài chỉ vào được dịch vụ đã công bố.

📎 Vị trí trong đề thi: bài lab này biến lý thuyết của nhóm Objective 3.2 thành thao tác thật: phân đoạn mạng (Bài 42), firewall và vị trí đặt thiết bị (Bài 46) và VPN truy cập từ xa (Bài 47). Đề thi thường hỏi theo tình huống: đặt máy chủ công khai ở đâu, rule nào phải đứng trên, và nên mở quyền gì cho người dùng VPN. Làm lab một lần giúp bạn nhớ lâu hơn học thuộc.

⚠️ An toàn khi thực hành: chỉ làm trên máy ảo do chính bạn dựng. Lab này mở cổng web tới mạng bên ngoài của máy ảo, nên không port forward trên router thật ra Internet, và nên xóa rule port forward khi làm xong.

💡 Liên hệ thực tế: website nằm chung mạng với máy kế toán

Công ty chị Lan muốn công bố website ra Internet. Hiện máy chủ web đang cắm chung mạng nội bộ với máy kế toán và máy chủ file. Nam chỉ ra rủi ro: nếu website bị khai thác, kẻ tấn công đã đứng ngay trong mạng nội bộ, có thể đi tiếp tới dữ liệu kế toán. Đây là tình huống minh họa, không phải vụ việc có thật.

Giải pháp Nam đề xuất: đặt máy chủ web vào một vùng riêng (DMZ) sau firewall. Người ngoài chỉ được vào cổng web của máy đó. Máy chủ web không được chủ động đi vào mạng nội bộ. Nhân viên làm việc từ xa thì vào bằng VPN, chỉ tới những tài nguyên cần thiết. Bài lab này dựng đúng mô hình đó.

🗺️ Hình 56a. pfSense đứng giữa Internet, LAN và DMZ; mỗi vùng có quyền truy cập riêng.

🧰 Chuẩn bị

Cấu hình khuyến nghị cho máy chạy lab: RAM 16 GB, ổ SSD, CPU hỗ trợ ảo hóa (xem phần công cụ ở trang giới thiệu khóa học). Dùng VirtualBox hoặc VMware Workstation. Cần 4 máy ảo:

Máy ảoVai tròCard mạng (VirtualBox)Địa chỉ
pfSense(1-2 GB RAM) Firewall, router, OpenVPN 3 card: WAN = Bridged Adapter; LAN = Internal Network lan-net; DMZ = Internal Network dmz-net WAN: DHCP; LAN: 10.10.10.1/24; DMZ: 10.10.20.1/24
Client LAN Máy người dùng nội bộ (Linux hoặc Windows) Internal Network lan-net DHCP từ pfSense
Web DMZ Ubuntu Server + nginx Internal Network dmz-net 10.10.20.10/24 (tĩnh)
Client ngoài Giả lập người dùng Internet và VPN client (Kali hoặc chính máy thật) Bridged Adapter (cùng mạng với WAN) DHCP của mạng nhà

💡 Các mạng LAN, DMZ và VPN trong lab dùng dải 10.10.x.0/24. Nếu mạng nhà bạn đã dùng dải 10.10.x.x, hãy đổi dải lab sang dải khác (ví dụ 172.20.x.0/24) để tránh trùng địa chỉ. Tải ISO pfSense CEtừ trang chính thức của Netgate (file nén .gz, cần giải nén trước khi gắn vào máy ảo).

🔧 Phần 1: Cài pfSense và gán interface

  1. Tạo máy ảo pfSense (FreeBSD 64-bit) với 3 card mạng như bảng trên, khởi động từ ISO, chọn Install và để các tùy chọn mặc định.
  2. Sau khi cài xong và khởi động lại (nhớ rút ISO), ở màn hình console chọn 1) Assign Interfaces. Không dùng VLAN. Gán card Bridged làm WAN, card lan-net làm LAN, card dmz-net làm OPT1 (tên interface hiển thị có thể là em0, em1, em2 hoặc tên khác tùy loại card ảo).
  3. Chọn 2) Set interface(s) IP address: đặt LAN là 10.10.10.1/24, bật DHCP server cho LAN (dải 10.10.10.100đến 10.10.10.200).
  4. Từ Client LAN, mở trình duyệt vào https://10.10.10.1. Đăng nhập mặc định admin / pfsense, đi qua Setup Wizard và đổi ngay mật khẩu admin.
  5. Ở bước cấu hình WAN trong wizard (hoặc sau này ở Interfaces > WAN), bỏ chọn Block RFC1918 Private Networks và Block bogon networks. Lab này có WAN nằm trong dải địa chỉ riêng của mạng nhà, nên nếu để bật thì mọi kết nối từ client ngoài vào WAN sẽ bị chặn. Ngoài môi trường lab thì nên bật các tùy chọn này.

🧱 Phần 2: Tạo vùng DMZ

  1. Vào Interfaces > OPT1: tick Enable interface, đặt Description là DMZ, IPv4 Configuration Type là Static IPv4, địa chỉ 10.10.20.1 với mặt nạ /24. Save, rồi Apply Changes.
  2. Dựng máy chủ web DMZ: cài Ubuntu Server, đặt IP tĩnh bằng netplan (tên file và tên card có thể khác, ví dụ enp0s3):

yaml

network:
  version: 2
  ethernets:
    enp0s3:
      addresses: [10.10.20.10/24]
      routes:
        - to: default
          via: 10.10.20.1
      nameservers:
        addresses: [10.10.20.1]

bash

sudo netplan apply
sudo apt update && sudo apt install -y nginx
echo '<h1>DMZ web server</h1>' | sudo tee /var/www/html/index.html

ℹ️ Lệnh apt cần máy chủ DMZ ra được Internet. Nếu chưa được, hoàn thành Phần 3 (rule DMZ) rồi quay lại cài nginx. Vì DNS đi qua pfSense nên DNS của máy này đặt là 10.10.20.1.

🛡️ Phần 3: Viết firewall rule

pfSense đánh giá rule trên từng interface, theo chiều traffic đi vào interface đó, từ trên xuống dưới; rule đầu tiên khớp sẽ được áp dụng. Interface mới như DMZ chưa có rule nào thì chặn tất cả (implicit deny). Interface LAN có sẵn rule cho phép LAN đi mọi nơi.

Bước 3.1: tạo alias. Vào Firewall > Aliases > IPs > Add: tên PrivateNets, loại Network(s), thêm 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Alias này đại diện cho toàn bộ dải địa chỉ riêng.

Bước 3.2: rule cho DMZ. Vào Firewall > Rules > DMZ, thêm các rule theo đúng thứ tự:

#ActionProtocolSourceDestinationÝ nghĩa
1 Pass TCP/UDP DMZ subnets DMZ address, port 53 (DNS) Cho máy DMZ hỏi DNS ở pfSense
2 Pass TCP DMZ subnets Invert match + alias PrivateNets, port 80 và 443 Cho máy DMZ ra Internet (cập nhật gói) nhưng không tới dải địa chỉ riêng
3 Block any DMZ subnets LAN subnets, bật Log Chặn rõ ràng DMZ vào LAN và ghi log để dễ kiểm chứng

Lưu ý: rule 3 về mặt chức năng đã có sẵn nhờ implicit deny, nhưng viết ra tường minh kèm log giúp người đọc cấu hình hiểu ý đồ và giúp bạn quan sát khi kiểm thử. Quan trọng hơn, không tạo rule dạng "Pass DMZ tới any" đứng trên rule chặn LAN, vì như vậy sẽ mở cả đường vào LAN và cả vào trang quản trị pfSense.

Bước 3.3: rule cho LAN. Giữ rule mặc định LAN to any (cho phép LAN vào DMZ và Internet). Ở môi trường thật, bạn nên thu hẹp rule này theo nhu cầu (nguyên tắc đặc quyền tối thiểu).

Bước 3.4: công bố web ra ngoài bằng port forward. Vào Firewall > NAT > Port Forward > Add:

  • Interface: WAN; Protocol: TCP.
  • Destination: WAN address; Destination port range: HTTP tới HTTP.
  • Redirect target IP: 10.10.20.10; Redirect target port: HTTP.
  • Filter rule association: chọn Add associated filter rule.

Save rồi Apply Changes. Chú ý: port forward chỉ dịch địa chỉ; phải có rule trên WAN cho phép traffic đó thì kết nối mới thông. Tùy chọn associated filter rule sẽ tự tạo rule này.

🔐 Hình 56b. Kết quả mong muốn của bài lab: mỗi vùng chỉ được những quyền cần thiết, phần còn lại bị chặn.

🔑 Phần 4: Dựng OpenVPN truy cập từ xa

  1. Vào VPN > OpenVPN > Wizards. Chọn kiểu server Local User Access.
  2. Tạo CA mới và chứng chỉ server mới (đặt tên, độ dài khóa 2048 bit trở lên; khái niệm CA và chứng chỉ đã học ở Bài 11).
  3. Cấu hình server: Interface WAN, Protocol UDP on IPv4 only, Local Port 1194. Giữ mặc định các tùy chọn mã hóa.
  4. Tunnel Network đặt 10.10.30.0/24. Local Network đặt 10.10.10.0/24 (chỉ LAN, không thêm DMZ). Không bật Redirect Gateway trong lab này.
  5. Ở bước Firewall Rule, tick cả Firewall Rule (cho phép kết nối vào cổng OpenVPN trên WAN) và OpenVPN rule(cho phép traffic bên trong tunnel). Hoàn tất wizard.
  6. Tạo người dùng: System > User Manager > Users > Add, đặt username vpnuser, mật khẩu mạnh, và tick Certificate để tạo chứng chỉ người dùng (chọn CA vừa tạo).
  7. Cài gói xuất cấu hình: System > Package Manager > Available Packages, tìm openvpn-client-export và Install.
  8. Vào VPN > OpenVPN > Client Export: chọn server vừa tạo, ở dòng vpnuser tải cấu hình Inline Configurations > Most Clients (file .ovpn). Với Host Name Resolution, trong lab có thể chọn Interface IP Address.
  9. Siết quyền VPN theo đặc quyền tối thiểu. Vào Firewall > Rules > OpenVPN, sửa rule pass any do wizard tạo thành: Source 10.10.30.0/24, Destination LAN subnets. Như vậy người dùng VPN chỉ chạm tới LAN, khôngvào được DMZ dù có tự thêm route.

✅ Phần 5: Kiểm thử

Kiểm traCách thực hiệnKết quả mong đợi
LAN vào DMZ Từ Client LAN: curl http://10.10.20.10 Hiện trang DMZ web server
DMZ vào LAN Từ máy Web DMZ: ping 10.10.10.1 hoặc tới một máy LAN Không thông; thấy bản ghi chặn trong Status > System Logs > Firewall
Bên ngoài vào web Từ Client ngoài: mở http://<IP WAN của pfSense>(xem ở Status > Interfaces) Hiện trang DMZ nhờ port forward
Bên ngoài vào LAN Từ Client ngoài: thử tới 10.10.10.x khi chưa bật VPN Không thông
VPN Từ Client ngoài: sudo openvpn --config vpnuser.ovpn, nhập user và mật khẩu Tạo được giao diện tun0 với địa chỉ 10.10.30.x
VPN vào LAN Khi đang kết nối VPN: ping một máy LAN Thông
VPN vào DMZ Khi đang kết nối VPN: curl http://10.10.20.10 Không thông nhờ rule đã siết ở bước 4.9

🧹 Dọn dẹp: xóa rule port forward trên WAN và tắt máy ảo khi không dùng. Ghi lại cấu hình (xuất Diagnostics > Backup & Restore) để dùng lại.

🛠️ Lỗi thường gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
Client ngoài không vào được web qua IP WAN Còn bật Block private networks trên WAN; hoặc chưa có rule WAN đi kèm port forward Bỏ chọn tùy chọn chặn dải riêng ở Interfaces > WAN; kiểm tra rule trên tab WAN
Máy DMZ không aptđược Thiếu rule Pass 80/443; DNS của máy DMZ không trỏ về 10.10.20.1 Kiểm tra rule 1 và 2, và cấu hình netplan
VPN kết nối được nhưng không ping được LAN Chưa có rule trong tab OpenVPN; hoặc firewall của máy LAN chặn ping Kiểm tra rule OpenVPN và tường lửa trên máy đích
Đi nhầm rule: DMZ vào được LAN Có rule Pass any đứng trên rule chặn Sắp xếp lại: rule đầu tiên khớp được áp dụng
Mất quyền vào trang quản trị Tự chặn mình ở rule LAN Dùng console máy ảo pfSense, chọn tùy chọn khôi phục cấu hình; hoặc tạo rule cho phép quản trị

ℹ️ Dùng OPNsense thay cho pfSense? Khái niệm hoàn toàn tương tự (interface, firewall rule theo từng interface, NAT port forward, OpenVPN). Tên menu thường nằm ở Interfaces > Assignments, Firewall > Rules, Firewall > NAT > Port Forward và VPN > OpenVPN; vị trí chi tiết có thể thay đổi giữa các phiên bản, nên hãy đối chiếu tài liệu của đúng bản bạn cài.

🎯 Mẹo làm bài: "Máy chủ cần truy cập từ Internet đặt ở đâu?" → DMZ / screened subnet. "Rule nào được áp dụng khi nhiều rule cùng khớp?" → rule đầu tiên khớp từ trên xuống. "Không có rule nào khớp thì sao?" → implicit deny. "Công bố dịch vụ nội bộ ra ngoài" → port forward (NAT) kèm rule cho phép. "Nhân viên ở xa truy cập tài nguyên nội bộ qua Internet" → VPN remote access. "Chỉ cấp quyền tối thiểu cần thiết" → least privilege (Bài 5).

🧠 Áp vào câu chuyện của Nam

Câu hỏi của chị LanCách giải quyết trong lab
"Web bị khai thác thì kẻ tấn công vào được mạng nội bộ không?" Web ở DMZ, rule chặn DMZ vào LAN
"Khách hàng vào website bằng cách nào?" Port forward WAN 80 tới 10.10.20.10
"Nhân viên ở nhà làm việc thế nào?" OpenVPN truy cập từ xa, chỉ tới LAN
"Làm sao chắc rule hoạt động đúng?" Kiểm thử từng hướng và đọc log firewall

📖 Thuật ngữ cần nhớ

Thuật ngữNghĩa
DMZ / screened subnet Vùng mạng riêng đặt giữa Internet và LAN, chứa dịch vụ công khai.
Firewall rule Quy tắc cho phép hoặc chặn traffic theo nguồn, đích, giao thức, cổng.
Implicit deny Mặc định chặn mọi traffic không có rule cho phép.
Port forward Chuyển traffic đến một cổng ở WAN tới máy bên trong (NAT đích).
Alias Tên gọi đại diện cho nhóm địa chỉ hoặc cổng để dùng lại trong rule.
Remote access VPN Đường hầm mã hóa cho người dùng từ xa vào mạng nội bộ.
Tunnel network Dải địa chỉ cấp cho client khi kết nối VPN.

📌 Tóm tắt nhanh

  • DMZ tách dịch vụ công khai khỏi LAN; nếu máy trong DMZ bị chiếm thì kẻ tấn công vẫn bị chặn ở ranh giới với LAN.
  • Rule được đánh giá trên từng interface, từ trên xuống, khớp đầu tiên thắng; không khớp rule nào thì bị chặn.
  • Port forward cần đi kèm rule cho phép; chỉ mở cổng của dịch vụ cần công bố.
  • VPN truy cập từ xa mã hóa đường truyền qua Internet; nên giới hạn quyền VPN theo đặc quyền tối thiểu.
  • Luôn kiểm thử cả hướng bị chặn và đọc log, không chỉ kiểm tra hướng được phép.

💬 Hỏi & Đáp nhanh

❓ Vì sao không đặt máy chủ web ngay trong LAN rồi dùng firewall chặn? Máy chủ công khai chịu nhiều tấn công nhất. Nếu nó nằm trong LAN và bị chiếm, kẻ tấn công đã ở sẵn trong mạng nội bộ. Đặt trong DMZ và chặn DMZ vào LAN giúp giới hạn phạm vi ảnh hưởng.

❓ Cần nhớ thứ tự rule như thế nào? Hãy hình dung rule như một danh sách kiểm tra từ trên xuống: gói tin gặp rule nào khớp trước thì làm theo rule đó và dừng lại. Vì vậy rule hẹp và cụ thể nên đứng trên rule rộng như any.

❓ Có nên cho VPN client vào toàn bộ mạng nội bộ không? Không nên mặc định. Chỉ cấp tới những mạng, máy chủ hoặc cổng thật sự cần. Quyền rộng làm tăng thiệt hại nếu một tài khoản VPN bị lộ. Việc kiểm soát danh tính (MFA, phân quyền) sẽ học kỹ ở Phần 4.

📝 Bài tập đánh giá

Tự chọn đáp án cho từng câu, rồi đối chiếu với phần đáp án ở cuối bài.

Câu 1. Mục đích chính của DMZ (screened subnet) là gì?

  • A. Tăng tốc độ truy cập Internet cho nhân viên
  • B. Lưu trữ bản sao lưu ngoài site
  • C. Đặt dịch vụ cần công khai tách khỏi LAN nội bộ để giới hạn thiệt hại nếu bị khai thác
  • D. Thay thế hoàn toàn chức năng của VPN

Câu 2. Trên pfSense, interface mới được thêm vào (ví dụ DMZ) và chưa có rule nào. Traffic đi vào interface này sẽ như thế nào?

  • A. Bị chặn theo mặc định (implicit deny)
  • B. Được phép đi mọi nơi
  • C. Chỉ được phép nếu là traffic web
  • D. Chỉ được phép tới LAN

Câu 3. Khi nhiều rule trên cùng một interface cùng khớp với một gói tin, rule nào được áp dụng?

  • A. Rule có số thứ tự lớn nhất
  • B. Rule nằm cuối danh sách
  • C. Rule do người dùng tạo gần đây nhất
  • D. Rule đầu tiên khớp khi duyệt từ trên xuống

Câu 4. Bạn tạo port forward trên WAN cổng 80 tới máy web trong DMZ nhưng bên ngoài vẫn không vào được. Nguyên nhân cần kiểm tra trước là gì?

  • A. Mật khẩu admin của pfSense chưa đổi
  • B. Chưa có rule trên WAN cho phép traffic tới cổng đó (port forward chỉ dịch địa chỉ)
  • C. Máy chủ web chưa được sao lưu
  • D. Chưa tạo CA cho OpenVPN

Câu 5. Vì sao nên giới hạn rule của người dùng VPN chỉ tới những mạng thật sự cần?

  • A. Để giảm thiểu thiệt hại nếu một tài khoản VPN bị lộ (nguyên tắc đặc quyền tối thiểu)
  • B. Để VPN chạy nhanh hơn gấp đôi
  • C. Vì VPN không thể truy cập mạng nội bộ
  • D. Để không cần dùng chứng chỉ

👉 Đáp án

Câu 1: C — DMZ tách dịch vụ công khai khỏi LAN để nếu máy chủ bị khai thác thì kẻ tấn công khó đi tiếp vào mạng nội bộ.

Câu 2: A — Interface mới chưa có rule thì mọi traffic đi vào bị chặn theo mặc định (implicit deny).

Câu 3: D — Rule được duyệt từ trên xuống và rule đầu tiên khớp sẽ được áp dụng.

Câu 4: B — Port forward chỉ dịch địa chỉ đích; cần có rule cho phép traffic tương ứng trên WAN (có thể tự tạo bằng tùy chọn associated filter rule).

Câu 5: A — Giới hạn quyền VPN theo đặc quyền tối thiểu làm giảm thiệt hại khi một tài khoản VPN bị lộ.


📚 Bài viết thuộc khóa học CompTIA Security+ của VNExperts

🧭 Điều hướng

⬅️ Bài trước🏠 Mục lục khóa họcBài kế tiếp ➡️
Bài 55: RTO, RPO và khôi phục sau thảm họa Mục lục khóa học CompTIA Security+ Bài 57: (Lab) Sao lưu, khôi phục và kiểm thử restore