Sáu tháng trước, đội ngũ của chúng tôi gặp bế tắc trên quy mô 480 cổng switch trải dài qua ba tầng văn phòng. Nhân sự nhà thầu tự ý đổi dây mạng giữa các bàn làm việc. Các thiết bị thử nghiệm chưa được phê duyệt xuất hiện tràn lan trên các cổng untagged. Các địa chỉ MAC lạ kích hoạt các quy tắc port-security tĩnh gần như mỗi buổi chiều, liên tục tạo ra hàng loạt ticket hỗ trợ thủ công cho đội ngũ helpdesk. Chính những phiền toái đó đã thúc đẩy chúng tôi triển khai PacketFence, một nền tảng kiểm soát truy cập mạng (Network Access Control – NAC) mã nguồn mở chạy trên Debian 12.
Hiện tại, cụm máy chủ này đang quản lý 18 access switch và 32 wireless access point một cách nhẹ nhàng, trơn tru. Dưới đây là những kinh nghiệm thực tế hiệu quả trong quá trình triển khai, những cái bẫy chúng tôi từng vấp phải khi chuyển đổi hệ thống, cùng hướng dẫn chi tiết giúp bạn thiết lập cơ chế cô lập thiết bị động trong môi trường của chính mình.
Bắt đầu nhanh (5 phút)
Một môi trường lab PacketFence cơ bản chỉ cần một máy ảo Debian 12 sạch với cấu hình tối thiểu 4 vCPU, 8 GB RAM và hai giao diện mạng. Hãy dành riêng eth0 cho truy cập quản trị và chỉ định eth1 để lắng nghe các VLAN truy cập dạng trunk.
Bắt đầu bằng việc cài đặt các gói phụ thuộc, nhập khóa ký kho lưu trữ của Inverse và tải về các gói cài đặt:
# Cài đặt các tiện ích quản lý khóa
apt-get update && apt-get install -y curl gnupg lsb-release
# Nhập khóa ký Inverse
curl -fsSL https://inverse.ca/downloads/GPG-KEY-Inverse | gpg --dearmor -o /etc/apt/trusted.gpg.d/inverse.gpg
# Thêm kho lưu trữ Bookworm chính thức
echo "deb http://inverse.ca/downloads/PacketFence/debian/bookworm bookworm bookworm" > /etc/apt/sources.list.d/packetfence.list
# Cập nhật danh sách kho lưu trữ và cài đặt toàn bộ stack
apt-get update
apt-get install -y packetfence
Tiếp theo, hãy khởi chạy daemon cấu hình qua giao diện web để tiến hành các bước thiết lập ban đầu (bootstrap):
# Khởi động và kiểm tra dịch vụ cấu hình
systemctl enable --now packetfence-configurator
systemctl status packetfence-configurator
# Mở trình hướng dẫn web trên trình duyệt:
# https://<SERVER_IP>:1443/configuration
Thực hiện lần lượt ba bước theo hướng dẫn của trình cài đặt:
- Thiết lập cơ sở dữ liệu: Để PacketFence tự động khởi tạo schema MariaDB và tạo thông tin xác thực cục bộ.
- Gán giao diện mạng: Gán
eth0làm giao diện Management (ví dụ:192.168.10.50/24) và chọneth1làm trunk thực thi chính sách. - Tài khoản quản trị: Tạo thông tin đăng nhập cho quản trị viên cụm chính của bạn.
Sau khi trình hướng dẫn ghi xong các tệp cấu hình, hãy khởi động toàn bộ stack dịch vụ lõi từ shell:
/usr/local/pf/bin/pfcmd service pf start
/usr/local/pf/bin/pfcmd service pf status
Phân tích chuyên sâu
PacketFence không hoạt động theo kiểu inline như một điểm nghẽn cổ chai trên đường truyền. Lưu lượng người dùng của bạn không bao giờ đi qua CPU của máy chủ PacketFence. Thay vào đó, nó hoạt động hoàn toàn out-of-band với vai trò là bộ điều phối mặt phẳng điều khiển (control plane). Nó lắng nghe các phiên RADIUS, kiểm tra các gói tin DHCP và gửi lệnh điều khiển đến switch thông qua SNMP hoặc RADIUS Change of Authorization (CoA).
Vòng đời xác thực
Khi một kỹ sư cắm dây mạng vào cổng Gi1/0/12, switch và PacketFence sẽ phối hợp thực thi một chuỗi tác vụ chỉ trong khoảng 800 mili-giây:
- Thăm dò ban đầu: Cổng switch phát hiện trạng thái link-up. Nó gửi yêu cầu danh tính 802.1X đến thiết bị đầu cuối. Nếu máy trạm không có 802.1X supplicant sau hai lần timeout, switch sẽ tự động chuyển sang cơ chế MAC Authentication Bypass (MAB).
- Truy vấn RADIUS: Switch chuyển tiếp gói tin
Access-Requestchứa địa chỉ MAC của thiết bị, calling-station ID và IP của switch đến PacketFence qua cổng UDP 1812. - Đánh giá chính sách: PacketFence phân tích fingerprint của máy chủ, kiểm tra tư cách thành viên thư mục và truy vấn trạng thái tuân thủ của node cục bộ.
- Gán VLAN: PacketFence phản hồi bằng một frame RADIUS
Access-Acceptmang các thuộc tính vendor theo chuẩn RFC 2868 và RFC 3580 (Tunnel-Type = VLAN,Tunnel-Medium-Type = IEEE-802vàTunnel-Private-Group-Id = <VLAN_ID>). - Chuyển đổi trạng thái qua CoA: Khi một thiết bị chưa xác thực hoàn tất quy trình onboarding qua captive portal, PacketFence sẽ gửi gói tin RFC 3576 / RFC 5176 Disconnect-Request đến cổng UDP 3799 trên switch. Switch ngay lập tức xóa phiên làm việc và đánh giá lại cổng mạng—hoàn toàn không cần rút cắm lại cáp.
Cấu hình Access Switch
Chúng tôi đã kiểm thử cấu hình chuẩn production này trên các dòng switch Cisco Catalyst 2960X và 9300 chạy IOS-XE 17.x:
! Cấu hình RADIUS toàn cục
radius server PACKETFENCE
address ipv4 192.168.10.50 auth-port 1812 acct-port 1813
key SuperSecretRadiusKey2026
!
aaa new-model
aaa group server radius PF_GROUP
server name PACKETFENCE
!
aaa authentication dot1x default group PF_GROUP
aaa authorization network default group PF_GROUP
aaa accounting dot1x default start-stop group PF_GROUP
aaa server radius dynamic-author
client 192.168.10.50 server-key SuperSecretRadiusKey2026
!
! Cấu hình Edge Access Port
interface GigabitEthernet1/0/12
description Access-Port-Controlled-by-NAC
switchport mode access
switchport access vlan 99
authentication host-mode multi-auth
authentication port-control auto
dot1x pae authenticator
authentication order dot1x mab
authentication priority dot1x mab
mab
Hãy chú ý đến liên kết dự phòng: switchport access vlan 99. VLAN 99 đóng vai trò là một Registration VLAN cô lập. Các thiết bị phần cứng chưa đăng ký sẽ rơi vào đây trước tiên, nhận một địa chỉ IP trong vùng sandbox và bị chặn lại bởi một HTTP captive portal.
Sử dụng nâng cao
Xác thực MAC cơ bản mới chỉ là bước khởi đầu. Lợi ích vận hành thực sự đến từ việc kết hợp truy vấn nhóm LDAP/Active Directory với cơ chế cách ly tự động.
Điều hướng VLAN động theo vai trò
Việc gán cổng cố định theo bàn làm việc đã không còn phù hợp trong văn phòng hiện đại. Một kiểm toán viên tài chính và một kỹ sư DevOps có thể cắm cùng vào một ổ cắm mạng âm tường tại Phòng họp B nhưng lại thuộc về các subnet hoàn toàn cách biệt. Cổng switch sẽ tự động biến đổi trạng thái linh hoạt để khớp với danh tính người vừa xác thực.
Cấu hình switch nằm trong /usr/local/pf/conf/switches.conf hoặc tại mục Configuration > Network Infrastructure > Switches trên giao diện web:
[192.168.10.10]
description=Core-Stack-IDF1
type=Cisco::Catalyst_2960
mode=production
radiusSecret=SuperSecretRadiusKey2026
VoIPEnabled=yes
# Các VLAN đích động
RoleMap=yes
defaultRole=default
registrationVlan=99
isolationVlan=98
guestVlan=30
employee_engineeringVlan=40
employee_financeVlan=50
Tự động cô lập khi có hành vi đáng ngờ
PacketFence tích hợp trực tiếp với các công cụ bảo mật như Suricata, Zeek hoặc Defender for Endpoint. Giả sử một máy trạm nội bộ bất ngờ thực hiện quét cổng (port scan) ồ ạt trên subnet máy chủ của bạn. Hệ thống IDS sẽ gửi một webhook cảnh báo đến PacketFence, lập tức hạ cấp danh mục node xuống isolated và đẩy thiết bị sang VLAN 98 thông qua CoA chỉ trong vòng hai giây.
Bạn cũng có thể cô lập một máy trạm bị xâm nhập theo cách thủ công ngay từ terminal:
# Đánh dấu endpoint bị xâm nhập
/usr/local/pf/bin/pfcmd node modify 00:11:22:33:44:55 status=unreg category="Security_Incident"
# Phát lệnh CoA bounce ngay lập tức đến access switch
/usr/local/pf/bin/pfcmd radius authorize 00:11:22:33:44:55
Kinh nghiệm thực tế
Vận hành cụm NAC trong một văn phòng với hàng trăm thiết bị kết nối mỗi ngày sẽ làm phát sinh nhiều trường hợp biên (edge cases) mà môi trường lab hiếm khi gặp. Hãy lưu ý những thực tế vận hành sau:
- Xử lý địa chỉ MAC ngẫu nhiên: iOS, Android và Windows 11 mặc định ngẫu nhiên hóa địa chỉ MAC trên các mạng không đáng tin cậy. Nếu chỉ dùng MAB thuần túy, quá trình onboarding sẽ bị hỏng do thiết bị liên tục đổi địa chỉ phần cứng ảo mỗi lần kết nối lại. Thay vào đó, hãy triển khai 802.1X với EAP-TLS hoặc PEAP, gắn quyền truy cập mạng với chứng chỉ người dùng hoặc máy tính thay vì địa chỉ phần cứng.
- Tách biệt giao diện quản trị (Air-gap): Tuyệt đối không bao giờ để lộ cổng quản trị web (
TCP 1443) hoặc IP quản trị switch vào subnet đăng ký (registration). Hãy cô lậpeth0sau quy tắc firewall quản trị. Nếu một khách chưa xác thực trên VLAN 99 có thể ping đến mặt phẳng quản trị của switch, kiến trúc NAC của bạn đang tồn tại một lỗ hổng chí mạng. - Rút ngắn thời gian DHCP Lease trên Registration Pool: Thiết bị chỉ nên lưu lại dưới năm phút trong VLAN 99 trước khi được chuyển sang vai trò đã xác thực. Hãy đặt thời gian cấp phát DHCP lease cho mạng đăng ký chỉ từ 10 đến 15 phút. Thiết lập mặc định 24 giờ trên một dải cấp phát
/24sẽ cạn kiệt IP sạch trước giờ trưa của một ngày làm việc bận rộn. - Troubleshoot gói tin RADIUS trực tiếp qua CLI: Khi log trên switch báo lỗi timeout xác thực, hãy bỏ qua giao diện web và theo dõi trực tiếp các gói tin thô trên máy chủ:
# Theo dõi kết quả xác thực theo thời gian thực
tail -f /usr/local/pf/logs/radius.log | grep -E "(Login OK|Login incorrect|Auth-Type)"
# Chạy FreeRADIUS ở chế độ debug tiền cảnh để theo dõi chi tiết luồng gói tin
/usr/local/pf/bin/pfcmd service radiusd stop
/usr/sbin/freeradius -X -d /usr/local/pf/raddb
PacketFence mang lại giá trị rất xứng đáng với công sức bỏ ra ban đầu. Một khi cấu hình switch và ánh xạ thư mục đã đi vào ổn định, bạn có thể hoàn toàn giải phóng đôi tay khỏi việc đấu nối cổng switch thủ công, trong khi vẫn ngăn chặn triệt để mọi thiết bị lạ xâm nhập vào các subnet quan trọng.

