停止したネームサーバを

自動的に再起動させたい


BINDのnanny.plを使ってみよう!

2016.01.09 LT駆動22

お約束

この発表は個人的な物で

仕事や所属等は全然関係ありません。

 

誤記や間違い等あればご指摘頂けると助かります。
@takatayoshitake

自己紹介

@takatayoshitake

広島を中心に勉強会に出没。
オープンソースカンファレンス広島の
お手伝いやいろんな勉強会で
Ustとかやってます。


広島サーバユーザ友の会(仮称)や
日本CloudStackユーザ会 広島支部等も

最近はじめました。

・・・何もできてませんが(汗

OSC広島の公式キャラクター
「あきちゃん」

http://j.mp/osc14hiaki

会場のみなさんに質問

自宅や会社で自分が

管理している

ネームサーバが…

A. ある
B. ない

nanny について

A. 既に使ってる

B. 使ってない

  知らない

全員既に使ってたら終了

 

知らない方が居られたら続ける

nanny とは?

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 は脆弱性のある古いバージョンを使用

注: 実際のサーバにやらないように

参考: 検証で利用したBIND脆弱性について

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のプロセスを監視して

サービスが停止しても自動で再起動しよう!

 

障害対応を自動化しサーバ管理者に安眠を!

 

オープンソースのプログラムには便利なスクリプトが

ついていることもあるのでダウンロードして見てみよう!

Made with Slides.com