このページでは、Red Hat Enterprise Linux 環境において Zabbix Web フロントエンドを HTTPS 化する手順を整理する。
前のページまでで、Zabbix Web フロントエンドは HTTP で動作確認できている前提で進める。ここでは、証明書管理サーバー(仮称)で Let's Encrypt の証明書を取得し、その証明書を監視サーバー(仮称)へ配置して、Zabbix Web フロントエンドを HTTPS で公開する構成とする。
本環境では、監視サーバー自身で直接証明書を取得するのではなく、証明書管理サーバー(仮称)で取得した証明書を転送して利用する方式を採用している。このように構成することで、証明書管理の場所を分離しやすくなり、更新時の運用も整理しやすくなる。
なお、本ページは外部公開向けの内容であるため、実際のサーバー名や内部 IP アドレスは記載せず、仮称を用いて説明する。
作業対象サーバー
証明書管理サーバー(仮称)(CERT-WEB)
監視サーバー(仮称)(ZBX-WEB)
OS
Red Hat Enterprise Linux 10
構築対象
Let's Encrypt 証明書取得
Apache HTTPS 設定
Zabbix Web フロントエンド HTTPS 化
本ページで登場するサーバーは以下のとおりである。
監視サーバー(仮称)(ZBX-WEB)
Zabbix Server、PostgreSQL、Web フロントエンドを構成するサーバー
証明書管理サーバー(仮称)(CERT-WEB)
Let's Encrypt 証明書取得と証明書管理を行うサーバー
監視対象 Web サーバー(仮称)(MON-WEB01)
Zabbix Agent2 を導入して監視対象とする Web サーバー
監視対象 DB サーバー(仮称)(MON-DB01)
Zabbix Agent2 を導入して監視対象とする DB サーバー
管理端末(仮称)(ADMIN-PC)
ブラウザで Zabbix Web フロントエンドへアクセスする端末
本ページは外部公開向けページである。
ただし、Zabbix の管理画面や監視基盤そのものは外部公開しておらず、内部利用を前提としている。
そのため、本ページでは実際のサーバー名や内部 IP アドレスは記載せず、仮称を用いて構成を説明する。
まず、証明書管理サーバー(仮称)で certbot が利用できるか確認する。
rpm -qa | grep certbot
解説
この確認では、Let's Encrypt の証明書取得に使う certbot が
すでに導入されているかを見る。
導入済みであれば、そのまま証明書取得へ進める。
certbot が未導入の場合のみインストールする。
dnf install certbot
解説
certbot は Let's Encrypt 証明書を取得するためのツールである。
この構成では、証明書管理サーバー側で取得に使う。
インストール後、certbot が導入されたことを確認する。
rpm -qa | grep certbot
解説
certbot 関連パッケージが表示されれば準備完了である。
現在の Apache 設定ディレクトリが存在することを確認する。
ls -ld /etc/httpd
解説
証明書取得時に Apache を停止するため、
作業前に設定ディレクトリの存在を確認しておく。
Apache 設定をバックアップする。
cp -a /etc/httpd /etc/httpd_$(date +%Y%m%d)
解説
証明書取得前に設定を退避しておく。
万一の切り戻しや比較に使いやすい形で残しておくためである。
バックアップが作成されたことを確認する。
ls -ld /etc/httpd*
解説
元の /etc/httpd と
日付付きバックアップが両方見えていれば問題ない。
Apache の状態を確認する。
systemctl status httpd
解説
standalone モードで certbot を使うため、
一時的に Apache を停止する。
その前に現在の状態を確認しておく。
Apache を停止する。
systemctl stop httpd
解説
certbot standalone は HTTP-01 認証時に
自身でポート 80 を利用する。
そのため、事前に Apache を停止しておく。
Apache が停止したことを確認する。
systemctl status httpd
解説
inactive になっていれば停止完了である。
取得対象の FQDN を確認する。
解説
ここでは Zabbix Web 用の公開名に対して証明書を取得する。
証明書名と VirtualHost 設定を後で揃えるため、
対象名を事前に確認しておく。
standalone モードで証明書を取得する。
certbot certonly --standalone -d zabbix.example.jp
解説
このコマンドは、certbot が一時的に待受して
Let's Encrypt の HTTP-01 認証を通す形で証明書を取得する。
ここで使うドメイン名は、実環境の公開名に読み替えて設定する。
証明書が作成されたことを確認する。
ls /etc/letsencrypt/live/zabbix.example.jp/
解説
cert.pem
chain.pem
fullchain.pem
privkey.pem
が確認できれば、証明書取得は正常に完了している。
停止中のままであることを確認する。
systemctl status httpd
解説
証明書取得後、そのまま停止状態になっているため、
元の状態へ戻す。
Apache を起動する。
systemctl start httpd
解説
証明書取得に使った作業はここで完了なので、
証明書管理サーバー側の Apache を元に戻す。
Apache が正常に起動したことを確認する。
systemctl status httpd
解説
active (running) が確認できれば問題ない。
監視サーバー(仮称)で Apache 設定ディレクトリがあることを確認する。
ls -ld /etc/httpd
解説
HTTPS 化では Apache 側の設定変更も入るため、
先に対象ディレクトリを確認しておく。
Apache 設定をバックアップする。
cp -a /etc/httpd /etc/httpd_$(date +%Y%m%d)
解説
HTTPS 関連設定は VirtualHost に影響するため、
変更前の退避を残しておく。
mod_ssl をインストールする。
dnf install mod_ssl
解説
Apache で HTTPS を使うには mod_ssl が必要になる。
まだ導入していなければ、このタイミングで追加する。
証明書配置ディレクトリを作成する。
mkdir -p /etc/httpd/ssl/zabbix
解説
証明書ファイルをまとめて配置するためのディレクトリを作る。
配置先を分けておくと管理しやすい。
準備内容を確認する。
ls -ld /etc/httpd_*
ls -ld /etc/httpd/ssl/zabbix
rpm -qa | grep mod_ssl
解説
バックアップ、証明書ディレクトリ、mod_ssl の導入が
それぞれ確認できれば準備完了である。
証明書管理サーバー側で転送元ファイルを確認する。
ls -l /etc/letsencrypt/live/zabbix.example.jp/
解説
fullchain.pem と privkey.pem を使うため、
転送前に存在確認をしておく。
証明書管理サーバーから監視サーバーへ証明書を転送する。
scp \
/etc/letsencrypt/live/zabbix.example.jp/fullchain.pem \
/etc/letsencrypt/live/zabbix.example.jp/privkey.pem \
root@zbx-web:/etc/httpd/ssl/zabbix/
解説
fullchain.pem はサーバー証明書と中間証明書を含む。
privkey.pem は秘密鍵である。
監視サーバー側の証明書配置ディレクトリへ転送する。
監視サーバー側でファイルが配置されたことを確認する。
ls -l /etc/httpd/ssl/zabbix/
解説
fullchain.pem と privkey.pem が見えていれば転送完了である。
既定の ssl.conf が存在するか確認する。
ls -l /etc/httpd/conf.d/ssl.conf
解説
既定の ssl.conf が残っていると、
意図しない VirtualHost が優先されることがある。
そのため、まずは存在確認をしておく。
既定の ssl.conf を退避する。
mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.disabled
解説
既定 SSL 設定をそのまま使わず、
Zabbix 用の設定ファイルを別で用意する。
こうしておくと、どの VirtualHost を使うかがわかりやすい。
退避できたことを確認する。
ls -l /etc/httpd/conf.d/ssl.conf*
解説
ssl.conf.disabled が見えていれば退避完了である。
Listen 443 の設定が無いことを確認する。
grep -R "Listen 443" /etc/httpd/conf /etc/httpd/conf.d
解説
ssl.conf を退避すると Listen 443 が消えることがある。
そのため、現状を一度確認しておく。
443 待受用の設定ファイルを作成する。
vi /etc/httpd/conf.d/00-listen-ssl.conf
設定内容
Listen 443 https
解説
HTTPS 待受そのものを明示的に入れる。
シンプルに 443 を有効化するための設定である。
設定内容を確認する。
cat /etc/httpd/conf.d/00-listen-ssl.conf
解説
Listen 443 https が確認できればよい。
既存の Zabbix 用設定ファイルが無いこと、または内容を確認する。
ls -l /etc/httpd/conf.d/
解説
同名ファイルがすでにある場合は、
上書きではなく内容確認のうえで調整する。
Zabbix 用の SSL VirtualHost 設定を作成する。
vi /etc/httpd/conf.d/zabbix.example.jp.conf
設定内容
<VirtualHost *:443>
ServerName zabbix.example.jp
DocumentRoot /usr/share/zabbix
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/zabbix/fullchain.pem
SSLCertificateKeyFile /etc/httpd/ssl/zabbix/privkey.pem
</VirtualHost>
解説
ServerName は公開 FQDN に合わせる。
DocumentRoot は Zabbix Web フロントエンドの配置先である。
証明書と秘密鍵は、先ほど配置したファイルを指定する。
設定ファイル内容を確認する。
cat /etc/httpd/conf.d/zabbix.example.jp.conf
解説
ServerName、DocumentRoot、証明書パスが
意図どおり入っていればよい。
現在の許可サービスを確認する。
firewall-cmd --list-all
解説
https が未許可であれば、このあと追加する。
HTTPS サービスを許可する。
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
解説
TCP 443 へのアクセスを許可する。
HTTP から HTTPS へ切り替えるため、ここは忘れずに設定する。
設定が反映されたことを確認する。
firewall-cmd --list-all
解説
services に https が含まれていれば反映完了である。
Apache 設定の構文を確認する。
apachectl configtest
解説
VirtualHost 設定や証明書パスに誤りがあると
httpd は起動に失敗する。
再起動前に configtest を行っておく。
Apache を再起動する。
systemctl restart httpd
解説
HTTPS 関連設定を反映するため、
Apache を再起動する。
Apache が正常に起動していることを確認する。
systemctl status httpd
解説
active (running) が確認できれば問題ない。
443 で待受していることを確認する。
ss -lntp | grep :443
解説
LISTEN 状態が確認できれば、HTTPS 待受が始まっている。
サーバー上で HTTPS 応答を確認する。
curl -I https://zabbix.example.jp
解説
HTTP/2 200 などの正常応答が返れば、
HTTPS での応答はできている。
名前解決の都合で失敗する場合は、
環境に応じて hosts や DNS 側も確認する。
管理端末からブラウザでアクセスする。
アクセス先
https://zabbix.example.jp
解説
ブラウザで証明書警告が出ず、
Zabbix ログイン画面が表示されれば、
HTTPS 化は正常に完了している。
HTTPS でログイン画面が表示される
証明書警告が出ない
curl で正常な HTTP 応答が返る
解説
ここまで確認できれば、
Zabbix Web フロントエンドの HTTPS 化は完了である。
この手順が完了すると、以下を満たしている状態になる。
証明書管理サーバーで Let's Encrypt 証明書を取得できている
監視サーバーへ証明書ファイルを配置できている
既定の ssl.conf を退避できている
Listen 443 が設定されている
Zabbix 用 SSL VirtualHost が作成されている
firewalld で HTTPS が許可されている
Apache が正常に再起動している
TCP 443 で待受している
HTTPS で Zabbix ログイン画面が表示される
確認コマンド
ls -l /etc/httpd/ssl/zabbix/
ls -l /etc/httpd/conf.d/ssl.conf*
cat /etc/httpd/conf.d/00-listen-ssl.conf
cat /etc/httpd/conf.d/zabbix.example.jp.conf
firewall-cmd --list-all
apachectl configtest
systemctl status httpd
ss -lntp | grep :443
curl -I https://zabbix.example.jp
次の手順では、Zabbix Web フロントエンドの初期設定を行う。
セットアップ画面から前提条件の確認、データベース接続設定、基本設定、ログイン確認まで進める。