Zabbix で SSL 証明書の有効期限を監視してみる

こんにちは。
このサイトは Let’s Encrypt で証明書を取得して cron で自動更新しているんですが、昨日にサイトを確認すると証明書の期限が切れておりました。
原因を調べたところ certbot が正常に動作しなくなっておりまして、どうも先日に yum update を行った際にパッケージのバージョン関連で不整合が発生していたようです。
※こちらは pyOpenSSL を yum 管理ではなく、pip 管理にすることで解決しました。

今後も同様のことが発生した時に気づけるように Zabbix で証明書の期限を監視してみます。

外部スクリプト

証明書の情報諸々は openssl s_client で取得できるので、これの出力を整形/計算して証明書の残り期限を出力させるスクリプトを用意します。

#!/bin/bash

DOMAIN=$1
TODAY=$(date "+%Y%m%d")

PREVALIDDAY=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | awk  -F '=' '{print $2}')
expr \( `date -d"$PREVALIDDAY" +%s` - `date -d"$TODAY" +%s` \) / 86400

後で汎用的に利用できるZabbixテンプレートを作成するので、監視する証明書のコモンネームを第一引数に指定できるようにしてます。
※CLIから実行するとこんな感じ ↓
[root@sanuki-zab50 externalscripts]# ./ssl-check.sh fingerease.work
89

Zabbix には外部スクリプトの出力結果を取り込む機能があるので、こちらのスクリプトを Zabbix サーバの下記ディレクトリ以下に ssl-check.sh という名称で配置します。
[root@sanuki-zab50 externalscripts]# pwd && ls
/usr/lib/zabbix/externalscripts
ssl-check.sh

テンプレート

Zabbix の WEB UI から証明書期限監視用のテンプレートを作成します。
※今回は S_Template_ssl_check という名称のテンプレートを作成します。

アイテム

キーに先程作成したスクリプトの名称と第一引数(証明書のコモンネーム)をマクロで指定できるように記述しておきます。

名前:cert valid days
タイプ:外部チェック
キー:ssl-check.sh[“{$DOMAIN}”]
データ型:数値(整数)

トリガー

トリガーには証明書の期限が「何日以内」となった場合にアラートを飛ばすか汎用的に設定できるよう、{$THRES} というマクロを用意しておきます。

名前:{$DOMAIN} の証明書期限が残り{$THRES}日です
条件式:{S_Template_ssl_check:ssl-check.sh[“{$DOMAIN}”].last()}<{$THRES}

監視

あとはホストを作成してマクロに監視対象のコモンネーム、監視閾値を入力すればOKです。

↓こんな感じ

{$DOMAIN} → fingerease.work
{$THRES} → 7

Zabbixを使うと割となんでも監視/グラフ化することができますね。

【Raspberry Pi】CentOS7 に Zabbix をソースからインストールしてみる

ラズベリーパイで Zabbix を構築しようと思ったんですが、CentOS7 用のパッケージがなかったんですよね…
なんで、ソースからインストールしなきゃ、ってことで備忘録です。
ついでに Nginx と php-fpm もソースから最新版を導入してみます。

“【Raspberry Pi】CentOS7 に Zabbix をソースからインストールしてみる” の続きを読む

【監視設定】Zabbix Proxy の設定【踏み台経由】

設定ですごく嵌ったんですね。
踏み台サーバ経由で監視設定をいれる方法です。

zabbix-proxy 導入

各種パッケージのインストール

※ CentOS6

rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm

yum install zabbix-proxy zabbix-proxy-sqlite3 zabbix-agent

※ CentOS7
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

yum install zabbix-proxy zabbix-proxy-sqlite3 zabbix-agent

sqlite 設定

mkdir /var/lib/sqlite3
chown -R zabbix:zabbix /var/lib/sqlite3
cd /var/lib/sqlite3
zcat /usr/share/doc/zabbix-proxy-sqlite3-3.4.15/schema.sql.gz | sqlite3 zabbix.db
chown zabbix:zabbix zabbix.db

zabbix-proxy 設定

sed -i -e "s/^Server=.*\$/Server=xxx.xxx.xxx.xxx/g" /etc/zabbix/zabbix_proxy.conf
sed -i -e "s/^Hostname=.*\$/Hostname=${HOSTNAME}/g" /etc/zabbix/zabbix_proxy.conf
sed -i -e "s/^DBName=.*\$/DBName=\/var\/lib\/sqlite3\/zabbix.db/g" /etc/zabbix/zabbix_proxy.conf

※ xxx.xxx.xxx.xxx は Zabbix サーバの IP

zabbix-agent 設定

sed -i -e "s/^Hostname=.*\$/Hostname=${HOSTNAME}/g" /etc/zabbix/zabbix_agentd.conf

zabbix-proxy 起動

/etc/init.d/zabbix-proxy start
chkconfig zabbix-proxy on
/etc/init.d/zabbix-agent start
chkconfig zabbix-agent on

zabbix-agent 導入

各種パッケージのインストール

※ CentOS6

rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm

yum install zabbix-agent

※ CentOS7
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

yum install zabbix-agent

zabbix-agent 設定

sed -i -e "s/^ServerActive/ServerActive=xxx.xxx.xxx.xxx/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/^Hostname=.*\$/Hostname=${HOSTNAME}/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/^Server=.*\$/Server=xxx.xxx.xxx.xxx/g" /etc/zabbix/zabbix_agentd.conf

※ xxx.xxx.xxx.xxx は踏み台( proxy )サーバの IP

zabbix-agent 起動

/etc/init.d/zabbix-agent start
chkconfig zabbix-agent on