এই লেখায় আমরা Zabbix 4.0 (অথবা নতুন ভার্সন) এর জন্য একটিভ ডিরেক্টরিতে Kerberos ব্যবহার করে ট্রান্সপারেন্ট SSO (Single Sign-On) অথেন্টিকেশন কনফিগারেশনের ধাপে ধাপে পদ্ধতি বিবেচনা করব।
চূড়ান্ত ফলাফল হল একটি ইউজার ক্রেডেনশিয়াল লিখতে না পারেই Zabbix ফ্রন্টপেজে স্বয়ংক্রিয়ভাবে অথেন্টিকেট হয়। এর জন্য, ইউজারকে উইন্ডোজে একটিভ ডিরেক্টরি ডোমেন অ্যাকাউন্ট দিয়ে লগইন করা থাকতে হবে যা Zabbix-এ নির্দিষ্ট করা আছে। এর পাশাপাশি, ইউজারকে ব্রাউজার কনফিগার করতে হবে (Kerberos সাপোর্ট এক্টিভ থাকতে হবে এবং ট্রাস্টেড ইন্ট্রানেট সাইটস IE-এ সেট থাকতে হবে)।
একটি শোকেস:
- Ubuntu Server 18.04 LTS;
- ফাংশনাল লেভেল 2008 (অথবা উচ্চতর) সহ একটিভ ডিরেক্টরি ডোমেন
- Zabbix Server 4.0.11, Apache2 웹 সার্ভার হিসেবে (Zabbix ইনস্টলেশন গাইড)
নোট। SSO বাস্তবায়নের জন্য, এই লেখায় Apache2-র সাথে libapache2-mod-auth-kerb মডিউল ব্যবহার করা হবে। Nginx এখানে আলোচনা করা হবে না, তবে এতে spnego-http-auth-nginx-module থাকে যা Nginx কম্পাইল করার সময় আলাদা করে সক্ষম করতে হয়।
Zabbix LDAP অথেন্টিকেশন এক্টিভ ডিরেক্টরিতে
সবसे প্রথমে, আপনাকে ডোমেন ইউজারদের Zabbix-এ বাঁধতে হবে। এর জন্য, Zabbix-এ AD ডোমেনে থাকা একই লগইন 이름으로 একটি ইউজার তৈরি করলেই চলে। উদাহরণস্বরূপ, আপনার লগইন (sAMAccountName অ্যাট্রিবিউট) user_5 হলে, Zabbix-এ ইউজারের লগইনও একই হতে হবে।
Zabbix ব্যবহারকারী যেকোনো ইউজারের জন্য এটি করুন।
তারপর একটিভ ডিরেক্টরিতে একটি আলাদা ইউজার অ্যাকাউন্ট তৈরি করুন 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 কনসোলে উপরের কমান্ড চালান এবং একটি ইউজার পাসওয়ার্ড সেট করুন। আপনার নতুন ইউজার আপনার ডোমেনের রুটের Users কন্টেইনারের অধীনে থাকবে।
Zabbix-এ LDAP অথেন্টিকেশন কনফিগার করা যাক। Zabbix ফ্রন্টএন্ডে Administration -> Authentication-এ LDAP সেটিংস ট্যাবে যান। Enable LDAP authentication চেক করুন এবং নিচের ফিল্ডগুলো পূরণ করুন:
- 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
Zabbix ডকুমেন্টেশনের LDAP authentication সেকশনে যেকোনো প্যারামিটারের বর্ণনা পড়তে পারেন: https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication.
কনফিগারেশন সম্পূর্ণ করার আগে, একটি টেস্ট লগইন করে ( Test বাটন) আপনার সেটিংস বৈধ কিনা নিশ্চিত করুন। ইউজার নাম (আমরা আগে তৈরি করেছিলাম) এবং AD পাসওয়ার্ড নির্দিষ্ট করুন।

টেস্ট সফল হলে, সেটিংস সেভ করুন এবং Zabbix-এ অথেন্টিকেশন টাইপ Internal থেকে LDAP-এ পরিবর্তন করুন।

