Loading...

RADIUS Integration trên FortiGate

1. Liên hệ thực tế

Sau khi LDAP hoạt động ổn cho phòng ban dùng Windows, anh Nam gặp tình huống mới: đội hạ tầng mạng có một máy chủ NPS (Network Policy Server) của Microsoft đang chạy RADIUS, dùng chung cho cả xác thực VPN của Cisco router lẫn switch. Sếp muốn FortiGate cũng xác thực qua RADIUS này luôn để thống nhất một nơi quản lý, tránh phải cấu hình LDAP riêng.

Chị Lan giải thích khác biệt: "LDAP là em hỏi thẳng vào cây thư mục để tìm thông tin user. RADIUS thì khác — em gửi một gói tin xác thực (Access-Request) tới RADIUS server, server đó tự xử lý logic bên trong (có thể check AD, có thể check MFA, tùy họ cấu hình) rồi trả lời Accept hoặc Reject. FortiGate không cần biết bên trong RADIUS server làm gì."

Bài này trình bày cách cấu hình FortiGate làm RADIUS client, các kiểu auth-type phổ biến, và cách debug khi RADIUS server trả về reject.


2. Kiến thức cốt lõi

2.1 RADIUS Server object — cấu hình cơ bản

config user radius
    edit "NPS-COMPANY"
        set server "10.10.10.20"
        set secret ********
        set auth-type auto
        set nas-ip 10.10.10.1
    next
end
  • server — địa chỉ IP/FQDN của RADIUS server.
  • secret — shared secret giữa FortiGate và RADIUS server, phải khớp tuyệt đối với cấu hình phía server (VD: NPS trên Windows, FreeRADIUS...). Đây là nguyên nhân lỗi phổ biến nhất khi mới cấu hình.
  • auth-type — giao thức xác thực dùng khi gửi Access-Request: auto (FortiGate tự thử lần lượt các giao thức được hỗ trợ), hoặc chỉ định cụ thể như papchapmschapms_chap_v2.
  • nas-ip — địa chỉ IP mà FortiGate tự giới thiệu là NAS (Network Access Server) trong gói RADIUS, một số RADIUS server yêu cầu giá trị này khớp với client đã khai báo phía server.

⚠️ Lưu ý: Nếu RADIUS server phía sau (như NPS) chỉ cho phép MS-CHAPv2, mà FortiGate để auth-type auto mà quá trình thương lượng giao thức không khớp cấu hình Network Policy trên NPS, xác thực sẽ bị reject dù secret đã đúng. Nên khai rõ set auth-type ms_chap_v2 khi biết chắc phía server yêu cầu giao thức nào, thay vì để auto rồi mất công debug.

2.2 RADIUS vs LDAP — khi nào dùng cái nào

Tiêu chíLDAPRADIUS
Cách hoạt động FortiGate tự bind và truy vấn trực tiếp cây thư mục FortiGate gửi Access-Request, server xử lý logic và trả Accept/Reject
Phù hợp khi Cần đọc thuộc tính chi tiết của user/group trong AD Đã có sẵn hạ tầng RADIUS dùng chung nhiều thiết bị (switch, router, VPN...)
Hỗ trợ MFA tích hợp sẵn ở server Không có cơ chế MFA riêng ở tầng LDAP Nhiều RADIUS server (NPS + Azure MFA extension, FreeRADIUS + OTP...) hỗ trợ MFA ngay tại server
Độ phức tạp cấu hình group mapping Cần khai DN đầy đủ của group Có thể dùng RADIUS attribute (VD: Filter-Id, Class) để ánh xạ group, gọn hơn với hạ tầng đã chuẩn hóa

🔄 Khác biệt version FortiOS: Từ 7.4 trở lên, config user radius hỗ trợ thêm transport-protocol tcp (RADIUS over TCP, RFC 6613) và tls-min-proto-version để tăng bảo mật kênh truyền RADIUS. FortiOS 7.0 chỉ hỗ trợ RADIUS truyền thống qua UDP — cần lưu ý khi tài liệu tham khảo online có thể lẫn tham số của version mới hơn.

2.3 Ánh xạ Group qua RADIUS attribute

Không giống LDAP dùng DN đầy đủ, RADIUS ánh xạ group theo attribute trả về trong gói Access-Accept — phổ biến nhất là Filter-Id hoặc Class:

config user group
    edit "GRP_KETOAN_RADIUS"
        set group-type firewall
        config match
            edit 1
                set server-name "NPS-COMPANY"
                set group-name "KeToan"
            next
        end
    next
end

Với cấu hình này, FortiGate kiểm tra giá trị attribute (filter-Id mặc định, có thể đổi qua set group-override-attr-type class nếu phía RADIUS server trả về qua Class thay vì Filter-Id) có khớp chuỗi "KeToan" không — giá trị này phải được cấu hình khớp chính xác ở phía Network Policy trên RADIUS server (VD: NPS Attribute → Filter-Id → String = KeToan).

