Zabbix: การลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory
ในบทความนี้ เราจะพิจารณาการกำหนดค่าทีละขั้นตอนของการรับรองความถูกต้อง SSO (Single Sign-On) แบบโปร่งใสสำหรับ Zabbix 4.0 (หรือใหม่กว่า) ใน Active Directory โดยใช้ Kerberos
ผลลัพธ์ที่ได้คือผู้ใช้ได้รับการรับรองความถูกต้องโดยอัตโนมัติในหน้าแรกของ Zabbix โดยไม่ต้องป้อนข้อมูลประจำตัว ในการดำเนินการดังกล่าว ผู้ใช้ต้องเข้าสู่ระบบ Windows ภายใต้บัญชีโดเมน Active Directory ที่ระบุใน Zabbix นอกจากนี้ ผู้ใช้ต้องกำหนดค่าเบราว์เซอร์ (ต้องเปิดใช้งานการสนับสนุน Kerberos และต้องตั้งค่าไซต์อินทราเน็ตที่เชื่อถือได้ใน IE)
ตู้โชว์:
เซิร์ฟเวอร์อูบุนตู 18.04 LTS;
โดเมน Active Directory ที่มีระดับการทำงาน 2008 (หรือสูงกว่า)
-
Zabbix Server 4.0.11, Apache2 เป็นเว็บเซิร์ฟเวอร์ (คำแนะนำในการติดตั้ง Zabbix)
หมายเหตุ หากต้องการใช้ SSO จะใช้ Apache2 ที่มีโมดูล libapache2-mod-auth-kerb ในบทความนี้ จะไม่มีการกล่าวถึง Nginx ที่นี่ แต่มี spnego-http-auth-nginx-module ที่ต้องเปิดใช้งานแยกต่างหากเมื่อรวบรวม Nginx
การรับรองความถูกต้อง Zabbix LDAP บน Active Directory
ก่อนอื่น คุณต้องผูกโดเมนผู้ใช้กับ Zabbix ในการดำเนินการ ก็เพียงพอแล้วที่จะสร้างผู้ใช้ใน Zabbix ด้วยการเข้าสู่ระบบเดียวกันกับที่มีในโดเมน AD ตัวอย่างเช่น หากข้อมูลเข้าสู่ระบบของคุณ (แอตทริบิวต์ sAMAccountName) คือ user_5 ผู้ใช้ใน Zabbix จะต้องมีข้อมูลเข้าสู่ระบบเดียวกัน
ทำสำหรับผู้ใช้แต่ละคนที่จะใช้ Zabbix
จากนั้นสร้างบัญชีผู้ใช้แยกต่างหากใน Active Directory เพื่อผูก Zabbix กับโดเมนของคุณ ในทางปฏิบัติ คุณสามารถใช้บัญชีโดเมนใดก็ได้ แต่ควรสร้างบัญชีบริการแยกต่างหากจะดีกว่า ในกรณีของฉัน จะเป็น zabbix_admin ในการสร้างผู้ใช้ใน AD ฉันจะใช้ PowerShell cmdlet 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เรียกใช้คำสั่งที่แสดงด้านบนในคอนโซล PowerShell และตั้งรหัสผ่านผู้ใช้ ผู้ใช้ใหม่ของคุณจะอยู่ภายใต้คอนเทนเนอร์ผู้ใช้ในรูทโดเมนของคุณ
มากำหนดค่าการตรวจสอบสิทธิ์ LDAP ใน Zabbix ในส่วนหน้าของ Zabbix ให้ไปที่แท็บการตั้งค่า LDAP ใน การดูแลระบบ -> การรับรองความถูกต้อง ทำเครื่องหมายที่ เปิดใช้การตรวจสอบสิทธิ์ LDAP และกรอกข้อมูลในฟิลด์ต่อไปนี้:
โฮสต์ LDAP:
ldap://dc1.domain.localท่าเรือ:
389-
ฐาน DN:
DC=domain, DC=local คุณลักษณะการค้นหา:
sAMAccountNameผูก DN:
CN=zabbix_admin,OU=Users,DC=domain,DC=local
คุณสามารถอ่านคำอธิบายของพารามิเตอร์ใดๆ ได้ในส่วน การตรวจสอบสิทธิ์ LDAP ของเอกสาร Zabbix: https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication
ก่อนเสร็จสิ้นการกำหนดค่า ตรวจสอบให้แน่ใจว่าการตั้งค่าของคุณถูกต้องโดยทำการเข้าสู่ระบบทดสอบ (ปุ่ม ทดสอบ) ระบุชื่อผู้ใช้ (เราสร้างบัญชีก่อนหน้านี้) และรหัสผ่าน AD
หากการทดสอบสำเร็จ ให้บันทึกการตั้งค่าและเปลี่ยนประเภทการรับรองความถูกต้องใน Zabbix จากภายในเป็น LDAP
เปิดใช้งานการตรวจสอบสิทธิ์ HTTP (การตั้งค่า HTTP -> เปิดใช้งานการตรวจสอบสิทธิ์ HTTP)
มีการกำหนดค่าการพิสูจน์ตัวตน LDAP
เคล็ดลับ หากเซิร์ฟเวอร์ LDAP ของคุณไม่พร้อมใช้งาน คุณจะไม่สามารถเข้าถึง Zabbix ได้ หากต้องการกลับไปที่การตรวจสอบสิทธิ์ภายใน ให้เปิด MySQL แล้วรันคำสั่งต่อไปนี้:
update zabbix.config set authentication_type='0' where configid='1';กำหนดค่าการรับรองความถูกต้องแบบโปร่งใส (การลงชื่อเพียงครั้งเดียว) ใน Zabbix (Apache2, krb5-user)
ก่อนอื่น ระบุชื่อ FQDN ของเซิร์ฟเวอร์ของคุณใน /etc/hostname ที่ต้องตรงกับระเบียน DNS ในโดเมนของคุณ ในกรณีของฉัน มันคือ zabbix.domain.local
เขียน FQDN ของเซิร์ฟเวอร์ของคุณสำหรับที่อยู่ IP ในเครื่องและที่อยู่ IP ของเซิร์ฟเวอร์ของคุณใน /etc/hosts
127.0.0.1 localhost zabbix.domain.local
10.1.1.10 zabbix.domain.localเพื่อให้การรับรองความถูกต้องของ Kerberos ทำงานได้อย่างถูกต้อง ให้ซิงโครไนซ์เวลากับตัวควบคุมโดเมนของคุณ ติดตั้งแพ็คเกจ ntpdate และผูกกับตัวควบคุมโดเมน
apt-get install ntp ntpdate
ntpdate dc.domain.localChrony ใช้เพื่อซิงโครไนซ์เวลาใน CentOS 8 แพ็คเกจ ntp และ ntpdate ไม่มีอยู่ในที่เก็บอย่างเป็นทางการ
ตอนนี้คุณต้องสร้างไฟล์แท็บคีย์บนตัวควบคุมโดเมน Keytab เป็นไฟล์ที่มี SPN และคีย์ที่เข้ารหัส Keytab ใช้สำหรับการพิสูจน์ตัวตนแบบ Kerberos
เข้าสู่ระบบบนตัวควบคุมโดเมนของคุณและเรียกใช้พรอมต์คำสั่งในฐานะผู้ดูแลระบบ ไปที่ C:\
ป้อนต่อไปนี้:
ktpass -princ HTTP/zabbix.domain.local@DOMAIN.LOCAL -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn -setpassคัดลอกไฟล์ C:\zabbix.keytab ไปยังไดเร็กทอรี /etc/apache2/ บนเซิร์ฟเวอร์ Zabbix ของคุณ
ติดตั้งแพ็คเกจ Kerberos และโมดูลสำหรับ apache2:
#apt install krb5-user libapache2-mod-auth-kerbกำหนดค่าผู้ใช้ krb5 แก้ไข /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ระบุโดเมนของคุณ ในบางแห่งชื่อโดเมนเขียนด้วยตัวพิมพ์ใหญ่ ให้ปฏิบัติตามกฎนี้
หมายเหตุ ดูที่บรรทัดที่มีพาธของไฟล์ keytab “default_keytab_name=/etc/apache2/zabbix.keytab ” และตรวจสอบให้แน่ใจว่ามีไฟล์อยู่ที่นั่น ให้สิทธิ์ในการอ่าน www-data และเรียกใช้:
chown www-data:www-data /etc/apache2/zabbix.keytabตรวจสอบให้แน่ใจว่าการตรวจสอบสิทธิ์ Kerberos ทำงานใน Linux:
kinit -kV -p HTTP/zabbix.domain.local -t /etc/apache2/zabbix.keytabคุณอาจเห็นข้อผิดพลาดนี้:
kinit: Client 'HTTP/zabbix.domain.local@DOMAIN.LOCAL’ not found in Kerberos database while getting initial credentialsในกรณีนี้ ให้ลองตรวจสอบสิทธิ์โดยใช้ข้อมูลประจำตัวของผู้ใช้รายอื่น:
kinit -pV LOGINหากการยืนยันตัวตนสำเร็จ แสดงว่าปัญหาเกิดขึ้นกับไฟล์แท็บคีย์ของคุณ ตรวจสอบให้แน่ใจว่าคุณได้สร้างอย่างถูกต้อง ตรวจสอบว่าคุณป้อนคำสั่งที่ถูกต้องเพื่อสร้างไฟล์แท็บคีย์หรือไม่
ตรวจสอบให้แน่ใจว่ามีระเบียน SPN สำหรับบัญชีบริการ Zabbix ของคุณอยู่ใน AD ป้อนคำสั่งต่อไปนี้บนตัวควบคุมโดเมน:
setspn -l zabbix_adminคุณจะเห็นข้อความแบบนี้ ต้องอยู่ในรูปแบบ HTTP/zabbix.domain.local หากไม่มีบันทึกให้เพิ่ม
setspn -a HTTP/zabbix.domain.local zabbix_adminตรวจสอบให้แน่ใจว่าชื่อล็อกอินของผู้ใช้เปลี่ยนเป็น HTTP/zabbix.domain.local
หากยังไม่มี ให้เปลี่ยนด้วยตนเอง
จากนั้นแก้ไขไฟล์คอนฟิกูเรชัน apache2 — /etc/apache2/sites-available/000-default.conf
เพิ่มต่อไปนี้ภายใต้บรรทัด 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>หาก KrbServiceName ไม่ตรงกับชื่อที่ระบุในไฟล์ keytab จะเกิดข้อผิดพลาดขึ้น คุณจึงสามารถตั้งค่า ค่าใดก็ได้ ขณะทดสอบ หลังจากแน่ใจว่าระบบใช้งานได้ ให้ระบุชื่อบริการที่ถูกต้อง คุณสามารถตรวจสอบได้โดยใช้:
klist -le /etc/apache2/zabbix.keytabวิธีกำหนดค่าเบราว์เซอร์สำหรับการตรวจสอบสิทธิ์ Kerberos
เพื่อให้ Internet Explorer ใช้การตรวจสอบสิทธิ์ Kerberos บน Zabbix คุณจะต้องเพิ่ม URL ไปยังไซต์ อินทราเน็ตเฉพาะที่ Google Chrome ใช้การตั้งค่า Internet Explorer ดังนั้นคุณไม่จำเป็นต้องกำหนดค่าแยกต่างหาก
หมายเหตุ URL ของไซต์ Zabbix ของคุณต้องไม่อยู่ในรายชื่อไซต์ที่เชื่อถือได้ มิฉะนั้น Kerberos จะไม่ทำงาน ต้องระบุไซต์เฉพาะในไซต์อินทราเน็ตเท่านั้น
เปิดตัวเลือก -> ความปลอดภัยใน IE
คลิก ไซต์ ในอินทราเน็ตเฉพาะที่ ตรวจสอบตัวเลือกที่แสดงในภาพหน้าจอด้านล่าง แล้วคลิก ขั้นสูง
ป้อน URL เซิร์ฟเวอร์ Zabbix ของคุณ
ไปที่แท็บ ขั้นสูง และทำเครื่องหมายที่ เปิดใช้การตรวจสอบสิทธิ์ Windows แบบรวม
นอกจากนี้คุณยังสามารถใส่ Zabbix URL ลงในโซนอินทราเน็ตภายในโดยใช้นโยบายกลุ่ม (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ส่วนประกอบของ Windows -> Internet Explorer -> แผงควบคุมอินเทอร์เน็ต -> หน้าความปลอดภัย -> การกำหนดไซต์ไปยังโซน รายการ ใช้รหัสโซน 1 สำหรับไซต์อินทราเน็ต)
เพิ่ม URL ของเซิร์ฟเวอร์ Zabbix ของคุณไปยังพารามิเตอร์ต่อไปนี้ของ
about:configสำหรับ Mozilla Firefox ของคุณ:
network.automatic-ntlm-auth.trusted-uris
network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-urisหากคุณพบปัญหาใดๆ โปรดดูบทความโดยละเอียดเกี่ยวกับการกำหนดค่า Kerberos ในเบราว์เซอร์
หลังจากนั้นการกำหนดค่าก็สิ้นสุดลง หากคุณพยายามเข้าถึง URL ของเซิร์ฟเวอร์ Zabbix คุณจะได้รับการตรวจสอบสิทธิ์โดยอัตโนมัติและจะไม่ได้รับแจ้งให้ป้อนรหัสผ่าน
การดีบักและการแก้ไขปัญหา Kerberos Authentication ใน Apache
หากคุณมีปัญหาใด ๆ ให้เปิดใช้งานโหมดแก้ไขข้อบกพร่องใน apache2:
ป้อนข้อมูลต่อไปนี้ก่อนแท็กปิด ใน /etc/apache2/sites-available/000-defaults.conf:
LogLevel trace8รีสตาร์ท apache และตรวจสอบข้อผิดพลาดของโมดูล Kerberos ในไฟล์ error.log
เพื่อให้สะดวกยิ่งขึ้น ใช้คำสั่งนี้เพื่อกรองรายการตามที่อยู่ IP:
tail -f /var/log/apache2/error.log | grep ‘Your IP address’ในการทำงานและวิเคราะห์ Kerberos คุณสามารถใช้คำสั่ง kinit และ klist
kinit เป็นเครื่องมือในการรับและแคชตั๋ว Kerberos ตัวอย่างเช่น:
kinit -V -k -t /etc/apache2/zabbix.keytab -p HTTP/zabbix.domain.local@DOMAIN.LOCALหากคุณสร้างไฟล์ keytab อย่างถูกต้อง คำสั่งจะทำงาน และคุณจะได้รับข้อความว่าการพิสูจน์ตัวตนสำเร็จ
เมื่อใช้ klist คุณสามารถดูตั๋ว Kerberos ที่แคชไว้ได้:
klist -a













