Vấn đề truy cập mạng doanh nghiệp: Khủng hoảng niềm tin từ mật khẩu dùng chung
Bước vào một văn phòng chi nhánh điển hình, bạn rất có thể sẽ thấy mạng Wi-Fi văn phòng hoạt động dựa trên một khóa chia sẻ trước duy nhất (WPA2/WPA3 Personal). Thông thường, mật khẩu đó còn được viết nguệch ngoạc ngay trên bảng trắng phòng họp. Ở mảng mạng có dây, các cổng switch trong phòng họp cũng thường xuyên bị bỏ ngỏ và hoàn toàn không được quản lý.
Mô hình này sụp đổ ngay khi có biến động về nhân sự. Khi một nhân viên nghỉ việc, nhà thầu hoàn thành dự án, hoặc một chiếc laptop của công ty bị thất lạc, bộ phận IT phải đối mặt với một lựa chọn đầy nan giải: Hoặc phải đi tìm từng chiếc trong số 250 laptop, 80 smartphone và hàng chục cảm biến IoT để đổi lại mật khẩu, hoặc đơn giản là chấp nhận mở toang cánh cửa bảo mật.
Gốc rễ của vấn đề nằm ở việc chia sẻ thông tin xác thực đối xứng. Khóa chia sẻ trước (pre-shared key) hoàn toàn thiếu vắng danh tính người dùng. Access point hay switch không thể biết ai đang kết nối hoặc liệu thiết bị đó có tuân thủ chính sách bảo mật endpoint của công ty hay không.
Nó chỉ biết duy nhất một điều: client đã gửi đúng chuỗi mật khẩu. Cơ chế lọc địa chỉ MAC (MAC address filtering) cũng chẳng mang lại hiệu quả bảo vệ thực tế nào. Các công cụ miễn phí như airodump-ng có thể vạch trần các địa chỉ MAC hợp lệ chỉ trong chưa đầy hai phút. Từ đó, kẻ tấn công có thể giả mạo card mạng của mình bằng lệnh ip link set dev wlan0 address rồi ung dung lẻn thẳng vào VLAN nội bộ của bạn.
Để giải quyết triệt để vấn đề này, doanh nghiệp cần áp dụng giải pháp kiểm soát truy cập mạng dựa trên cổng (IEEE 802.1X) được vận hành bởi một máy chủ RADIUS tập trung. FreeRADIUS chạy trên Linux chính là nền tảng cốt lõi vững chắc cho mô hình lấy định danh làm trọng tâm (identity-first) này.
So sánh các phương thức xác thực: PSK vs. PEAP-MSCHAPv2 vs. EAP-TLS
Để vượt ra khỏi giới hạn của mật khẩu tĩnh, bạn cần chọn một phương thức Extensible Authentication Protocol (EAP) phù hợp. Có ba mô hình chính thường xuất hiện trong môi trường mạng thực tế:
- WPA-Personal (PSK): Một secret dùng chung bảo vệ cho toàn bộ thiết bị đầu cuối. Thiết lập chỉ mất năm phút và không đòi hỏi bất kỳ máy chủ backend nào. Tuy nhiên, bạn hoàn toàn không có nhật ký kiểm toán (audit trail) theo từng người dùng và không thể thu hồi quyền truy cập của riêng một thiết bị khi nó bị xâm phạm.
- PEAP-MSCHAPv2 (EAP-PEAP): Người dùng đăng nhập bằng thông tin xác thực Active Directory hoặc LDAP tiêu chuẩn của họ bên trong một đường hầm TLS được mã hóa do máy chủ thiết lập. Dù phổ biến và tiện lợi cho người dùng cuối, phương thức này lại khiến mật khẩu dễ bị tấn công thu thập thông tin xác thực (credential harvesting). Nếu nhân viên kết nối qua một rogue access point (AP giả mạo) bỏ qua bước xác minh Root CA, các công cụ như
eaphammercó thể chặn bắt các phản hồi challenge của MS-CHAPv2 và bẻ khóa chúng offline. - EAP-TLS (RFC 5216): Xác thực chứng chỉ số hai chiều (mutual certificate authentication). Máy chủ RADIUS và client xác thực lẫn nhau bằng chứng chỉ kỹ thuật số X.509 do Certificate Authority (CA) nội bộ của bạn cấp phát. Hoàn toàn không có bất kỳ mật khẩu nào được truyền qua sóng không dây hay dây mạng.
Ưu và nhược điểm của các phương thức xác thực mạng
| Phương thức | Ưu điểm nổi bật | Đánh đổi vận hành |
|---|---|---|
| WPA2/WPA3 PSK | Triển khai trong vài phút. Tương thích rộng rãi với phần cứng cũ và thiết bị IoT nhúng mà không cần máy chủ chuyên dụng. | Hoàn toàn không có trách nhiệm giải trình theo người dùng. Khi lộ mật khẩu, việc cập nhật lại trên từng thiết bị tốn hàng giờ làm việc thủ công. |
| PEAP-MSCHAPv2 | Quản lý định danh tập trung. Kết nối trực tiếp với LDAP hoặc Active Directory mà không cần phát hành chứng chỉ client. | Kế thừa các lỗ hổng mật mã cố hữu của MS-CHAPv2 cũ. Dễ bị tấn công bởi access point giả mạo (evil-twin) và thu thập thông tin xác thực. |
| EAP-TLS | Miễn nhiễm với tấn công password spraying và phishing. Cơ chế tin cậy mật mã hai chiều cho phép kết nối liền mạch ngay khi khởi động mà không cần người dùng nhập mật khẩu. | Đòi hỏi hạ tầng khóa công khai (PKI). Cần giải pháp MDM như Intune hoặc Jamf để quản lý vòng đời chứng chỉ. |
Kiến trúc đề xuất: FreeRADIUS kết hợp EAP-TLS
EAP-TLS mang lại mô hình truy cập sạch sẽ và kiên cố nhất cho Wi-Fi doanh nghiệp (WPA-Enterprise) lẫn các cổng switch vật lý (802.1X có dây). Dưới đây là cơ chế hoạt động chi tiết của vòng lặp xác thực:
- Supplicant (laptop hoặc thiết bị di động của client) gửi frame
EAPoL-Startđến access point không dây hoặc switch biên (edge switch). - Authenticator (access point hoặc switch) đóng gói payload EAP vào gói tin UDP RADIUS và chuyển tiếp đến FreeRADIUS qua cổng 1812.
- Authentication Server (FreeRADIUS) đàm phán một phiên bắt tay TLS được mã hóa trực tiếp với client. FreeRADIUS xác thực chứng chỉ client đối chiếu với Root CA đáng tin cậy, đồng thời client cũng xác minh chứng chỉ của máy chủ RADIUS.
- Khi mối quan hệ tin cậy mật mã được thiết lập, FreeRADIUS phản hồi bằng một frame
Access-Accept. Phản hồi này có thể chứa các thuộc tính RADIUS động, chẳng hạn nhưTunnel-Private-Group-Id = "30", để tự động đưa người dùng vào đúng VLAN kỹ thuật hoặc VLAN nội bộ công ty được cô lập.
Hướng dẫn triển khai: Cài đặt FreeRADIUS với EAP-TLS trên Linux
Hướng dẫn triển khai này áp dụng cho Ubuntu 24.04 LTS và Debian 12 chạy FreeRADIUS phiên bản 3.2.x cùng OpenSSL.
Bước 1: Cài đặt FreeRADIUS và các công cụ mật mã
sudo apt update
sudo apt install -y freeradius freeradius-utils openssl
# Dừng system service để chúng ta có thể chạy FreeRADIUS tương tác ở chế độ debug sau đó
sudo systemctl stop freeradius
Bước 2: Tạo hạ tầng PKI nội bộ
FreeRADIUS có sẵn các script bootstrap mẫu trong /etc/freeradius/3.0/certs/, nhưng việc tự tạo chứng chỉ riêng sẽ giúp bạn toàn quyền kiểm soát độ dài khóa, bộ cipher suite và thời hạn hiệu lực.
# Tạo thư mục làm việc an toàn cho chứng chỉ của bạn
sudo mkdir -p /etc/freeradius/3.0/pki
cd /etc/freeradius/3.0/pki
# 1. Tạo private key cho Root CA (RSA 4096-bit) và chứng chỉ tự ký (thời hạn 5 năm)
sudo openssl genrsa -aes256 -out ca.key 4096
sudo openssl req -x509 -new -key ca.key -sha256 -days 1825 -out ca.pem \
-subj "/C=US/ST=Texas/L=Austin/O=CoreInfra/CN=CoreInfra-Root-CA"
Khi tạo mật khẩu để mã hóa private key của CA và xuất file bundle PKCS#12 cho client, tôi sử dụng công cụ tạo mật khẩu tại toolcraft.app/vi/tools/security/password-generator cho mật khẩu máy chủ — công cụ này chạy hoàn toàn trên trình duyệt nên không có dữ liệu nào bị gửi qua mạng.
# 2. Tạo private key 2048-bit và yêu cầu ký chứng chỉ (CSR) cho máy chủ FreeRADIUS
sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr \
-subj "/C=US/ST=Texas/L=Austin/O=CoreInfra/CN=radius.internal.lan"
# Ký chứng chỉ server bằng Root CA (thời hạn 2 năm)
sudo openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial \
-out server.pem -days 730 -sha256
# 3. Tạo tham số Diffie-Hellman (bắt buộc cho việc đàm phán cipher TLS)
sudo openssl dhparam -out dh 2048
# 4. Tạo chứng chỉ client cho một máy trạm thử nghiệm
sudo openssl genrsa -out client-laptop01.key 2048
sudo openssl req -new -key client-laptop01.key -out client-laptop01.csr \
-subj "/C=US/ST=Texas/L=Austin/O=CoreInfra/[email protected]"
# Ký chứng chỉ client (thời hạn 1 năm)
sudo openssl x509 -req -in client-laptop01.csr -CA ca.pem -CAkey ca.key -CAcreateserial \
-out client-laptop01.pem -days 365 -sha256
# Đóng gói chứng chỉ client, key và Root CA thành file container PKCS#12 (.p12) có mật khẩu bảo vệ
sudo openssl pkcs12 -export -out client-laptop01.p12 \
-inkey client-laptop01.key -in client-laptop01.pem -certfile ca.pem
Bước 3: Thiết lập quyền bảo mật file
Bảo vệ các private key của bạn khỏi những người dùng cục bộ khác trước khi nạp chúng vào FreeRADIUS:
sudo chown -R freerad:freerad /etc/freeradius/3.0/pki
sudo chmod 640 /etc/freeradius/3.0/pki/*
sudo chmod 600 /etc/freeradius/3.0/pki/*.key
Bước 4: Cấu hình module EAP của FreeRADIUS
Mở file /etc/freeradius/3.0/mods-available/eap bằng trình soạn thảo văn bản của bạn. Cập nhật khối tls-config tls-common để trỏ đến các file key và chứng chỉ vừa tạo. Giữ nguyên fragment_size = 1024 giúp tránh tình trạng rớt gói tin khi các gói RADIUS bị phân mảnh đi qua các đường hầm WAN có MTU thấp:
eap {
default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 4096
tls-config tls-common {
private_key_file = /etc/freeradius/3.0/pki/server.key
certificate_file = /etc/freeradius/3.0/pki/server.pem
ca_file = /etc/freeradius/3.0/pki/ca.pem
dh_file = /etc/freeradius/3.0/pki/dh
fragment_size = 1024
check_crl = no
cipher_list = "DEFAULT@SECLEVEL=2"
tls_min_version = "1.2"
tls_max_version = "1.3"
}
tls {
tls = tls-common
}
}
Bước 5: Định nghĩa thiết bị truy cập mạng trong clients.conf
Các switch biên và access point không dây của bạn sẽ đóng vai trò là các RADIUS client (authenticators). Cấp quyền cho dải mạng IP và shared secret tương ứng của chúng trong /etc/freeradius/3.0/clients.conf:
# Switch các tầng (Cisco Catalyst stack)
client corporate_switches {
ipaddr = 10.10.20.0/24
secret = K9x#mP4$vL2@qR8!
nas_type = cisco
}
# Access point Wi-Fi doanh nghiệp
client wifi_access_points {
ipaddr = 10.10.30.50
secret = T7y&wE3#nB9*kM5$
shortname = ap-hq-floor2
}
Bước 6: Chạy ở chế độ Debug và xác minh
Hãy bỏ qua log của systemd service trong quá trình cài đặt ban đầu. Việc chạy FreeRADIUS trực tiếp ở chế độ debug trên terminal sẽ hiển thị toàn bộ quá trình trao đổi gói tin EAP từng dòng một:
sudo freeradius -X
Daemon sẽ nạp các module cấu hình, liên kết với cổng UDP 1812 (xác thực) và 1813 (accounting), rồi thông báo trạng thái sẵn sàng:
Ready to process requests
Import file client-laptop01.p12 vào máy tính thử nghiệm của bạn. Trên macOS, nhấp đúp vào file để import vào Keychain Access. Trên Windows, nhấp đúp để mở Certificate Import Wizard và lưu vào kho Current User. Tiếp theo, kết nối vào SSID 802.1X của công ty hoặc cắm dây vào cổng switch đã bật 802.1X.
Terminal chạy freeradius -X sẽ hiển thị chi tiết tiến trình bắt tay TLS. Trong khoảng 300 mili-giây, bạn sẽ thấy thông báo sau xuất hiện:
Sending Access-Accept Id 1 from 10.10.10.5:1812 to 10.10.30.50:41255
Finished request 0. Done processing request.
Sau khi đã xác nhận quá trình xác thực thành công, nhấn Ctrl+C để thoát khỏi chế độ debug. Sau đó, khởi chạy FreeRADIUS dưới dạng một systemd service chạy ngầm:
sudo systemctl enable --now freeradius
Khi EAP-TLS đã hoạt động, việc xử lý một thiết bị bị thất lạc chỉ mất vài giây. Thu hồi chứng chỉ client sẽ ngay lập tức cắt đứt quyền truy cập mạng của thiết bị đó mà không cần phải đổi lại mật khẩu hàng loạt hay làm gián đoạn bất kỳ ai khác trên mạng.

