監視ツールNagiosは、サーバーのリソース監視やHTTPの死活監視に便利なツールですが、それ以外にも幅広い監視が可能です。
その中でも僕が気に入ってよく使っているのが、SSLサーバー証明書の有効期限の監視です。
以下のように、check_httpコマンドで-Cオプションを使用すると、SSLサーバー証明書の有効期限をチェックできます。
$ cd /usr/lib64/nagios/plugins/ // CentOS 6, Repoforgeリポジトリでインストールした場合 $ ./check_http --sni -I <HOSTADDRESS> -H <SSL_HOSTNAME> -C <WARNING>,<CRITICAL>
(参考)
・The check_http Plugin
https://www.monitoring-plugins.org/doc/man/check_http.html
- -Iで、チェック対象サーバーのIPアドレスもしくはネットワーク的に到達できるホスト名を指定。
- -Hで、チェック時のHostヘッダ、つまりチェック対象のSSLサーバー証明書のCommonNameを指定。
- -Cで、有効期限まで○日以内のときWARNING.CRITICALとみなす日数を指定。
- –sniで、1サーバーに複数のSSLサーバー証明書を設置、運用する場合のSNIモードでの監視に対応。
※-Iオプション、-Hオプションは、証明書の有効期限のチェックに限らず、HTTP/HTTPS死活監視でも同様の意味を持ちます。
commands.cfg
(2016.4.28追記)–sniオプションが抜けていたので追記しました。
# 'check_sslcert_expire' command definition define command{ command_name check_sslcert_expire command_line $USER1$/check_http --sni -I $HOSTADDRESS$ -H $ARG1$ -C $ARG2$,$ARG3$ }
サービス定義。
define service{ host_name <チェック対象サーバーのIPアドレスまたはホスト名> service_description SSL Expire check_command check_sslcert_expire!<チェック対象のSSLサーバー証明書のCommonName>!<WARNINGの日数>,<CRITICALの日数> }
-H, -Cオプションを使う例はよく見かけますが、-Iオプションと–sniオプションもつけるとよいと思います。
-Iオプションは、例えば、同じCommonNameの証明書を複数のサーバーに設置した場合、明示的に監視するサーバーを指定できます。
例えば、192.168.0.11と192.168.0.12の 2台のサーバーにCommonName: test.example.com の証明書を設置してそれぞれ監視したい場合は、以下のようにします。
$ ./check_http --sni -I 192.168.0.11 -H test.example.com -C 30,10 $ ./check_http --sni -I 192.168.0.12 -H test.example.com -C 30,10
サービス定義はこんな感じ。
define service{ host_name 192.168.0.11 service_description Server1 test.example.com SSL Expire check_command check_sslcert_expire!test.example.com!30,10 } define service{ host_name 192.168.0.12 service_description Server2 test.example.com SSL Expire check_command check_sslcert_expire!test.example.com!30,10 }
また、Name VirtualHostで1サーバーに複数のSSLサーバー証明書を設置している場合は、必ず–sniオプションをつけましょう。
–sniオプションをつけないと、デフォルトホスト名(Apache Name VirtualHostでは、最初に定義したVirtualHost)でHTTPSアクセスするので、-Hで指定したホスト名の証明書の監視をしてくれないことがあります。
例えば、example.com というサーバーのCommonName: test1.example.com, test2.example.com の2枚の証明書の監視を行う場合は、以下のようにします。
$ ./check_http --sni -I example.com -H test1.example.com -C 30,10 $ ./check_http --sni -I example.com -H test2.example.com -C 30,10
サービス定義はこんな感じ。
define service{ host_name example.com service_description test1.example.com SSL Expire check_command check_sslcert_expire!test1.example.com!30,10 } define service{ host_name example.com service_description test2.example.com SSL Expire check_command check_sslcert_expire!test2.example.com!30,10 }
通常、証明書の有効期限は1年もしくは3年に一度しかやってこないと思いますが、正しく設定できていないと肝心なときにアラート通知されません。
複数サーバーで同じホスト名を使用する場合や、1サーバーに複数のSSLサーバー証明書を設置している場合にNagiosで監視する場合は、chekc_httpコマンドを使って、意図したとおりの監視を行うことを確認するとよいでしょう。