停止したネームサーバを
自動的に再起動させたい
BINDのnanny.plを使ってみよう!
2016.01.09 LT駆動22
この発表は個人的な物で
仕事や所属等は全然関係ありません。
誤記や間違い等あればご指摘頂けると助かります。
@takatayoshitake
@takatayoshitake
広島を中心に勉強会に出没。
オープンソースカンファレンス広島の
お手伝いやいろんな勉強会で
Ustとかやってます。
広島サーバユーザ友の会(仮称)や
日本CloudStackユーザ会 広島支部等も
最近はじめました。
・・・何もできてませんが(汗
OSC広島の公式キャラクター
「あきちゃん」
http://j.mp/osc14hiaki
自宅や会社で自分が
管理している
ネームサーバが…
A. ある
B. ない
nanny について
A. 既に使ってる
B. 使ってない
知らない
知らない方が居られたら続ける
BIND 9のソースディレクトリにあるPerlスクリプト
デーモンプロセスとしてシステムに常駐し、
PIDファイルやdigコマンドでnamedが
正常に動作している否かを確認し、
異常を検知した場合は指定された引数で
namedを起動します。
BIND ソースをダウンロード
https://www.isc.org/downloads/
展開して移動
tar zxvf bind-9-9-8-p2.tar.gz
cd bind-9-9-8-p2
ファイルを /usr/sbin/ にコピー
cp -i contrib/nanny/nanny.pl /usr/sbin/
nanny.pl
#!/usr/bin/perl
$pid_file_location = '/var/run/named.pid';
$nameserver_location = 'localhost';
$dig_program = 'dig';
$named_program = 'named';
fork() && exit();
for (;;) {
$pid = 0;
open(FILE, $pid_file_location) || goto restart;
$pid = <FILE>;
close(FILE);
chomp($pid);
$res = kill 0, $pid;
goto restart if ($res == 0);
$dig_command =
"$dig_program +short . \@$nameserver_location > /dev/null";
$return = system($dig_command);
goto restart if ($return == 9);
sleep 30;
next;
restart:
if ($pid != 0) {
kill 15, $pid;
sleep 30;
}
system ($named_program);
sleep 120;
}
ソースファイルを修正
vi /usr/sbin/nanny.pl
環境に応じて修正
(ふつうにインストールしてれば未変更でも大丈夫)
$pid_file_location = '/var/run/named.pid';
$nameserver_location = 'localhost';
$dig_program = 'dig';
$named_program = 'named';
実行権限を追加
chmod +x /usr/sbin/nanny.pl
起動ファイルの追加
echo "/usr/sbin/nanny.pl" >> /etc/rc.local
/usr/sbin/nanny.pl
デモ環境(仮想マシン)
named は脆弱性のある古いバージョンを使用
注: 実際のサーバにやらないように
DNS サーバ BIND の脆弱性対策について(CVE-2015-5477)
https://www.ipa.go.jp/security/ciadr/vul/20150731-bind.html
PoC for BOND9 TKEY assert DoS (CVE-2015-5477)
https://github.com/robertdavidgraham/cve-2015-5477
「bind nanny」でgoogle検索すると多数の情報あります。
下記を参考にさせて頂きました。ありがとうございます。
・実用 BIND 9で作るDNSサーバ(最終回):
BIND 9を徹底活用するためのTips集 (2/2)
http://www.atmarkit.co.jp/ait/articles/0405/15/news015_2.html
・『DNS設定駆け込み寺』(2003年11月号)
http://www.tatsuyababa.com/NW-DNS/NW-200311-DNSQA03.pdf
・・・他にも多数
nannyでbindのプロセスを監視して
サービスが停止しても自動で再起動しよう!
障害対応を自動化しサーバ管理者に安眠を!
オープンソースのプログラムには便利なスクリプトが
ついていることもあるのでダウンロードして見てみよう!