Triển khai Network Access Control với PacketFence: Kiểm soát thiết bị kết nối mạng nội bộ theo chính sách bảo mật

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Câu chuyện bắt đầu từ một buổi sáng thứ Hai — mình nhận được báo cáo từ team sysadmin: có 3 chiếc laptop cá nhân của nhân viên đã kết nối vào VLAN nội bộ qua switch tầng 3, và không ai hay biết. Mạng lúc đó chỉ dùng VLAN thuần túy để phân tách, nhưng không có cơ chế nào kiểm tra xem thiết bị kết nối có đáng tin cậy hay không.

Mình quản lý network cho office 50 người và một datacenter nhỏ — vấn đề đó đủ để thúc mình tìm hiểu về Network Access Control. Và PacketFence là lựa chọn mình đi đến sau khi so sánh vài giải pháp.

NAC là gì và tại sao mạng của bạn đang thiếu nó

Hãy nghĩ đơn giản thế này: mạng nội bộ của bạn giống như một tòa nhà văn phòng. Hiện tại cửa mở toang — ai cắm dây vào cũng vào được. NAC (Network Access Control) là hệ thống kiểm soát ra vào: thiết bị phải “xuất trình chứng minh thư” trước khi được tiếp cận tài nguyên nội bộ.

PacketFence ra đời từ 2006, hiện ở version 13.x — và danh sách tính năng đủ để xử lý gần như mọi tình huống thực tế:

  • 802.1X authentication — thiết bị xác thực qua RADIUS trước khi switch cấp quyền truy cập
  • MAC-based detection — nhận diện và phân loại thiết bị qua địa chỉ MAC
  • Captive portal — trang đăng nhập web cho Wi-Fi guest hoặc BYOD
  • VLAN isolation — tự động đẩy thiết bị lạ vào VLAN cách ly
  • Compliance check — tích hợp Nessus/OpenVAS để kiểm tra thiết bị trước khi cấp quyền

Cái mình cần nhất: khi ai đó cắm laptop cá nhân vào switch hoặc kết nối Wi-Fi văn phòng, hệ thống tự nhận ra thiết bị chưa đăng ký và chuyển nó vào VLAN riêng — không thể chạm đến server nội bộ.

Cài đặt PacketFence trên Ubuntu 22.04

PacketFence cần một server riêng — không chạy chung với dịch vụ khác. Yêu cầu tối thiểu: 4 CPU, 8GB RAM, 2 network interface (một dùng quản lý, một kết nối vào switch/AP).

Bước 1: Thêm repository và cài đặt

# Thêm PacketFence repository
wget https://inverse.ca/downloads/PacketFence/ubuntu/PacketFence.list \
  -O /etc/apt/sources.list.d/PacketFence.list

# Thêm GPG key
wget -O - https://inverse.ca/downloads/PacketFence/ubuntu/key.gpg | apt-key add -

# Cập nhật và cài đặt
apt-get update
apt-get install packetfence -y

Bước 2: Khởi động web configurator

# Bật service configurator
systemctl start packetfence-config
systemctl enable packetfence-config

# Kiểm tra trạng thái
systemctl status packetfence-config

Service lên rồi, mở browser trỏ tới https://<IP-server>:1443. Wizard khá thân thiện — hỏi từng bước về network topology rồi tự sinh config tương ứng. Mất khoảng 15–20 phút để hoàn thành setup lần đầu.

Bước 3: Khai báo network interface

PacketFence cần biết interface nào để “nghe” traffic. Cấu hình cơ bản trong /usr/local/pf/conf/pf.conf:

[interface eth1]
ip=192.168.10.1
mask=255.255.255.0
type=management

[interface eth2]
ip=10.0.0.1
mask=255.255.255.0
type=internal

Thực ra mình thường dùng web UI để cấu hình phần này — ít lỗi hơn vì nó validate input ngay lập tức.

Cấu hình RADIUS và tích hợp 802.1X

FreeRADIUS đã có sẵn trong PacketFence, không cần cài thêm gì. Bước tiếp theo là cấu hình switch để gửi authentication request về đúng địa chỉ RADIUS server.

Đăng ký switch vào PacketFence

Vào Admin UI → Configuration → Network Devices → Switches, thêm từng switch với các thông số:

  • IP: địa chỉ IP của switch
  • Type: chọn đúng vendor (Cisco, HP, Dell, Aruba…)
  • RADIUS Secret: mật khẩu dùng chung giữa switch và RADIUS server
  • Roles: map role → VLAN (registration VLAN, isolation VLAN, production VLAN)

Cấu hình phía switch Cisco

! Khai báo RADIUS server
radius server PACKETFENCE
 address ipv4 192.168.10.1 auth-port 1812 acct-port 1813
 key MySecretKey123

! Bật 802.1X globally
aaa new-model
aaa authentication dot1x default group radius
aaa authorization network default group radius
dot1x system-auth-control

! Áp dụng cho port người dùng
interface GigabitEthernet1/0/5
 switchport mode access
 authentication port-control auto
 dot1x pae authenticator
 spanning-tree portfast

Tích hợp Active Directory để xác thực người dùng

AD integration gần như là bắt buộc trong môi trường văn phòng — nhân viên xác thực bằng account Windows của họ, không cần tạo thêm account riêng cho NAC. Vào Configuration → Policies and Access Control → Authentication Sources → Add → Active Directory.

