CentOS6.5でやっているLinuxサーバー設定関連の続き記事。
今度はDNSサーバーであるBINDの導入を行います。
今回は、インストール~named.confの編集まで行います。
BIND導入の目的と目標
宅内から宅内のサーバーにアクセスする時にドメイン形式でアクセス可能にすることです。
導入の動機を簡潔に言ってしまえば、後日記事をアップする予定のメール関連のサーバーを立ててテストをするときに、「名前解決ができないとメール送受信テストが行えない」というのと「hostsを書き換える方法があるけど、そんな事を記事に書くぐらいならBINDを触ってみた方が良い」と考えたからです。
自宅サーバーを立てるための参考書籍には「マスターサーバとスレーブサーバを構築するのが一般的」と書かれていることが多いような気がしますが、本当にそれが必要なケースは外部(宅外)に対してDNSサービスを提供しているケースや多数のクライアント機器が存在する社内などで名前解決を行うケースです。
※ちなみに、この程度の用途であればdnsmasqでも良いのですが、BINDを少しでも触っておきたかったためBINDを導入する事にしました。
インストール
インストールするパッケージはbindとbind-chrootとbind-utilsです、
bind-chroot はBINDが参照するルートディレクトリを「/var/named/chroot」に偽装するためのパッケージです。
bind-utils は、後で名前解決の動作確認を行う時に必要になるパッケージです。
もしBINDのセキュリティホールが見つかり、攻撃を受けてもシステムファイルに影響を及ぼさないようにするために合わせてインストールします。
# yum install bind bind-chroot bind-utils
named.confの編集
「/etc/named.conf」を編集します。
量が多いのでステートメント単位で抜き出します。
options
DNSサーバーの基本的な動作の設定を行う所です。
options { listen-on port 53 { 127.0.0.1; 192.168.1.5; }; ・・・・・・ (1) listen-on-v6 port 53 { ::1; fe80:・・・:7acd/64; }; ・・・・・・ (2) directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { ・・・・・・ (3) localhost; 192.168.1.0/24; }; forwarders { 192.168.1.1; }; ・・・・・・ (4) recursion yes; ・・・・・・ (5) // dnssec-enable yes; ・・・・・・ (6) // dnssec-validation yes; // dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; version ""; ・・・・・・ (7) };
(1) DNSの問い合わせを待ち受けるIPアドレスを追加します。(サーバーに割り当てたIPアドレスです。)
初期状態では127.0.0.1のみ記載されており、外部からの問い合わせができないようになっています。
また、「any;」を指定する事で持っている全てのアドレスでDNSの問い合わせの待ち受けを行います。
(2) DNSの問い合わせを待ち受けるサーバーのIPv6アドレスを追加します。
「ifconfig」コマンドを実行する事で機器のIPv6アドレスが確認できます。
また、「any;」を指定する事で持っている全てのアドレスでDNSの問い合わせの待ち受けを行います。
(3) DNSの問い合わせを許可するアドレスを指定します。
初期状態では「localhost」のみ記入されていますが、上記のようにIPアドレス+ネットマスクでの指定や「any;」などの指定が可能です。
(4) ゾーンデータベースからの名前解決に失敗した場合にクエリーの解決を他のサーバーに任せる設定です。今回は、宅内での設定なのでルーターを指定する事で、bindサーバーを立てる前と同様の名前解決になるように指定しています。
(5) 外部のDNSサーバーへ再帰問い合わせを行うかどうかを指定します。初期設定はyesで、そのままにしておくと自身で名前解決ができなかった場合、外部のDNSに問い合わせ、結果をクライアントに返すとともにキャッシュします。つまり、yesにするとキャッシングサーバーとして機能することになります。
また、yesだと外部DNSへ問い合わせた結果を偽装する事で悪意のある攻撃の足掛かりにされる可能性があるためキャッシュ用途が無い場合はnoに設定します。
(6) DNSSECに関する設定です。今回は外部に公開するわけではないため機能を無効化しておきます。
(7) BINDのバージョンの情報を返さないように設定します。
logging
BINDのログ出力方法の調整を行う設定です。
ログファイルは「category」と「channel」を書いてログの出力をコントロールします。
channelで出力の調整(時間出力やどこに出力するか、どの程度の情報を出力するかなど)を行い、category(ログの種類)毎にどのchannelに出力するのかを指定する方式になっています。
※categoryで指定でる内容は後述します。
logging { channel "default_log" { ・・・・・・ (8) print-time yes; print-category yes; file "/var/log/named/default_log.log" versions 5 size 100M;・・・・・・ (9) severity dynamic; }; category default { "default_log"; }; ・・・・・・ (10) };
(8) チャンネルの名前を「default_log」に変更し、「print-time yes」「print-category」を追加して、時間とカテゴリ情報をログに書き出すようにしています。
(9) 出力ファイルパスを「/var/log/named/default_log.log」に変更し、ログは5ファイルでローテーション、100MBのサイズで管理する設定に変更します。
(10) 全てのログ(defaultのカテゴリを指定)を default_log のchannelで指定した形式で出力するように設定しています。
ログファイル用ディレクトリの作成
ログファイルを置いておくディレクトリを作成し、ディレクトリのアクセス権限をrootからnamedへ変更します。
# mkdir /var/log/named # chown named.named /var/log/named/
カテゴリの種類
参考にログをどのようなカテゴリで分離できるか記録しておきます。
default | デフォルトのカテゴリ。チャンネル指定の記述を行わなかったカテゴリのログは全てこのdefaultカテゴリとして認識される |
general | 全てのカテゴリ。他のカテゴリに含まれないログが存在し、それらを出力するために使用する |
database | データベース操作の記録 |
security | リクエストの許可/却下を記録 |
config | 設定ファイルの構文解析と処理の記録 |
resolver | 再帰的なDNSクエリーの発生などを記録 |
xfer-in | ゾーン転送の受信記録 |
xfer-out | ゾーン転送の送信記録 |
notify | NOTIFY(通知)プロトコルの記録 |
client | DNSクライアントのクエリーを処理した際の記録 |
network | ネットワーク操作の記録 |
unmatched | 一致するカテゴリが存在しないログの記録 |
update | DDNSの情報更新を行った時の記録 |
update-security | DDNSの承認/拒否に関する記録 |
queries | 問い合わせクエリーの記録 |
dispatch | サーバーモジュールに入ってくるパケットのCPU割り当ての記録 |
dnssec | DNSSEC、TSIGプロトコルを処理したときの記録 |
lame-server | DNS解決の際に他のサーバーで見つけた設定ミスの記録 |
delegation-only | delegation-only機能の働きによって、強制的にNXDOMAINの結果を返した時の記録 |
zone
ゾーンと言うのはホスト名と対照になるIPアドレスの組み合わせ(逆も同様)の事になります。
ホスト名をIPアドレスに変換する組み合わせを「正引きゾーン」と呼び、逆のIPアドレスからホスト名に変換する組み合わせを「逆引きゾーン」と呼びます。
ここではゾーンの情報を集めたデータベースの種類やファイル名を指定します。
//zone "." IN { ・・・・・・ (11) // type hint; // file "named.ca"; //}; include "/etc/named.rfc1912.zones"; ・・・・・・ (12) include "/etc/named.root.key"; zone "cross-ring.org" IN { ・・・・・・ (13) type master; file "cross-ring.org.db"; allow-update { none; }; allow-transfer { none; }; }; zone "1.168.192.in-addr.arpa" { ・・・・・・ (14) type master; file "1.168.192.in-addr.arpa.db"; allow-update { none; }; allow-transfer { none; }; };
(11) 元々記載されているルートゾーンの設定をコメントアウトして無効化います。
※無効化するのには上記のようにC++風のコメントアウト形式でも構いませんし、/*~*/で囲うC言語形式でも構いませんし、先頭に#を付けるperl形式のコメントでも構いません。記載自体を消してしまっても構いません。
(12) 別ファイルに記載しているゾーン情報を読み込む設定です。
このファイルに記載されているのはlocalhostなどの基本情報のみです。
(13) 正引きゾーンの設定です。
次回「/var/named/cross-ring.org.db」というファイル名のファイルを作成します。
(14) 逆引きゾーンの設定です。
上記の設定は192.168.1.0/24というネットワークに対する逆引き設定で、IPアドレスの上位オクテットから逆順に並べたIPと「in-addr」というサブドメイン、「arpa」というトップドメインで構成します。
次回「/var/named/1.168.192.in-addr.arpa.db」というファイル名のファイルを作成します。
※逆引きゾーンについて「192.168.0.0/24」というネットワーク環境だった場合は「0.168.192.in-addr.arpa」というゾーンを作成することになります。
以上でnamed.confの設定は完了です。
次回、ゾーンデータベースの作成を行い、動作確認を行います。
トラックバック & ピンバック