Chuyển đến nội dung chính

Bài 5: Zone-based Firewall

Tìm hiểu zone-based firewall trên VyOS: thiết kế zones LAN/WAN/DMZ/GUEST, inter-zone rules, so sánh với interface-based firewall và lab thực hành 3 zones.

Zone-based Firewall

Zone-based Firewall là gì?

Trong bài trước, chúng ta cấu hình firewall theo interface-based — gán rules trực tiếp vào từng interface với inbound/outbound direction. Phương pháp này hoạt động tốt nhưng trở nên phức tạp khi mạng có nhiều interfaces.

Zone-based firewall là phương pháp tổ chức firewall theo vùng mạng (zones). Thay vì nghĩ về interfaces, bạn nghĩ về traffic flow giữa các zones. Đây là mô hình được Cisco, Juniper và nhiều enterprise firewall sử dụng.

Nguyên tắc cơ bản

  • Mỗi interface thuộc về đúng một zone
  • Traffic giữa các zones bị deny by default — phải tạo rule cho phép rõ ràng
  • Traffic trong cùng zone (same-zone) mặc định được allow
  • VyOS router bản thân là zone đặc biệt: local zone

Zone-based vs Interface-based Firewall

# Interface-based: phải xác định direction trên mỗi interface
# → Phức tạp khi có 4-5 interfaces
#
# set firewall ipv4 forward filter rule X inbound-interface eth0
# set firewall ipv4 forward filter rule X outbound-interface eth1
# set firewall ipv4 forward filter rule Y inbound-interface eth0
# set firewall ipv4 forward filter rule Y outbound-interface eth2
# ... rất nhiều rules

# Zone-based: nhóm interfaces vào zones, viết policy giữa zones
# → Rõ ràng, dễ quản lý
#
# zone WAN:  eth0
# zone LAN:  eth1
# zone DMZ:  eth2
# policy: WAN→LAN: drop, LAN→WAN: accept, WAN→DMZ: allow HTTP only

Ưu điểm của zone-based:

  • Dễ hiểu: Mỗi policy mô tả rõ "traffic từ zone A đến zone B"
  • Scalable: Thêm interface mới chỉ cần gán vào zone có sẵn
  • Audit dễ: Xem nhanh ai được phép giao tiếp với ai
  • Best practice: Phù hợp với mô hình bảo mật enterprise

Thiết kế Zones

Một mạng home/office điển hình có thể chia thành các zones sau:

                        INTERNET
                           │
                    ┌──────┴──────┐
                    │  ZONE: WAN  │
                    │    eth0     │
                    └──────┬──────┘
                           │
                    ┌──────┴──────┐
                    │ VyOS Router │ ← ZONE: LOCAL (router itself)
                    └──┬────┬──┬──┘
                       │    │  │
              ┌────────┘    │  └────────┐
              │             │           │
       ┌──────┴──────┐ ┌───┴────┐ ┌────┴─────┐
       │  ZONE: LAN  │ │  DMZ   │ │  GUEST   │
       │    eth1     │ │  eth2  │ │   eth3   │
       └─────────────┘ └────────┘ └──────────┘
       Trusted          Servers    Untrusted
       192.168.1.0/24   10.0.1.0/24  192.168.10.0/24

Các zone phổ biến

  • WAN: Kết nối Internet — untrusted, tất cả inbound bị block trừ khi cho phép
  • LAN: Mạng nội bộ — trusted, được phép ra Internet và truy cập DMZ
  • DMZ: Vùng chứa servers public (web, mail) — semi-trusted
  • GUEST: WiFi khách — chỉ được ra Internet, không truy cập LAN/DMZ
  • LOCAL: VyOS router chính nó — quản lý SSH, DNS, DHCP services

Cấu hình Zone-based Firewall trên VyOS

Bước 1: Tạo firewall rule sets (ipv4 name)

Trước tiên, tạo các bộ rules cho mỗi cặp zone. VyOS 1.4+ sử dụng firewall ipv4 name để định nghĩa named rule sets:

configure

