証明書期限の監視がうまくいかない
ブラウザから見ると正常な証明書期限が見える(下記画像参照)のに監視がうまくいかなかった。
おかしな監視結果はこちら(↓)いまやレガシーなNagiosが真っ赤っ赤に。
Nagios監視プラグインのcheck_httpが検知している情報を見ると、古いSSL証明書の期限をみている。管理者に確認してもらったところ、OSはWindows ServerでWebサーバはApache。ちなみに古い証明書も一緒に入っているとのこと。
???
よくわからない。
そもそも古い証明書が一緒に入っている状態が謎だし、check_httpが古い証明書の方をみるのも謎。
しかし監視対象サーバの管理者は自分ではないので、設定をいじることもできない。古い証明書なんて削除してくれればいいのに…。管理者側は、現状動いているものを下手にいじりたくないとのこと。
別の監視スクリプトを書いた
Nagiosには非常に優れた監視プラグインのcheck_httpがあるが、これをやめて別のスクリプトを使うことにした。ブラウザで正しい期限が見れるということは、curlでも同様の情報がとれるはず。したがって、curl経由で情報取得するスクリプトを書いた。
1 2 |
cd /usr/lib64/nagios/plugins/ vi check_ssl |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/bin/sh # exit codes e_ok=0 e_warning=1 e_critical=2 e_unknown=3 # usage check usage="usage : check_ssl HOST_NAME WARNING_DAYS CRITICAL_DAYS" expr $2 + 1 > /dev/null 2>&1; WAR=$? expr $3 + 1 > /dev/null 2>&1; CRI=$? if [ $# -ne 3 ] || [ $WAR -ge 2 ] || [ $CRI -ge 2 ]; then echo $usage exit $e_unknowna fi # get info curl -s -k -v --tlsv1.2 https://$1 > /tmp/$1 2>&1 # date DLTIME=`cat /tmp/$1 | grep expire | head -n 1 | awk '{print $7"/"$4"/"$5,$6}'| tr -d "月"` DLDATE=`echo $DLTIME | awk '{print $1}'` NF=`date --date "$DLDATE" +%s`-`date +%s` ANS=`echo $NF | bc` ANS=`expr $ANS \/ 86400 + 1` if [ $ANS -le $3 ]; then retval=$e_critical output="CRITICAL" elif [ $ANS -le $2 ]; then retval=$e_warning output="WARNING" else retval=$e_ok output="OK" fi echo "$output - '$1' 証明書期限:$DLTIME 期限日まであと$ANS日" exit $retval |
1 |
chmod 755 check_ssl |
テスト。ホストXXX.co.jpの証明書期限を監視、30日前にWarning、15日前にCriticalとする。
1 2 |
./check_ssl XXX.co.jp 30 15 OK - 'XXX.co.jp' 証明書期限:2021/3/07 14:59:59 期限日まであと780日 |
成功。あとはNagiosに組み込む。
1 2 3 4 5 6 |
vi /etc/nagios/objects/commands.cfg define command { command_name check_ssl command_line $USER1$/check_ssl $HOSTADDRESS$ 30 15 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
vi /etc/nagios/objects/localhost.cfg define host{ use linux-server host_name XXX.co.jp } define service{ use generic-service host_name sts.murata.co.jp service_description SSL_EXPIRE check_command check_ssl notifications_enabled 0 } |
1 2 3 4 5 6 |
nagios -v /etc/nagios/nagios.cfg | tail -n 5 Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check |
1 |
systemctl restart nagios |
おわり。ちゃんと監視できるようになった。
Nagiosのプラグインはちょいちょい、こういう想定外が起こるので注意。ほかにも、check_mail系で/tmpに一時ファイルを作成し、それを参照して判定…みたいなので/tmpに作った一時ファイルが見れなかったり。