웹 서버
개요
이 절에서는 웹 서버를 안전하게 설정하기 위한 모범 사례를 설명합니다.
루트 URL을 Zabbix SSL로 리디렉션하도록 강제
RHEL 기반 시스템에서는 Apache 구성(/etc/httpd/conf/httpd.conf)에 가상 호스트를 추가하고 문서 루트에서 Zabbix SSL URL로 영구 리디렉션을 설정합니다.
example.com은 실제 서버 이름으로 바꿔야 합니다.
# Add lines:
<VirtualHost *:*>
ServerName example.com
Redirect permanent / https://example.com
</VirtualHost>
변경 사항을 적용하려면 Apache 서비스를 다시 시작합니다.
systemctl restart httpd.service
웹 서버에서 HTTP Strict Transport Security(HSTS) 활성화
프로토콜 다운그레이드 공격으로부터 Zabbix 프론트엔드를 보호하려면 웹 서버에서 HSTS 정책을 활성화하는 것이 좋습니다.
Apache 구성에서 Zabbix 프론트엔드에 HSTS 정책을 활성화하려면 다음 단계를 따르십시오.
1. 가상 호스트 구성 파일을 찾습니다.
- RHEL 기반 시스템의
/etc/httpd/conf/httpd.conf - Debian/Ubuntu의
/etc/apache2/sites-available/000-default.conf
2. 가상 호스트 구성 파일에 다음 지시문을 추가합니다.
<VirtualHost *:*>
Header set Strict-Transport-Security "max-age=31536000"
</VirtualHost>
3. 변경 사항을 적용하려면 Apache 서비스를 다시 시작합니다.
# On RHEL-based systems:
systemctl restart httpd.service
# On Debian/Ubuntu
systemctl restart apache2.service
Zabbix에서 Secure 및 SameSite 세션 쿠키 강제 적용
Zabbix를 구성할 때 보안을 강화하고 사이트 간 요청 위조(CSRF) 공격을 방지하려면 세션 쿠키에 secure 및 SameSite 속성을 적용해야 합니다. 그러나 SameSite=Strict를 적용하면 다음과 같은 특정 상황에서 문제가 발생할 수 있습니다.
- 동일 도메인의 iframe을 포함할 때 대시보드 URL 위젯에 "사용자가 로그인하지 않음"이 표시됩니다.
- HTTPS 대신 HTTP로 대시보드에 접근하는 사용자는 로그인 문제가 발생할 수 있습니다.
- 특정 Zabbix 메뉴 섹션 또는 호스트의 URL을 공유할 수 없습니다.
이러한 문제를 완화할 수 있도록 사용자가 SameSite 정책을 조정할 수 있어야 합니다.
1. Secure 쿠키
secure 플래그를 설정하면 쿠키가 HTTPS를 통해서만 전송되므로 암호화되지 않은 연결을 통한 노출을 방지할 수 있습니다.
Zabbix에서 Secure 쿠키를 활성화하려면 웹 서버 구성에 다음 설정을 추가하거나 수정합니다.
Apache의 경우:
Header always edit Set-Cookie ^(.*)$ $1;Secure
Nginx의 경우:
proxy_cookie_path / "/; Secure";
Zabbix 프론트엔드에 HTTPS로 접근하는지 확인하십시오. 그렇지 않으면 Secure 플래그가 있는 쿠키가 전송되지 않습니다.
2. SameSite 속성 구성
웹 서버 설정에서도 SameSite 속성을 강제 적용할 수 있습니다.
Apache의 경우:
<IfModule mod_headers.c>
Header onsuccess edit Set-Cookie (.*) "$1; SameSite=Strict"
</IfModule>
Nginx(버전 1.19.3 이상)의 경우:
proxy_cookie_flags ~ samesite=Strict; # Replace ~ with 'zbx_session' for specificity
웹 서버에서 Content Security Policy(CSP) 활성화
Cross Site Scripting(XSS), 데이터 삽입 및 이와 유사한 공격으로부터 Zabbix 프론트엔드를 보호하려면 웹 서버에서 Content Security Policy를 활성화하는 것이 좋습니다. 이를 위해 웹 서버가 HTTP 헤더를 반환하도록 구성합니다.
다음 CSP 헤더 구성은 기본 Zabbix 프론트엔드 설치 및 모든 콘텐츠가 사이트의 도메인(하위 도메인 제외)에서 제공되는 경우에만 적용됩니다. 예를 들어 사이트의 하위 도메인이나 외부 도메인의 콘텐츠를 표시하도록 URL 위젯을 구성하거나, OpenStreetMap에서 다른 지도 엔진으로 전환하거나, 외부 CSS 또는 위젯을 추가하는 경우에는 다른 CSP 헤더 구성이 필요할 수 있습니다. Duo Universal Prompt 다중 인증 방식을 사용하는 경우 가상 호스트 구성 파일의 CSP 지시문에 "duo.com"을 추가해야 합니다.
Apache 구성에서 Zabbix 프론트엔드에 CSP를 활성화하려면 다음 단계를 따르십시오.
1. 가상 호스트 구성 파일을 찾습니다.
- RHEL 기반 시스템의
/etc/httpd/conf/httpd.conf - Debian/Ubuntu의
/etc/apache2/sites-available/000-default.conf
2. 가상 호스트 구성 파일에 다음 지시문을 추가합니다.
<VirtualHost *:*>
Header set Content-Security-Policy: "default-src 'self' *.openstreetmap.org; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: *.openstreetmap.org; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self';"
</VirtualHost>
3. 변경 사항을 적용하려면 Apache 서비스를 다시 시작합니다.
# On RHEL-based systems:
systemctl restart httpd.service
# On Debian/Ubuntu
systemctl restart apache2.service
웹 서버 정보 노출 비활성화
보안을 강화하려면 모든 웹 서버 서명을 비활성화하는 것이 좋습니다.
기본적으로 웹 서버는 소프트웨어 서명을 노출합니다.