# === WAN → LAN: Block tất cả (chỉ allow established) ===
set firewall ipv4 name WAN-TO-LAN default-action 'drop'
set firewall ipv4 name WAN-TO-LAN rule 10 action 'accept'
set firewall ipv4 name WAN-TO-LAN rule 10 state 'established'
set firewall ipv4 name WAN-TO-LAN rule 10 state 'related'
set firewall ipv4 name WAN-TO-LAN rule 20 action 'drop'
set firewall ipv4 name WAN-TO-LAN rule 20 state 'invalid'

# === LAN → WAN: Allow tất cả ===
set firewall ipv4 name LAN-TO-WAN default-action 'accept'

# === WAN → DMZ: Chỉ allow HTTP/HTTPS ===
set firewall ipv4 name WAN-TO-DMZ default-action 'drop'
set firewall ipv4 name WAN-TO-DMZ rule 10 action 'accept'
set firewall ipv4 name WAN-TO-DMZ rule 10 state 'established'
set firewall ipv4 name WAN-TO-DMZ rule 10 state 'related'
set firewall ipv4 name WAN-TO-DMZ rule 20 action 'drop'
set firewall ipv4 name WAN-TO-DMZ rule 20 state 'invalid'
set firewall ipv4 name WAN-TO-DMZ rule 100 action 'accept'
set firewall ipv4 name WAN-TO-DMZ rule 100 protocol 'tcp'
set firewall ipv4 name WAN-TO-DMZ rule 100 destination port '80,443'

# === LAN → DMZ: Allow tất cả ===
set firewall ipv4 name LAN-TO-DMZ default-action 'accept'

# === DMZ → LAN: Block (servers không được truy cập LAN) ===
set firewall ipv4 name DMZ-TO-LAN default-action 'drop'
set firewall ipv4 name DMZ-TO-LAN rule 10 action 'accept'
set firewall ipv4 name DMZ-TO-LAN rule 10 state 'established'
set firewall ipv4 name DMZ-TO-LAN rule 10 state 'related'

# === DMZ → WAN: Allow (servers cần update, fetch data) ===
set firewall ipv4 name DMZ-TO-WAN default-action 'accept'

commit

Bước 2: Tạo zone-policy và gán interfaces

# Tạo zone WAN
set zone-policy zone WAN interface 'eth0'
set zone-policy zone WAN description 'Internet / Untrusted'

# Tạo zone LAN
set zone-policy zone LAN interface 'eth1'
set zone-policy zone LAN description 'Internal / Trusted'

# Tạo zone DMZ
set zone-policy zone DMZ interface 'eth2'
set zone-policy zone DMZ description 'DMZ / Servers'

# LOCAL zone (VyOS router)
set zone-policy zone LOCAL local-zone
set zone-policy zone LOCAL description 'VyOS Router'

commit

Bước 3: Gán firewall policies cho inter-zone traffic

# WAN → LAN
set zone-policy zone LAN from WAN firewall name 'WAN-TO-LAN'

# LAN → WAN
set zone-policy zone WAN from LAN firewall name 'LAN-TO-WAN'

# WAN → DMZ
set zone-policy zone DMZ from WAN firewall name 'WAN-TO-DMZ'

# LAN → DMZ
set zone-policy zone DMZ from LAN firewall name 'LAN-TO-DMZ'

# DMZ → LAN
set zone-policy zone LAN from DMZ firewall name 'DMZ-TO-LAN'

# DMZ → WAN
set zone-policy zone WAN from DMZ firewall name 'DMZ-TO-WAN'

commit
save

LOCAL Zone — Bảo vệ Router

LOCAL zone kiểm soát traffic đến/từ chính VyOS router (SSH, DNS, DHCP, NTP...):

# === WAN → LOCAL: Rất hạn chế ===
set firewall ipv4 name WAN-TO-LOCAL default-action 'drop'
set firewall ipv4 name WAN-TO-LOCAL rule 10 action 'accept'
set firewall ipv4 name WAN-TO-LOCAL rule 10 state 'established'
set firewall ipv4 name WAN-TO-LOCAL rule 10 state 'related'
set firewall ipv4 name WAN-TO-LOCAL rule 20 action 'drop'
set firewall ipv4 name WAN-TO-LOCAL rule 20 state 'invalid'

