#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PRGDIR=/usr/local/bin ## 実行スクリプト名 PRGNAME=named_hint_check.sh ## named.rootの一時保存場所 TMPDIR=/tmp ## bindのconfigディレクトリ BINDCONFDIR=[BINDのzoneファイルが設置してあるパス(/etc/bind など)] ## 確認対象ファイル BINDFILE=[named.confで指定しているファイル名(named.ca など)] ## GETするサーバリスト GETSRVARRAY=("ftp.internic.net" "ftp.rs.internic.net") ## GETするファイル名 GETFILENAME=named.root ## GETするディレクトリ名 GETDIRNAME=domain ## 宛先メールアドレス MAILADDR=異常時のメール送信先(name@domain) ## ログ出力先 LOGFILE=/var/log/named_hint_check.log # おまじない ## メール送信関数(${MAILADDR}宛) ## kw_sendmail "件名" "本文" kw_sendmail() { echo -e "$2" | nkf -j | mail -a 'MIME-Version: 1.0' \ -a 'Content-Type: text/palin;charset="iso-2022-jp"' \ -s "$1" ${MAILADDR} } ## ファイル取得関数 ## kw_getfile "プロトコル" "サーバ" kw_getfile() { wget -T 15 -t 1 ${1}://${2}/${GETDIRNAME}/${GETFILENAME} > /dev/null 2>&1 if [ $? != 0 ]; then ### 失敗したが、確認のため再度GET wget -T 15 -t 1 ${1}://${2}/${GETDIRNAME}/${GETFILENAME} > /dev/null 2>&1 if [ $? != 0 ]; then return 1 fi fi } ## ログ記載関数 ## kw_log "ログの内容" kw_log() { echo "`date '+%b %d %T' ` `hostname` ${PRGNAME}: ${1}" >> ${LOGFILE} } ## iptables設定関数 ## kw_iptables "FQDN" kw_iptables() { IPADDR="`/sbin/ifconfig eth0 | awk -F ":" '/inet addr/ { split($2,a," "); print a[1] }'`" sudo iptables -A OUTPUT -s ${IPADDR} -d ${1} -j ACCEPT IPNUM=`sudo iptables -L OUTPUT --line-numbers | tail -n 1 | awk '{ print $1 }'` } # お仕事開始 ## 作業ディレクトリに移動 cd ${TMPDIR} ## named.root ダウンロード開始 kw_getfile "http" "${GETSRVARRAY[0]}" if [ $? != 0 ]; then kw_iptables "${GETSRVARRAY[0]}" kw_getfile "ftp" "${GETSRVARRAY[0]}" if [ $? != 0 ]; then kw_log "{GETSERVARRAY[0]}: ${GETFILENAME} の取得に失敗しました。" kw_getfile "http" "${GETSRVARRAY[1]}" if [ $? != 0 ]; then kw_iptables "${GETSRVARRAY[1]}" kw_getfile "ftp" "${GETSRVARRAY[1]}" if [ $? != 0 ]; then ### ログに記載 kw_log "{GETSERVARRAY[0]}: ${GETFILENAME} の取得に失敗しました。" ### メール送信 kw_sendmail "${GETFILENAME} diff check script NG!" "${GETFILENAME} のダウンロードに失敗しました。\n担当者は 確認して下さい。" ### 異常終了 exit 1 else PROTO="ftp" GETSERVNAME="${GETSRVARRAY[1]}" sudo iptables -D OUTPUT ${IPTNUM} fi else PROTO="http" GETSERVNAME="${GETSRVARRAY[1]}" fi else PROTO="ftp" GETSERVNAME="${GETSRVARRAY[0]}" sudo iptables -D OUTPUT ${IPTNUM} fi else PROTO="http" GETSERVNAME="${GETSRVARRAY[0]}" fi ## 差分確認 diff ${TMPDIR}/${GETFILENAME} ${BINDCONFDIR}/${BINDFILE} > /dev/null 2>&1 if [ $? != 0 ]; then ### 取得ファイルのシリアルを確認 GETSERIAL=`grep version ${TMPDIR}/${GETFILENAME} | awk '{ print $7 }'` NOWSERIAL=`grep version ${BINDCONFDIR}/${BINDFILE} | awk '{ print $7 }'` if [ ${GETSERIAL} -gt ${NOWSERIAL} ]; then ### ログに記載 kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} が更新されているようです。${BINDFILE} を確認して下さい。" ### メール送信 kw_sendmail "${GETFILENAME} diff check script NG!" "${BINDFILE} が更新されているようです。\n担当者は差分内容を確認して対応してください。\n${PROTO}://${GETSERVNAME}/${GETDIRNAME}/${GETFILENAME} が該当ファイルです。" else kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} の更新は必要ありません。" fi else kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} の差分はありません。" fi ## 一時ファイルを削除 rm ${TMPDIR}/${GETFILENAME} exit 0
2014年2月15日土曜日
DNS named.root 更新確認スクリプト
登録:
コメントの投稿 (Atom)
DNS named.root 更新確認スクリプト
#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PR...
-
fj.os.linux/japan.comp.linux を参照。 ファイルハンドルとは、オープンしているサーバ上のファイルを指し示すためにクライアント側が持っている識別子のことです。 その識別子が指し示しているファイルがサーバ上で無くなってしまったり、アクセスできなかったりした...
-
※MAC-VLAN登録変更の際に必要な場合があるため 1. 認証されているスイッチを確認 $ grep xxxxxxxxxxxx /var/log/radius/radius.log Mon Feb 21 14:05:58 2011 : Auth: Login OK: [xxx...
-
前 のは処理がスマートでないのと、値1、値2を複数埋め込む必要があったのとで、改良 mailsend.py #!/usr/bin/env python #coding: utf-8 # CSVからメール送信スクリプト # Ver 1.5 わたり 2013.07.09 # 使い...
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。