이 글에서는 Zabbix 4.0 이상 버전에서 Active Directory 환경에 Kerberos를 활용한 투명한 SSO(Single Sign-On) 인증을 단계별로 구성하는 방법을 소개합니다.
최종 결과물은 사용자가 아이디나 비밀번호를 직접 입력하지 않아도 Zabbix 메인 페이지에 자동으로 로그인되는 것입니다. 이를 위해서는 사용자가 Zabbix에 등록된 Active Directory 도메인 계정으로 Windows에 로그인되어 있어야 하며, 브라우저 쪽 설정(Kerberos 지원 활성화, IE에서 신뢰할 수 있는 인트라넷 사이트 등록)도 필요합니다.
실습 환경
- Ubuntu Server 18.04 LTS
- 기능 수준(Functional Level) 2008 이상의 Active Directory 도메인
- Zabbix Server 4.0.11, 웹 서버로 Apache2 (Zabbix 설치 가이드 참고)
참고: 이 글에서는 libapache2-mod-auth-kerb 모듈과 함께 Apache2를 사용합니다. Nginx는 다루지 않지만, Nginx를 사용할 경우 컴파일 시 spnego-http-auth-nginx-module 모듈을 별도로 활성화해야 한다는 점을 참고하세요.
Active Directory 기반 Zabbix LDAP 인증 구성
1. 도메인 사용자와 Zabbix 계정 연결
가장 먼저 도메인 사용자를 Zabbix에 바인딩해야 합니다. 방법은 간단합니다. AD 도메인에서 사용하는 로그인(sAMAccountName 속성)과 동일한 이름으로 Zabbix 사용자를 생성하면 됩니다. 예를 들어 도메인 로그인이 user_5라면, Zabbix에도 같은 이름(user_5)의 사용자를 만들어야 합니다.