# === LAN → LOCAL: Cho phép SSH, DNS, DHCP ===
set firewall ipv4 name LAN-TO-LOCAL default-action 'drop'
set firewall ipv4 name LAN-TO-LOCAL rule 10 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 10 state 'established'
set firewall ipv4 name LAN-TO-LOCAL rule 10 state 'related'
set firewall ipv4 name LAN-TO-LOCAL rule 100 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 100 protocol 'tcp'
set firewall ipv4 name LAN-TO-LOCAL rule 100 destination port '22'
set firewall ipv4 name LAN-TO-LOCAL rule 100 description 'Allow SSH'
set firewall ipv4 name LAN-TO-LOCAL rule 110 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 110 protocol 'udp'
set firewall ipv4 name LAN-TO-LOCAL rule 110 destination port '53'
set firewall ipv4 name LAN-TO-LOCAL rule 110 description 'Allow DNS'
set firewall ipv4 name LAN-TO-LOCAL rule 120 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 120 protocol 'udp'
set firewall ipv4 name LAN-TO-LOCAL rule 120 destination port '67,68'
set firewall ipv4 name LAN-TO-LOCAL rule 120 description 'Allow DHCP'
set firewall ipv4 name LAN-TO-LOCAL rule 130 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 130 protocol 'icmp'
set firewall ipv4 name LAN-TO-LOCAL rule 130 description 'Allow Ping'

# === LOCAL → WAN: Cho phép (router cần NTP, DNS, updates) ===
set firewall ipv4 name LOCAL-TO-WAN default-action 'accept'

# === LOCAL → LAN: Cho phép ===
set firewall ipv4 name LOCAL-TO-LAN default-action 'accept'

# Gán vào zone-policy
set zone-policy zone LOCAL from WAN firewall name 'WAN-TO-LOCAL'
set zone-policy zone LOCAL from LAN firewall name 'LAN-TO-LOCAL'
set zone-policy zone WAN from LOCAL firewall name 'LOCAL-TO-WAN'
set zone-policy zone LAN from LOCAL firewall name 'LOCAL-TO-LAN'

commit
save

Best Practices cho Zone-based Firewall

  • Nguyên tắc least privilege: Default-action luôn là drop, chỉ mở những gì cần thiết
  • State policy trước tiên: Rule 10 luôn là accept established/related
  • Đánh số rule cách nhau: 10, 20, 100, 110... để dễ chèn thêm
  • Sử dụng groups: Dùng address-group, port-group cho dễ quản lý
  • Đặt tên rõ ràng: Rule set name theo format SRC-TO-DST
  • Dùng commit-confirm: Đặc biệt khi cấu hình qua SSH
  • Document: Thêm description cho mỗi rule và zone
  • Log dropped traffic: Bật default-log cho các chain drop để monitoring

Thêm GUEST Zone

GUEST zone cho WiFi khách — chỉ cho ra Internet, không cho truy cập LAN/DMZ/router:

configure

# GUEST → WAN: Allow (khách vào Internet)
set firewall ipv4 name GUEST-TO-WAN default-action 'accept'

# GUEST → LAN: Block completely
set firewall ipv4 name GUEST-TO-LAN default-action 'drop'

# GUEST → DMZ: Block
set firewall ipv4 name GUEST-TO-DMZ default-action 'drop'

# GUEST → LOCAL: Chỉ DHCP và DNS
set firewall ipv4 name GUEST-TO-LOCAL default-action 'drop'
set firewall ipv4 name GUEST-TO-LOCAL rule 10 action 'accept'
set firewall ipv4 name GUEST-TO-LOCAL rule 10 state 'established'
set firewall ipv4 name GUEST-TO-LOCAL rule 10 state 'related'
set firewall ipv4 name GUEST-TO-LOCAL rule 100 action 'accept'
set firewall ipv4 name GUEST-TO-LOCAL rule 100 protocol 'udp'
set firewall ipv4 name GUEST-TO-LOCAL rule 100 destination port '53,67,68'
set firewall ipv4 name GUEST-TO-LOCAL rule 100 description 'Allow DNS and DHCP'

# Tạo zone và gán interface
set zone-policy zone GUEST interface 'eth3'
set zone-policy zone GUEST description 'Guest WiFi / Untrusted'