Apache 구성 파일에 다음 매개변수를 추가하여 서명을 비활성화할 수 있습니다.
ServerSignature Off
ServerTokens Prod
php.ini 구성 파일을 변경하여 PHP 서명(X-Powered-By HTTP 헤더)을 비활성화할 수 있습니다(기본적으로 서명은 비활성화되어 있음).
expose_php = Off
구성 파일 변경 사항을 적용하려면 웹 서버를 다시 시작해야 합니다.
보안을 더욱 강화하려면 Apache에서 mod_security 도구(libapache2-mod-security2 패키지)를 사용할 수 있습니다. 이 도구를 사용하면 서버 서명에서 버전만 제거하는 대신 서버 서명 자체를 제거할 수 있습니다. mod_security를 설치한 후 "SecServerSignature"를 원하는 값으로 설정하여 서버 서명을 임의의 값으로 변경할 수 있습니다.
소프트웨어 서명을 제거하거나 변경하는 방법은 사용 중인 웹 서버의 문서를 참조하십시오.
웹 서버 기본 오류 페이지 비활성화
정보 노출을 방지하려면 기본 오류 페이지를 비활성화하는 것이 좋습니다.
기본적으로 웹 서버는 내장 오류 페이지를 사용합니다.

이러한 기본 오류 페이지는 교체하거나 제거해야 합니다. 예를 들어 "ErrorDocument" 지시문을 사용하여 Apache 웹 서버의 사용자 지정 오류 페이지 또는 텍스트를 정의할 수 있습니다.
기본 오류 페이지를 교체하거나 제거하는 방법은 사용 중인 웹 서버의 문서를 참조하십시오.
웹 서버 테스트 페이지 제거
정보 노출을 방지하려면 웹 서버 테스트 페이지를 제거하는 것이 좋습니다.
기본적으로 Apache 웹 서버의 웹 루트에는 index.html 테스트 페이지가 있습니다.

기본 테스트 페이지를 제거하는 방법은 사용 중인 웹 서버의 문서를 참조하십시오.
X-Frame-Options HTTP 응답 헤더 설정
기본적으로 Zabbix는 Use X-Frame-Options HTTP header 매개변수가 SAMEORIGIN으로 설정되어 있습니다.
이는 페이지 자체와 출처가 동일한 프레임에서만 콘텐츠를 불러올 수 있다는 의미입니다.
외부 URL에서 콘텐츠를 가져오는 Zabbix 프론트엔드 요소(즉, URL 대시보드 위젯)는 모든 샌드박스 제한이 활성화된 샌드박스에 가져온 콘텐츠를 표시합니다.
이러한 설정은 Zabbix 프론트엔드의 보안을 강화하고 XSS 및 클릭재킹 공격으로부터 보호합니다. Super admin 사용자는 필요에 따라 수정할 수 있습니다: Use iframe sandboxing 및 Use X-Frame-Options HTTP header 매개변수. 기본 설정을 변경하기 전에 위험과 이점을 신중하게 고려하십시오. iframe 샌드박싱 또는 X-Frame-Options HTTP 헤더를 완전히 비활성화하는 것은 권장하지 않습니다.
일반적인 비밀번호 목록 파일 숨기기
비밀번호 무차별 대입 공격의 난이도를 높이려면 ui/data/top_passwords.txt 파일에 대한 접근을 제한하는 것이 좋습니다.
이 파일에는 가장 일반적이고 특정 환경에서 자주 사용되는 비밀번호 목록이 포함되어 있으며, Avoid easy-to-guess passwords 매개변수가 비밀번호 정책에서 활성화된 경우 사용자가 이러한 비밀번호를 설정하지 못하게 합니다.
top_passwords.txt 파일에 대한 접근을 제한하려면 웹 서버 구성을 수정합니다.
Apache에서는 .htaccess 파일을 사용하여 파일 접근을 제한할 수 있습니다.
<Files "top_passwords.txt">
Order Allow,Deny
Deny from all
</Files>
NGINX에서는 location 지시문을 사용하여 파일 접근을 제한할 수 있습니다.
location = /data/top_passwords.txt {
deny all;
return 404;
}