Danh mục sản phẩm
LDAP/AD Integration trên FortiGate
1. Liên hệ thực tế
Sau khi triển khai xong local user cho vài tài khoản dùng riêng, anh Nam nhận thêm yêu cầu: công ty đã có sẵn Active Directory quản lý gần 200 tài khoản nhân viên, và sếp muốn FortiGate dùng luôn tài khoản AD đó để xác thực — nhân viên không phải nhớ thêm một bộ username/password riêng cho firewall.
Anh Nam định tạo local user trùng tên với từng tài khoản AD, nhưng chị Lan ngăn lại ngay: "Làm vậy thì em phải đồng bộ tay mỗi khi có người vào/ra công ty, sai sót là chuyện sớm muộn. FortiGate hỗ trợ kết nối trực tiếp tới AD qua LDAP — nó không lưu password của ai cả, mỗi lần xác thực nó hỏi thẳng AD."
Bài này trình bày cách cấu hình FortiGate làm LDAP client kết nối tới Active Directory, cách ánh xạ AD Group vào FortiGate User Group, và những lỗi bind thường gặp khi triển khai thực tế.
2. Kiến thức cốt lõi
2.1 LDAP Server object — các tham số bắt buộc
FortiGate cấu hình một LDAP server bằng lệnh config user ldap. Đây là những tham số cốt lõi cần có:
config user ldap
edit "AD-COMPANY"
set server "10.10.10.5"
set cnid "sAMAccountName"
set dn "dc=company,dc=local"
set type regular
set username "cn=svc-fortigate,cn=Users,dc=company,dc=local"
set password ********
set port 389
next
end
Giải thích các tham số quan trọng:
server— địa chỉ IP hoặc FQDN của Domain Controller.cnid— tên trường (attribute) LDAP dùng làm username đăng nhập. Với AD thường làsAMAccountName(tên đăng nhập kiểunam.nv) hoặcuserPrincipalName(kiểu emailnam.nv@company.local).dn— Base DN, điểm bắt đầu tìm kiếm trong cây LDAP, ví dụdc=company,dc=local.type— kiểu bind:simple(bind trực tiếp bằng chính username/password người dùng nhập, chỉ dùng được khi cnid cho phép bind thẳng),anonymous(bind ẩn danh trước khi tìm DN), hoặcregular(bind bằng một tài khoản dịch vụ có quyền đọc AD trước, sau đó tìm DN thật của user rồi bind lại — cách phổ biến và ổn định nhất với AD).username/password— tài khoản dịch vụ dùng để bind khitype regular, phải là Distinguished Name (DN) đầy đủ của tài khoản đó trong AD, không phải chỉ tên đăng nhập.port— mặc định 389 (LDAP thường), 636 nếu dùng LDAPS (LDAP over SSL).
⚠️ Lưu ý:
type regularlà lựa chọn an toàn nhất với AD vìsAMAccountNamekhông phải lúc nào cũng bind trực tiếp được tùy cấu hình domain. Sơ đồ dưới đây minh họa rõ luồng 2 bước bind này.
2.2 LDAPS — mã hóa kết nối tới Domain Controller
Theo mặc định, LDAP truyền thống (port 389) gửi thông tin bind ở dạng không mã hóa trên đường truyền nội bộ. Với môi trường yêu cầu bảo mật cao hơn, nên bật LDAPS:
config user ldap
edit "AD-COMPANY"
set port 636
set secure ldaps
set ca-cert "CA_Cert_1"
next
end
ca-cert trỏ tới certificate CA đã import vào FortiGate dùng để verify chứng chỉ do Domain Controller trình ra — chủ đề import Certificate đã được trình bày ở Certificate trên FortiGate: Local Cert, CA, Import. Nếu chưa import CA cert đúng, FortiGate sẽ báo lỗi bind dù thông tin server/port đều chính xác.
2.3 Ánh xạ AD Group vào FortiGate User Group
Đây là bước hay bị nhầm lẫn: FortiGate không tự động đọc toàn bộ AD — cần khai báo rõ group nào trong AD sẽ được ánh xạ vào group nào trên FortiGate, thông qua config match bên trong config user group:
config user group
edit "GRP_KETOAN_AD"
set group-type firewall
config match
edit 1
set server-name "AD-COMPANY"
set group-name "CN=KeToan,OU=Groups,DC=company,DC=local"
next
end
next
end
server-name— tên LDAP server object đã tạo ở bước 2.1.group-name— DN đầy đủ của group bên AD (không phải chỉ tên hiển thị) — lấy chính xác qua công cụADSI Edithoặcdsquery grouptrên Domain Controller.
Khi Policy tham chiếu tới GRP_KETOAN_AD, FortiGate sẽ: xác thực user qua LDAP bind → kiểm tra user đó có phải thành viên của group AD tương ứng không → nếu đúng thì áp quyền của Policy.
🔄 Khác biệt version FortiOS: Từ 7.2 trở lên có thêm tùy chọn
set group-search-basevàset group-object-filterlinh hoạt hơn, cho phép thu hẹp phạm vi tìm kiếm group trong cây LDAP lớn, giúp tăng tốc độ bind ở domain có hàng chục nghìn object. FortiOS 7.0 vẫn dùng đượcconfig matchnhư trên nhưng không có các tùy chọn tinh chỉnh này.
2.4 Kiểm tra kết nối và debug lỗi bind
Trước khi đưa vào Policy thực tế, luôn test kết nối bằng lệnh:
diagnose test authserver ldap AD-COMPANY nam.nv <password>
Kết quả trả về authentication successful hoặc lỗi cụ thể. Một số lỗi thường gặp:
| Lỗi | Nguyên nhân phổ biến |
|---|---|
Connection refused |
Firewall giữa FortiGate và DC chặn port 389/636, hoặc sai IP server |
Bind failed |
Sai username/password của tài khoản dịch vụ (type regular), hoặc DN tài khoản dịch vụ nhập sai định dạng |
No such object |
dn (Base DN) khai sai, không khớp cấu trúc domain thật |
authentication successful nhưng Policy vẫn chặn |
User bind LDAP thành công nhưng không thuộc group đã khai trong config match — cần kiểm tra lại group-name |
Ngoài ra có thể xem log chi tiết quá trình bind bằng:
diagnose debug application fnbamd -1 diagnose debug enable
⚠️ Lưu ý: Nhớ tắt debug (
diagnose debug disable) ngay sau khi xong để tránh log tràn ngập console, ảnh hưởng hiệu năng theo dõi các phiên khác.
3. Hỏi & Đáp
FortiGate có lưu lại password của user AD không?
Không. Với xác thực LDAP, FortiGate chỉ chuyển tiếp (forward) yêu cầu bind tới Domain Controller mỗi lần user đăng nhập — không lưu trữ password người dùng cuối ở bất kỳ đâu trên FortiGate. Chỉ có password của tài khoản dịch vụ (type regular) được lưu (ở dạng mã hóa) để phục vụ bước bind đầu.
Vì sao nên dùng type regular thay vì simple với Active Directory?
type simple yêu cầu attribute cnid phải là trường bind trực tiếp được theo cấu trúc DN, điều này không phải lúc nào cũng đúng với sAMAccountName trên AD tùy theo cấu hình domain. type regular linh hoạt hơn vì nó dùng tài khoản dịch vụ để tìm DN thật của user trước, sau đó mới bind lại bằng chính thông tin user — hoạt động ổn định với hầu hết cấu trúc AD thực tế.
group-name trong config match có thể dùng tên hiển thị của group AD không?
Không nên. FortiGate yêu cầu Distinguished Name (DN) đầy đủ, ví dụ CN=KeToan,OU=Groups,DC=company,DC=local, không phải chỉ tên hiển thị "KeToan". Dùng sai định dạng là nguyên nhân phổ biến khiến user bind LDAP thành công nhưng vẫn bị Policy chặn.
Có thể dùng nhiều LDAP server dự phòng không?
Có, config user ldap cho phép khai set secondary-server và set tertiary-server để FortiGate tự chuyển sang server dự phòng khi server chính không phản hồi, tăng độ sẵn sàng cho xác thực khi Domain Controller chính gặp sự cố.
4. Quiz
Câu 1: Tham số nào trong config user ldap xác định attribute dùng làm username đăng nhập?
- A.
dn - B.
cnid - C.
server - D.
type
Câu 2: type regular trong cấu hình LDAP hoạt động theo cơ chế nào?
- A. Bind ẩn danh, không cần tài khoản dịch vụ
- B. Bind trực tiếp bằng chính username/password người dùng
- C. Bind bằng tài khoản dịch vụ trước, sau đó tìm DN thật rồi bind lại
- D. Không hỗ trợ bind, chỉ dùng để đọc thông tin
Câu 3: Để ánh xạ một AD Group vào FortiGate User Group, cấu hình nào là bắt buộc?
- A.
config user setting - B.
config matchbên trongconfig user group - C.
config firewall address - D.
config system interface
Câu 4: Lệnh nào dùng để test nhanh kết nối và xác thực LDAP từ CLI?
- A.
diagnose sys top - B.
diagnose test authserver ldap - C.
execute ping - D.
get system status
👉 Đáp án
Câu 1: B cnid xác định attribute LDAP nào (ví dụ sAMAccountName) được dùng làm username khi người dùng đăng nhập.
Câu 2: C type regular bind hai bước: đầu tiên bằng tài khoản dịch vụ để tìm DN thật của user, sau đó bind lại bằng chính thông tin user — phù hợp với hầu hết cấu trúc Active Directory.
Câu 3: B config match bên trong config user group là nơi khai báo server-name và group-name để ánh xạ group AD vào group trên FortiGate.
Câu 4: B diagnose test authserver ldap <server-name> <username> <password> giúp kiểm tra nhanh việc bind mà không cần tạo Policy thật để test.
📚 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ọc | Bài kế tiếp ➡️ |
|---|---|---|
| Local User & User Group trên FortiGate | Mục lục khóa học FortiGate | RADIUS integration |
