Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Trong bài viết này, chúng ta sẽ xem xét cấu hình từng bước của xác thực SSO (Single Sign-On) minh bạch cho Zabbix 4.0 (hoặc mới hơn) trong Active Directory sử dụng Kerberos.

Kết quả cuối cùng là người dùng được xác thực tự động trên trang Zabbix frontend mà không cần nhập thông tin đăng nhập. Để làm được điều này, người dùng phải đăng nhập vào Windows dưới tài khoản miền Active Directory được chỉ định trong Zabbix. Ngoài ra, người dùng phải cấu hình trình duyệt (hỗ trợ Kerberos phải được bật và các trang intranet tin cậy phải được thiết lập trong IE).

Môi trường demo:

  • Ubuntu Server 18.04 LTS;
  • Miền Active Directory với mức chức năng 2008 (hoặc cao hơn)
  • Zabbix Server 4.0.11, Apache2 làm web server (hướng dẫn cài đặt Zabbix)

Lưu ý. Để triển khai SSO, Apache2 với module libapache2-mod-auth-kerb sẽ được dùng trong bài này. Nginx sẽ không được thảo luận, nhưng nó có module spnego-http-auth-nginx-module phải được bật riêng khi biên dịch Nginx.

Xác thực Zabbix LDAP trên Active Directory

Trước hết, bạn phải liên kết người dùng miền với Zabbix. Để làm điều này, chỉ cần tạo người dùng trong Zabbix với cùng đăng nhập như họ có trong miền AD. Ví dụ, nếu đăng nhập (thuộc tính sAMAccountName) là user_5, người dùng trong Zabbix phải có cùng đăng nhập.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Làm điều này cho mỗi người dùng sẽ sử dụng Zabbix.

Sau đó tạo tài khoản người dùng riêng trong Active Directory để liên kết Zabbix với miền. Trong thực tế, bạn có thể dùng bất kỳ tài khoản miền nào, nhưng tốt hơn nên tạo tài khoản dịch vụ riêng. Trong trường hợp của tôi, sẽ là zabbix_admin. Để tạo user trong AD, tôi sẽ dùng cmdlet PowerShell New-ADUser:

New-ADUser -Name "zabbix_admin" -GivenName "zabbix_admin" -Surname "zabbix_admin" -SamAccountName "zabbix_admin" -AccountPassword (Read-Host -AsSecureString "Password:") -DisplayName "zabbix_admin" -Enabled $true

Chạy lệnh trên trong console PowerShell và đặt mật khẩu user. User mới sẽ nằm dưới container Users ở gốc miền.

Hãy cấu hình xác thực LDAP trong Zabbix. Trong giao diện Zabbix vào tab LDAP settings trong Administration -> Authentication. Tích Enable LDAP authentication và điền các trường:

  • LDAP host: ldap://dc1.domain.local
  • Port: 389
  • Base DN: DC=domain, DC=local
  • Search attribute: sAMAccountName
  • Bind DN: CN=zabbix_admin,OU=Users,DC=domain,DC=local

Bạn có thể đọc mô tả bất kỳ tham số nào trong phần LDAP authentication của tài liệu Zabbix: https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Trước khi hoàn tất cấu hình, hãy đảm bảo cài đặt hợp lệ bằng cách test đăng nhập (nút Test). Chỉ định tên user (tài khoản tạo trước) và mật khẩu AD.
Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Nếu test thành công, lưu cài đặt và đổi loại xác thực trong Zabbix từ Internal sang LDAP.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Bật xác thực HTTP (HTTP Settings -> Enable HTTP authentication).

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Xác thực LDAP đã được cấu hình.

Mẹo. Nếu máy chủ LDAP không khả dụng, bạn sẽ không truy cập được Zabbix. Để quay lại xác thực nội bộ, mở MySQL và chạy lệnh:

update zabbix.config set authentication_type='0' where configid='1';

Cấu hình xác thực Transparent (Single Sign On) trong Zabbix (Apache2, krb5-user)

Trước hết, chỉ định tên FQDN của máy chủ trong /etc/hostname phải khớp với bản ghi DNS trong miền. Trong trường hợp của tôi, là zabbix.domain.local.

Cũng ghi FQDN máy chủ cho địa chỉ IP local và IP máy chủ trong /etc/hosts.

127.0.0.1 localhost zabbix.domain.local
10.1.1.10 zabbix.domain.local

Để xác thực Kerberos hoạt động đúng, đồng bộ thời gian với domain controller. Cài gói ntpdate và liên kết với domain controller.

apt-get install ntp ntpdate
ntpdate dc.domain.local

Chrony được dùng để đồng bộ thời gian trong CentOS 8. Gói ntp và ntpdate không có trong kho chính thức.

Bây giờ bạn cần tạo file keytab trên domain controller. Keytab là file chứa SPN và khóa mã hóa. Keytab dùng cho xác thực dựa trên Kerberos.

  • Đăng nhập trên domain controller và chạy command prompt với quyền admin. Đi đến C:\.
  • Nhập lệnh sau:
    ktpass -princ HTTP/zabbix.domain.local@DOMAIN.LOCAL -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn –setpass
  • Sao chép C:\zabbix.keytab vào thư mục /etc/apache2/ trên máy chủ Zabbix.

Cài gói Kerberos và module cho apache2:

#apt install krb5-user libapache2-mod-auth-kerb