# Gán policies
set zone-policy zone WAN from GUEST firewall name 'GUEST-TO-WAN'
set zone-policy zone LAN from GUEST firewall name 'GUEST-TO-LAN'
set zone-policy zone DMZ from GUEST firewall name 'GUEST-TO-DMZ'
set zone-policy zone LOCAL from GUEST firewall name 'GUEST-TO-LOCAL'

commit
save

Lab thực hành: Zone-policy 3 Zones cho Home Network

Xây dựng mạng 3 zones hoàn chỉnh từ đầu:

                   Internet
                      │
               ┌──────┴──────┐
               │  WAN (eth0) │
               │    DHCP     │
               └──────┬──────┘
                      │
               ┌──────┴──────┐
               │ VyOS Router │ LOCAL zone
               └──┬───────┬──┘
                  │       │
        ┌─────────┘       └─────────┐
        │                           │
  ┌─────┴─────┐              ┌─────┴─────┐
  │ LAN (eth1)│              │ DMZ (eth2)│
  │ 10.0.1.0  │              │ 10.0.2.0  │
  └───────────┘              └───────────┘
  Trusted                    Web Server
                             10.0.2.100

Bước 1: Interfaces

configure

set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth1 address '10.0.1.1/24'
set interfaces ethernet eth1 description 'LAN'
set interfaces ethernet eth2 address '10.0.2.1/24'
set interfaces ethernet eth2 description 'DMZ'

commit

Bước 2: NAT

# Masquerade cho cả LAN và DMZ ra Internet
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '10.0.0.0/8'
set nat source rule 100 translation address masquerade

# Port forward HTTP/HTTPS vào DMZ web server
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 destination port '80,443'
set nat destination rule 10 translation address '10.0.2.100'

commit

Bước 3: Firewall rule sets

# WAN-TO-LAN
set firewall ipv4 name WAN-TO-LAN default-action 'drop'
set firewall ipv4 name WAN-TO-LAN rule 10 action 'accept'
set firewall ipv4 name WAN-TO-LAN rule 10 state 'established'
set firewall ipv4 name WAN-TO-LAN rule 10 state 'related'

# LAN-TO-WAN
set firewall ipv4 name LAN-TO-WAN default-action 'accept'

# WAN-TO-DMZ
set firewall ipv4 name WAN-TO-DMZ default-action 'drop'
set firewall ipv4 name WAN-TO-DMZ rule 10 action 'accept'
set firewall ipv4 name WAN-TO-DMZ rule 10 state 'established'
set firewall ipv4 name WAN-TO-DMZ rule 10 state 'related'
set firewall ipv4 name WAN-TO-DMZ rule 100 action 'accept'
set firewall ipv4 name WAN-TO-DMZ rule 100 protocol 'tcp'
set firewall ipv4 name WAN-TO-DMZ rule 100 destination port '80,443'
set firewall ipv4 name WAN-TO-DMZ rule 100 description 'Allow HTTP/HTTPS to DMZ'

# DMZ-TO-WAN
set firewall ipv4 name DMZ-TO-WAN default-action 'accept'

# LAN-TO-DMZ
set firewall ipv4 name LAN-TO-DMZ default-action 'accept'

# DMZ-TO-LAN
set firewall ipv4 name DMZ-TO-LAN default-action 'drop'
set firewall ipv4 name DMZ-TO-LAN rule 10 action 'accept'
set firewall ipv4 name DMZ-TO-LAN rule 10 state 'established'
set firewall ipv4 name DMZ-TO-LAN rule 10 state 'related'

# WAN-TO-LOCAL
set firewall ipv4 name WAN-TO-LOCAL default-action 'drop'
set firewall ipv4 name WAN-TO-LOCAL rule 10 action 'accept'
set firewall ipv4 name WAN-TO-LOCAL rule 10 state 'established'
set firewall ipv4 name WAN-TO-LOCAL rule 10 state 'related'