⚠️ Lưu ý: Không như LDAP group-name yêu cầu DN, ở đây group-name chỉ là một chuỗi string thuần — dễ gõ sai chính tả (hoa/thường, khoảng trắng thừa) dẫn đến match thất bại dù xác thực RADIUS đã Accept.

2.4 Kiểm tra và debug RADIUS

diagnose test authserver radius NPS-COMPANY mschap2 nam.nv <password>

Lệnh test phải khai rõ giao thức test (VD: papchapmschap2) khớp với auth-type đã cấu hình. Kết quả có thể trả về:

  • authenticate 'user' against 'mschap2' passed — thành công.
  • authenticate ... failed kèm mã lỗi MS-CHAP (VD: E=649) — thường là do Network Policy phía RADIUS server chưa cho phép giao thức đó, hoặc tài khoản bị khóa/hết hạn phía AD (khi NPS dùng AD làm backend).

Ngoài ra:

diagnose debug application fnbamd -1
diagnose debug enable

giúp xem chi tiết gói tin trao đổi và lý do reject cụ thể trả về từ RADIUS server, tương tự cách debug LDAP đã trình bày ở bài trước.

⚠️ Lưu ý: Một lỗi rất hay gặp trong thực tế triển khai của VNExperts là NAS đã khai trên RADIUS server (NPS) trỏ nhầm sang IP interface khác của FortiGate — trong khi gói RADIUS thực tế lại đi ra từ interface khác do định tuyến/SD-WAN. Nếu nghi ngờ, dùng set source-ip trong config user radius để cố định IP nguồn gửi gói RADIUS, đảm bảo khớp với NAS client đã khai trên server.


3. Hỏi & Đáp

RADIUS có thể dùng chung một server với LDAP không?

Có thể, nếu RADIUS server đó (như NPS) dùng chính AD làm backend xác thực. Khi đó FortiGate chỉ nói chuyện với RADIUS server qua giao thức RADIUS — không truy vấn LDAP song song. Việc RADIUS server có dùng AD ở phía sau hay không là chi tiết nội bộ của RADIUS server, FortiGate không cần biết.

Vì sao xác thực RADIUS Accept nhưng Policy vẫn chặn user?

Nguyên nhân phổ biến nhất là attribute trả về (Filter-Id hoặc Class) không khớp chính xác với group-name đã khai trong config match — có thể do sai chính tả hoặc khai sai group-override-attr-type.

Có cần tài khoản dịch vụ như LDAP không?

Không. RADIUS không yêu cầu tài khoản dịch vụ riêng — FortiGate chỉ cần secret dùng chung để mã hóa gói tin trao đổi với RADIUS server, còn việc xác thực từng user là RADIUS server tự xử lý.

Có thể cấu hình nhiều RADIUS server dự phòng không?

Có, tương tự LDAP, config user radius hỗ trợ secondary-server/secondary-secret và tertiary-server/tertiary-secret để tăng tính sẵn sàng khi server chính không phản hồi.


4. Quiz

Câu 1: Điểm khác biệt cốt lõi giữa RADIUS và LDAP là gì?

  • A. RADIUS luôn nhanh hơn LDAP
  • B. RADIUS gửi yêu cầu và nhận Accept/Reject, còn LDAP tự bind và truy vấn trực tiếp cây thư mục
  • C. LDAP không hỗ trợ Active Directory
  • D. RADIUS chỉ dùng được cho VPN, không dùng được cho Firewall Policy

Câu 2: Tham số nào bắt buộc phải khớp chính xác giữa FortiGate và RADIUS server?

  • A. nas-ip
  • B. secret
  • C. auth-type
  • D. dn

Câu 3: RADIUS thường dùng attribute nào để ánh xạ group?

  • A. Distinguished Name (DN)
  • B. Filter-Id hoặc Class
  • C. sAMAccountName
  • D. Object GUID

Câu 4: Lệnh nào dùng để test nhanh xác thực RADIUS từ CLI FortiGate?

  • A. diagnose test authserver radius
  • B. execute ping
  • C. diagnose sys session list
  • D. get user radius

👉 Đáp án

Câu 1: B RADIUS hoạt động theo mô hình request/response (Access-Request → Accept/Reject), trong khi LDAP là giao thức truy vấn trực tiếp cây thư mục qua bind.

Câu 2: B secret là shared secret mã hóa kênh trao đổi giữa FortiGate và RADIUS server — sai secret là nguyên nhân phổ biến nhất khiến xác thực thất bại ngay từ bước đầu.

Câu 3: B RADIUS trả về group thông qua attribute như Filter-Id hoặc Class trong gói Access-Accept, khác với LDAP dùng DN đầy đủ của group.

Câu 4: A diagnose test authserver radius <server-name> <protocol> <username> <password> giúp kiểm tra nhanh kết quả xác thực và giao thức đang dùng.


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

🧭 Điều hướng

⬅️ Bài trước🏠 Mục lục khóa họcBài kế tiếp ➡️
LDAP/AD Integration trên FortiGate Mục lục khóa học FortiGate SAML / Azure AD (Entra ID) Integration