Cấu hình krb5-user. Chỉnh sửa /etc/krb5.cnf:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = DOMAIN.LOCAL
default_keytab_name = /etc/apache2/zabbix.keytab
dns_lookup_kdc = false
dns_lookup_realm = false
forwardable = true
ticket_lifetime = 24h
[realms]
DOMAIN.LOCAL = {
    kdc = dc.domain.local
    default_domain = DOMAIN.LOCAL
    admin_server = dc.domain.local
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

Chỉ định miền của bạn. Ở một số nơi tên miền viết hoa, tuân thủ quy tắc này.

Lưu ý. Xem dòng chứa đường dẫn file keytab "default_keytab_name = /etc/apache2/zabbix.keytab" và đảm bảo file có sẵn tại đó. Cấp quyền đọc cho www-data và chạy: chown www-data:www-data /etc/apache2/zabbix.keytab

Đảm bảo xác thực Kerberos hoạt động trên Linux:

kinit -kV -p HTTP/zabbix.domain.local –t /etc/apache2/zabbix.keytab

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Bạn có thể thấy lỗi này:

kinit: Client 'HTTP/zabbix.domain.local@DOMAIN.LOCAL’ not found in Kerberos database while getting initial credentials

Trong trường hợp này, thử xác thực bằng thông tin của user khác:

kinit -pV LOGIN

Nếu xác thực thành công, vấn đề là ở file keytab. Đảm bảo bạn tạo nó đúng. Kiểm tra xem bạn có nhập đúng lệnh tạo keytab không.

Đảm bảo bản ghi SPN cho tài khoản dịch vụ Zabbix tồn tại trong AD. Nhập lệnh sau trên domain controller:

setspn -l zabbix_admin

Bạn sẽ thấy thông báo như này. Phải ở định dạng HTTP/zabbix.domain.local. Nếu không có bản ghi, hãy thêm:

setspn -a HTTP/zabbix.domain.local zabbix_admin

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Đảm bảo tên đăng nhập user thay thành HTTP/zabbix.domain.local.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Nếu chưa, thay đổi thủ công.

Sau đó chỉnh sửa file cấu hình apache2 — /etc/apache2/sites-available/000-default.conf.

Thêm sau dưới dòng ServerName zabbix.domain.local:

<Location />
AuthType Kerberos
AuthName "Kerberos authenticated"
KrbAuthRealms DOMAIN.LOCAL
#KrbServiceName HTTP/zabbix.domain.local
KrbServiceName Any
Krb5Keytab /etc/apache2/zabbix.keytab
KrbMethodNegotiate On
KrbSaveCredentials on
KrbLocalUserMapping on
Require valid-user
</Location>

Nếu KrbServiceName không khớp với tên trong file keytab, sẽ xảy ra lỗi. Vì vậy bạn có thể đặt giá trị Any khi test. Sau khi chắc chắn hệ thống hoạt động, chỉ định tên dịch vụ hợp lệ. Bạn có thể kiểm tra bằng:
klist -le /etc/apache2/zabbix.keytab

Cách cấu hình trình duyệt cho xác thực Kerberos?

Để Internet Explorer dùng xác thực Kerberos trên Zabbix, bạn phải thêm URL của nó vào các trang web Local Intranet. Google Chrome dùng cài đặt IE, nên không cần cấu hình riêng.

Lưu ý. URL trang Zabbix không được thuộc danh sách Trusted sites, nếu không Kerberos sẽ không hoạt động. Trang phải chỉ định trong Intranet sites.

Mở Options -> Security trong IE.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Nhấn Sites trong Local intranet, tích các tùy chọn như ảnh dưới và nhấn Advanced.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Nhập URL máy chủ Zabbix.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Đi đến tab Advanced và tích Enable Integrated Windows Authentication.

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Cũng có thể đưa URL Zabbix vào zone Local Intranet bằng Group Policies (Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page -> Site to Zone Assignment List. Dùng mã zone 1 cho intranet sites).

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Thêm URL máy chủ Zabbix vào các tham số about:config cho Mozilla Firefox:

network.automatic-ntlm-auth.trusted-uris
network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-uris

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Nếu gặp vấn đề, xem bài chi tiết về cấu hình Kerberos trong trình duyệt.

Sau đó cấu hình hoàn tất. Nếu bạn truy cập URL máy chủ Zabbix, bạn sẽ được xác thực tự động và không được nhắc nhập mật khẩu.

Gỡ lỗi & Khắc phục sự cố xác thực Kerberos trong Apache

Nếu có vấn đề, bật chế độ debug trong apache2:

Nhập sau trước thẻ đóng </VirtualHost> trong /etc/apache2/sites-available/000-defaults.conf:

LogLevel trace8

Zabbix: Xác thực Đơn (SSO) với Active Directory bằng Kerberos

Khởi động lại apache, và kiểm tra lỗi module Kerberos trong file error.log.

Để thuận tiện, dùng lệnh sau để lọc entry theo địa chỉ IP:

tail -f /var/log/apache2/error.log | grep ‘Your IP address’

Để làm việc và chẩn đoán Kerberos, bạn có thể dùng lệnh kinit và klist.

kinit là công cụ lấy và cache ticket Kerberos, ví dụ:

kinit –V -k -t /etc/apache2/zabbix.keytab –p HTTP/zabbix.domain.local@DOMAIN.LOCAL

Nếu bạn tạo file keytab đúng, lệnh sẽ chạy, và bạn sẽ nhận thông báo xác thực thành công.

Dùng klist, bạn có thể xem ticket Kerberos đã cache:

klist -a