# LAN-TO-LOCAL
set firewall ipv4 name LAN-TO-LOCAL default-action 'drop'
set firewall ipv4 name LAN-TO-LOCAL rule 10 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 10 state 'established'
set firewall ipv4 name LAN-TO-LOCAL rule 10 state 'related'
set firewall ipv4 name LAN-TO-LOCAL rule 100 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 100 protocol 'tcp'
set firewall ipv4 name LAN-TO-LOCAL rule 100 destination port '22'
set firewall ipv4 name LAN-TO-LOCAL rule 110 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 110 protocol 'udp'
set firewall ipv4 name LAN-TO-LOCAL rule 110 destination port '53,67,68'
set firewall ipv4 name LAN-TO-LOCAL rule 120 action 'accept'
set firewall ipv4 name LAN-TO-LOCAL rule 120 protocol 'icmp'

# LOCAL-TO-WAN, LOCAL-TO-LAN, LOCAL-TO-DMZ
set firewall ipv4 name LOCAL-TO-WAN default-action 'accept'
set firewall ipv4 name LOCAL-TO-LAN default-action 'accept'
set firewall ipv4 name LOCAL-TO-DMZ default-action 'accept'

commit

Bước 4: Zone-policy

# Zones
set zone-policy zone WAN interface 'eth0'
set zone-policy zone LAN interface 'eth1'
set zone-policy zone DMZ interface 'eth2'
set zone-policy zone LOCAL local-zone

# Inter-zone policies
set zone-policy zone LAN from WAN firewall name 'WAN-TO-LAN'
set zone-policy zone WAN from LAN firewall name 'LAN-TO-WAN'
set zone-policy zone DMZ from WAN firewall name 'WAN-TO-DMZ'
set zone-policy zone WAN from DMZ firewall name 'DMZ-TO-WAN'
set zone-policy zone DMZ from LAN firewall name 'LAN-TO-DMZ'
set zone-policy zone LAN from DMZ firewall name 'DMZ-TO-LAN'
set zone-policy zone LOCAL from WAN firewall name 'WAN-TO-LOCAL'
set zone-policy zone LOCAL from LAN firewall name 'LAN-TO-LOCAL'
set zone-policy zone WAN from LOCAL firewall name 'LOCAL-TO-WAN'
set zone-policy zone LAN from LOCAL firewall name 'LOCAL-TO-LAN'
set zone-policy zone DMZ from LOCAL firewall name 'LOCAL-TO-DMZ'

commit
save

Bước 5: Kiểm tra

exit

# Xem zone-policy
show zone-policy

# Xem firewall
show firewall ipv4 name WAN-TO-DMZ
show firewall ipv4 name LAN-TO-WAN

# Test cases:
# 1. LAN client ping 8.8.8.8            → OK (LAN→WAN: accept)
# 2. LAN client SSH vào router           → OK (LAN→LOCAL: port 22 accept)
# 3. Internet truy cập web server :80    → OK (WAN→DMZ: port 80 accept)
# 4. Internet SSH vào router             → BLOCKED (WAN→LOCAL: drop)
# 5. DMZ server truy cập LAN             → BLOCKED (DMZ→LAN: drop)
# 6. DMZ server cập nhật từ Internet     → OK (DMZ→WAN: accept)

Tổng kết

Trong bài này, bạn đã nắm được:

  • Zone-based firewall: Tổ chức firewall theo vùng mạng thay vì theo interface — rõ ràng, scalable
  • Các zone phổ biến: WAN, LAN, DMZ, GUEST, LOCAL và vai trò của từng zone
  • Cách tạo named firewall rule sets với format SRC-TO-DST
  • Cấu hình zone-policy để gán interfaces vào zones và áp dụng inter-zone policies
  • LOCAL zone: Bảo vệ chính VyOS router khỏi truy cập trái phép
  • Best practices: least privilege, state policy, commit-confirm, logging
  • Lab thực hành: Xây dựng hệ thống 3 zones (WAN/LAN/DMZ) hoàn chỉnh

Đến đây bạn đã có nền tảng vững chắc về VyOS: từ cài đặt, cấu hình interface, NAT, firewall cơ bản đến zone-based firewall. Các bài tiếp theo sẽ đi vào các chủ đề nâng cao hơn như DHCP/DNS services, VPN (IPsec, WireGuard), routing protocols (OSPF, BGP) và High Availability.