이 과정을 Zabbix를 사용할 모든 사용자에게 반복해서 적용합니다.
2. AD 서비스 계정 생성
다음으로 Zabbix를 도메인에 바인딩하기 위해 Active Directory에 별도의 계정을 생성합니다. 실무에서는 기존 도메인 계정을 재사용할 수도 있지만, 관리와 보안을 위해 전용 서비스 계정을 만드는 것이 좋습니다. 여기서는 zabbix_admin이라는 계정을 사용합니다. PowerShell의 New-ADUser cmdlet으로 다음과 같이 생성할 수 있습니다:
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 컨테이너 아래에 생성됩니다.
3. Zabbix 프론트엔드에서 LDAP 인증 설정
Zabbix 웹 인터페이스에서 Administration → Authentication → LDAP settings 탭으로 이동합니다. 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';
Apache2 + krb5-user 기반 투명(SSO) 인증 구성
1. 호스트명 및 DNS 설정
먼저 /etc/hostname 파일에 도메인의 DNS 레코드와 일치하는 서버 FQDN을 지정합니다. 여기서는 zabbix.domain.local을 사용합니다.
또한 /etc/hosts 파일에도 로컬 IP와 서버 IP에 대한 FQDN을 등록합니다.
127.0.0.1 localhost zabbix.domain.local
10.1.1.10 zabbix.domain.local
2. 시간 동기화
Kerberos 인증이 정상 동작하려면 도메인 컨트롤러와 시간이 일치해야 합니다. ntpdate 패키지를 설치하고 도메인 컨트롤러와 동기화합니다.
apt-get install ntp ntpdate
ntpdate dc.domain.local
참고: CentOS 8에서는 시간 동기화에 Chrony가 사용되며, 공식 저장소에서 ntp와 ntpdate 패키지를 더 이상 제공하지 않습니다.
3. Keytab 파일 생성
이제 도메인 컨트롤러에서 keytab 파일을 생성해야 합니다. Keytab은 SPN(Service Principal Name)과 암호화된 키를 담고 있는 파일로, 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 파일을 Zabbix 서버의 /etc/apache2/ 디렉터리로 복사합니다.
4. Kerberos 패키지 설치 및 설정
Kerberos 패키지와 Apache2용 모듈을 설치합니다:
# apt install krb5-user libapache2-mod-auth-kerb
krb5 설정 파일인 /etc/krb5.conf를 다음과 같이 편집합니다:
[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 경로에 keytab 파일이 실제로 존재하는지 확인하고, www-data 사용자에게 읽기 권한을 부여하세요: chown www-data:www-data /etc/apache2/zabbix.keytab
5. Kerberos 인증 동작 테스트
Linux 환경에서 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
일반 계정으로는 인증이 성공한다면, 문제는 keytab 파일에 있습니다. keytab이 올바르게 생성되었는지, 생성 명령어에 오타가 없었는지 다시 점검하세요.
6. SPN 레코드 확인
도메인 컨트롤러에서 Zabbix 서비스 계정의 SPN 레코드가 존재하는지 확인합니다:
setspn -l zabbix_admin
출력 결과는 반드시 HTTP/zabbix.domain.local 형식이어야 합니다. 레코드가 없다면 다음 명령으로 추가하세요:
setspn -a HTTP/zabbix.domain.local zabbix_admin

또한 AD 사용자 계정의 로그인 이름이 HTTP/zabbix.domain.local로 변경되었는지 확인합니다.

변경되어 있지 않다면 수동으로 수정합니다.
7. Apache2 가상 호스트 설정
이제 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 파일에 지정된 이름과 일치하지 않으면 오류가 발생합니다. 따라서 초기 테스트 단계에서는 Any로 설정하고, 시스템이 정상 동작하는 것을 확인한 후 실제 서비스 이름으로 교체하는 것이 좋습니다. 서비스 이름은 다음 명령으로 확인할 수 있습니다:
klist -le /etc/apache2/zabbix.keytab
브라우저별 Kerberos 인증 설정 방법
Internet Explorer 및 Chrome
Internet Explorer에서 Zabbix에 대해 Kerberos 인증을 사용하려면 해당 URL을 로컬 인트라넷(Local Intranet) 사이트 목록에 추가해야 합니다. Google Chrome은 IE의 설정을 그대로 사용하므로 별도의 구성이 필요하지 않습니다.
주의: Zabbix 사이트 URL을 '신뢰할 수 있는 사이트(Trusted sites)' 목록에 넣으면 안 됩니다. 그럴 경우 Kerberos가 작동하지 않으며, 사이트는 반드시 인트라넷 영역에만 등록해야 합니다.
IE에서 인터넷 옵션 → 보안 탭을 엽니다.

로컬 인트라넷 영역에서 사이트(Sites) 버튼을 클릭하고, 아래 스크린샷과 같은 옵션을 선택한 후 고급(Advanced)을 누릅니다.

여기에 Zabbix 서버 URL을 입력합니다.

이어서 고급 탭으로 이동하여 통합 Windows 인증 사용(Enable Integrated Windows Authentication) 옵션이 체크되어 있는지 확인합니다.

대규모 환경에서는 그룹 정책(GPO)으로도 인트라넷 영역에 Zabbix URL을 배포할 수 있습니다. 경로는 다음과 같습니다: 컴퓨터 구성 → 관리 템플릿 → Windows 구성 요소 → Internet Explorer → 인터넷 제어판 → 보안 페이지 → 사이트 할당 목록(Site to Zone Assignment List). 인트라넷 사이트에는 영역 코드 1을 사용합니다.

Mozilla Firefox
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 인증 디버깅 및 문제 해결
SSO가 정상 동작하지 않는다면 Apache2에서 디버그 모드를 활성화해 원인을 분석할 수 있습니다.
/etc/apache2/sites-available/000-default.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
keytab 파일이 올바르게 생성되었다면 이 명령은 정상 실행되고 인증 성공 메시지가 출력됩니다.
klist를 사용하면 현재 캐시된 Kerberos 티켓을 조회할 수 있습니다:
klist -a