NagiosでSSLサーバー証明書の有効期限を監視

監視ツール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コマンドを使って、意図したとおりの監視を行うことを確認するとよいでしょう。

タイトルとURLをコピーしました