HTTP অথেন্টিকেশন সক্ষম করুন (HTTP Settings -> Enable HTTP authentication)।

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।
এছাড়া, আপনার সার্ভারের লোকাল IP ঠিকানা এবং IP ঠিকানার জন্য FQDN /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.local
CentOS 8-এ টাইম সিঙ্ক্রোনাইজেশনের জন্য Chrony ব্যবহার করা হয়। অফিসিয়াল রিপোজিটরিতে ntp এবং ntpdate প্যাকেজ উপলব্ধ নেই।
এখন আপনাকে ডোমেন কন্ট্রোলারে একটি কিট্যাব ফাইল জেনারেট করতে হবে। Keytab হল একটি ফাইল যেটিতে SPN এবং এনক্রিপ্টেড কি থাকে। Kerberos-ভিত্তিক অথেন্টিকেশনের জন্য Keytab ব্যবহার করা হয়।
- আপনার ডোমেন কন্ট্রোলারে লগইন করুন এবং কমান্ড প্রম্পট অ্যাডমিনিস্ট্রেটর হিসেবে চালান। 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 ফাইলটি আপনার Zabbix সার্ভারের /etc/apache2/ ডিরেক্টরিতে কপি করুন।
Kerberos প্যাকেজ এবং apache2-এর জন্য মডিউল ইনস্টল করুন:
#apt install krb5-user libapache2-mod-auth-kerb
krb5-user কনফিগার করুন। /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
আপনার ডোমেন নির্দিষ্ট করুন। কিছু জায়গায় ডোমেন নাম বড় হাতের অক্ষরে লেখা হয়, এই নিয়ম মেনে চলুন।
নোট। কিট্যাব ফাইল পাথ ধারণকারী লাইনটি "default_keytab_name = /etc/apache2/zabbix.keytab" দেখুন এবং নিশ্চিত হন ফাইলটি সেখানে উপলব্ধ। www-data-র রিড পারমিশন দিন এবং চালান: chown www-data:www-data /etc/apache2/zabbix.keytab
লিনাক্সে Kerberos অথেন্টিকেশন কাজ করছে কিনা নিশ্চিত করুন:
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
যদি অথেন্টিকেশন সফল হয়, তবে সমস্যা আপনার কিট্যাব ফাইলে। নিশ্চিত হন আপনি সঠিকভাবে এটি জেনারেট করেছেন। কিট্যাব ফাইল তৈরির কমান্ডটি সঠিকভাবে লিখা হয়েছে কিনা চেক করুন।
আপনার Zabbix সার্ভিস অ্যাকাউন্টের জন্য AD-এ SPN রেকর্ড আছে কিনা নিশ্চিত করুন। ডোমেন কন্ট্রোলারে নিচের কমান্ড লিখুন:
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 কিট্যাব ফাইলে নির্দিষ্ট নামের সাথে মেল না হলে এরর হয়। তাই টেস্ট করার সময় Any ভ্যালু সেট করতে পারেন। সিস্টেম কাজ করছে নিশ্চিত হওয়ার পর, বৈধ সার্ভিস নাম নির্দিষ্ট করুন। এটি চেক করতে পারেন:
klist -le /etc/apache2/zabbix.keytab
Kerberos অথেন্টিকেশনের জন্য ব্রাউজার কনফিগারেশন কীভাবে করবেন?
Internet Explorer-এ Kerberos অথেন্টিকেশন Zabbix-এ ব্যবহার করার জন্য, আপনাকে এর URL Local Intranet সাইটসে যোগ করতে হবে। Google Chrome Internet Explorer সেটিংস ব্যবহার করে, তাই আলাদা কনফিগারেশন লাগে না।
নোট। আপনার Zabbix সাইটের URL Trusted sites লিস্টে থাকতে পারবে না, অন্যথায় Kerberos কাজ করবে না। সাইটটি শুধু Intranet সাইটসে নির্দিষ্ট থাকতে হবে।
IE-এ Options -> Security খুলুন।

Local intranet-এ Sites-এ ক্লিক করুন, স্ক্রিনশটে দেখানো অপশনগুলো চেক করুন এবং Advanced-এ ক্লিক করুন।

আপনার Zabbix সার্ভার URL লিখুন।

Advanced ট্যাবে যান এবং Enable Integrated Windows Authentication চেক করুন।

আপনি গ্রুপ পলিসি ব্যবহার করেও Zabbix URL কে Local Intranet zone-এ যোগ করতে পারেন (Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page -> Site to Zone Assignment List। ইন্ট্রানেট সাইটসের জন্য zone code 1 ব্যবহার করুন)।

Mozilla Firefox-এ about:config এর নিচের প্যারামিটারগুলোর Zabbix সার্ভার URL যোগ করুন:
network.automatic-ntlm-auth.trusted-uris network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris

যদি কোনো সমস্যা হয়, ব্রাউজারে Kerberos কনফিগারেশনের বিস্তারিত লেখাটি দেখুন।
এরপর কনফিগারেশন শেষ। আপনি যদি আপনার Zabbix সার্ভার URL অ্যাক্সেস করার চেষ্টা করেন, আপনি স্বয়ংক্রিয়ভাবে অথেন্টিকেট হয়ে যাবেন এবং পাসওয়ার্ড লিখতে বলা হবে না।
Apache-এ Kerberos অথেন্টিকেশন ডিবাগিং ও ট্রাবলশুটিং
আপনার কোনো সমস্যা হলে, apache2-এ ডিবাগ মোড সক্ষম করুন:
/etc/apache2/sites-available/000-defaults.conf-এ </VirtualHost> ট্যাগের আগে নিচের লাইনটি লিখুন:
LogLevel trace8

Apache রিস্টার্ট করুন, এবং error.log ফাইলে Kerberos মডিউল এরর চেক করুন।
আরও সুবিধার জন্য, 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
আপনি যদি সঠিকভাবে কিট্যাব ফাইল জেনারেট করে থাকেন, কমান্ডটি চলবে, এবং অথেন্টিকেশন সফল হয়েছে এমন মেসেজ পাবেন।
klist ব্যবহার করে ক্যাশ করা Kerberos টিকেটগুলো দেখতে পারেন:
klist -a