Trước khi cấu hình, test kết nối LDAP từ server PacketFence:

ldapsearch -H ldap://192.168.1.10 \
  -D "CN=pf-bind,OU=ServiceAccounts,DC=company,DC=local" \
  -w "BindPassword" \
  -b "DC=company,DC=local" \
  "(sAMAccountName=testuser)"

Mình tạo một service account riêng trong AD chỉ có quyền đọc — tuyệt đối không dùng domain admin cho việc này.

Định nghĩa Security Policy theo từng nhóm thiết bị

Đây là điểm mạnh của PacketFence so với chỉ dùng VLAN thuần: bạn định nghĩa policy cho từng loại thiết bị, từng nhóm người dùng.

Connection Profiles

Mở Configuration → Policies and Access Control → Connection Profiles. Mình tạo 3 profiles phù hợp với thực tế văn phòng:

  • Corporate-Wired: Laptop công ty, xác thực 802.1X qua AD → VLAN production
  • BYOD-WiFi: Thiết bị cá nhân nhân viên, captive portal đăng ký → VLAN BYOD (chỉ internet)
  • Guest-WiFi: Khách vãng lai, captive portal đơn giản → VLAN guest (chỉ internet, giới hạn 10 Mbps download)

Xử lý thiết bị không hỗ trợ 802.1X

Máy in, camera IP, smart TV — những thiết bị này không thể xác thực 802.1X. Cách xử lý: whitelist theo MAC address hoặc đặt chúng vào một VLAN riêng biệt.

Mình tạo hẳn một VLAN “IoT” và một Connection Profile tương ứng, áp dụng cho các port switch kết nối với thiết bị IoT. Đơn giản nhưng hiệu quả.

Kiểm tra hoạt động và Monitoring

Xem danh sách thiết bị đang kết nối

Mình bookmark tab Nodes trong Admin UI — đây là nơi đầu tiên mở mỗi sáng để xem toàn bộ thiết bị đã đăng ký, đang online, hoặc đang bị cách ly.

# Query database trực tiếp khi cần report
mysql -u pf -p pf -e "
SELECT mac, computername, status, last_seen, role
FROM node
WHERE status = 'reg'
ORDER BY last_seen DESC
LIMIT 20;"

Theo dõi RADIUS authentication log

# Xem log authentication real-time
tail -f /usr/local/pf/logs/radius.log

# Lọc theo MAC address cụ thể
grep "aa:bb:cc:dd:ee:ff" /usr/local/pf/logs/radius.log | tail -50

# Xem authentication failure gần đây
grep "Access-Reject" /usr/local/pf/logs/radius.log | tail -20

Debug VLAN assignment

Khi có báo cáo “cắm vào không vào được mạng”, đây là quy trình debug mình hay dùng:

# Test RADIUS trực tiếp
radtest testuser TestPassword 127.0.0.1 1812 testing123

# Kiểm tra tổng thể hệ thống
pfcmd checkup

# Xem node hiện tại đang ở trạng thái và VLAN nào
pfcmd node view aa:bb:cc:dd:ee:ff

# Khởi động lại RADIUS nếu cần
systemctl restart packetfence-radiusd-auth

Cài đặt alert khi có thiết bị lạ

Alert là tính năng hay bị bỏ qua nhưng rất có giá trị. Mình vào Configuration → Integration → Alerts, cấu hình gửi email mỗi khi có thiết bị mới đăng ký ngoài giờ hành chính — và đúng là đã phát hiện vài lần nhân viên cắm thiết bị cá nhân vào lúc 9–10 giờ tối.

# Test gửi email alert thủ công
pfcmd emailreport type=node action=new

Những điều rút ra sau 6 tháng vận hành

Rollout từ từ, đừng bật enforcement ngay: Bắt đầu bằng detection-only mode — để PacketFence ghi nhận thiết bị nhưng không block ai. Sau 1–2 tuần, bạn sẽ có danh sách đầy đủ thiết bị hợp lệ để whitelist trước khi bật enforcement. Bỏ qua bước này, bạn sẽ nhận hàng chục ticket support trong ngày đầu tiên.

MAC spoofing là điểm yếu cần biết: NAC dựa trên MAC address không phải là bất khả xâm phạm — kẻ tấn công có thể clone MAC của thiết bị hợp lệ. 802.1X với certificate-based auth (EAP-TLS) mới thực sự đáng tin cậy, nhưng phức tạp hơn nhiều để triển khai (cần PKI nội bộ). Với mình, dùng MAC detection cho IoT + 802.1X cho laptop đã đủ để ngủ ngon ở quy mô hiện tại.

Document mọi thứ: Mỗi lần thêm thiết bị mới vào whitelist, mình ghi chú lại: thiết bị gì, của ai, lý do whitelist. Sáu tháng nhìn lại, danh sách đó chính xác hơn bất kỳ cái spreadsheet inventory nào mình từng tạo thủ công.

PacketFence không phải giải pháp dễ dàng — setup ban đầu tốn 1–2 ngày làm việc. Nhưng sau đó, bạn có tầm nhìn rõ ràng về mọi thiết bị đang kết nối mạng, và đó là thứ không có switch, firewall nào thông thường cho bạn được.

Share: