DNSの機能は、大きく分けて自分が責任を持つドメインの名前を解決するDNSコンテンツサーバと、自分が責任を持たない任意のドメインの名前解決をするDNSリゾルバの2つがあります。
自分が管理するドメインの名前解決を外向けに提供したい場合、必要なのはDNSコンテンツサーバで、リゾルバの機能はDNS Poisoning攻撃などのリスクを増やすため、提供すべきではありません。
DNSサーバの主要な実装であるBINDは、このコンテンツサーバ機能とリゾルバの機能の両方を包含しており、DNSコンテンツサーバのみ有効にするにはかなりの工夫が必要です。
また、BINDは結構な頻度で脆弱性が見つかるので、今回はセキュアで単機能なdjbdnsを使いたいと思います。
djbdnsはqmailの開発者としても知られるDaniel Julius Bernstein(DJB)氏が開発したソフトウェアです。
djbdnsはDNSコンテンツサーバであるtinydnsとDNSリゾルバであるdnscacheの2つから構成されます。
今回はtinydnsを使ったDNSコンテンツサーバの立て方を説明します。
まずはじめに、portsを使ってdjbdnsをインストールします。
$ cd /usr/ports/dns/djbdns $ make config-recursive $ make install clean
djbdnsのビルドメニューで「ADD_USERS」を設定することにより、djbdnsを動作させるのに必要なユーザが作成されます。
また、portsの依存関係により、daemontools等の必要なパッケージについても自動的にインストールされます。
「ADD_USERS」を設定し忘れてビルドした際でも、以下のようにすれば必要なユーザを追加できます。
$ pw groupadd djbdns -g 70 $ pw useradd tinydns -u 71 -g 70 -d /usr/local/etc/tinydns -s /sbin/nologin $ pw useradd dnscache -u 72 -g 70 -d /usr/local/etc/dnscache -s /sbin/nologin $ pw useradd dnslog -u 73 -g 70 -d /usr/local/etc/dnslog -s /sbin/nologin
tinydnsはDNSコンテンツサーバ用、dnscacheはDNSリゾルバ用、dnslogはログ出力用のプロセスを動作させるユーザです。
qmailもそうですが、DJB氏のアプリケーションは単機能の機能を権限が違う複数のユーザで動作させる設計で作られています。
次に、tinydnsの設定を進めていきます。
tinydnsの設定は、tinydns-confを使います。
$ tinydns-conf tinydns dnslog /usr/local/etc/tinydns 192.168.0.13
tinydns-confの引数は、順に「tinydnsを動かすユーザ」「ログを保存するユーザ」「設定ファイルの保存先」「tinydnsを動かすIPアドレス」です。
上記の手順で作成したフォルダの中に以下のようにして設定を追加していきます。
$ cd /usr/local/etc/tinydns/root $ ./add-ns orbiter.kishiro.com 192.168.0.13 $ ./add-host appolo11.orbiter.kishiro.com xxx.xxx.xxx.xxx
上記の例では、orbiter.kishiro.comを管理するDNSコンテンツサーバを設定し、その元でxxx.xxx.xxx.xxxというIPアドレスにappolo11.orbiter.kishiro.comという名前を設定しています。
尚、上記の手順だけでは設定が反映されません。
編集が終わったあとにmakeを実施するして設定を反映してください。
$ make
tinydnsを動作させるには、同じくDJB氏開発のdaemontoolsを使います。
daemontoolsは、tinydnsを起動させるために必要で、万が一tinydnsが停止、終了した場合でも、再起動させてくれるデーモンです。
FreeBSDでportsからdjbdnsをインストールした場合には、daemontoolsも自動的にインストールされるので、daemontoolsの個別のインストール作業は不要です。
daemontoolsの起動スクリプトは、「/usr/local/etc/rc.d/svscan」として保存されています。
中を見るとわかるのですが、このスクリプトは指定された「サービス起動用ディレクトリ」の中の(サブディレクトリ内の実行属性のついた)シェルスクリプトを起動させるようになっています。
daemontoolsがportsからインストールされていれば、この「サービス起動用ディレクトリ」は「/var/service」になっています。
まず、このサービス起動用ディレクトリを作成します。
$ mkdir -p /var/service
次に、このサービスフォルダにtinydnsサービスを登録します。
$ ln -s /usr/local/etc/tinydns /var/service
登録といっても、シンボリックリンクを貼るだけです。
この手順により、「/usr/local/etc/tinydns」内の「run」スクリプトが起動されるようになります。
最後に、システムが起動した際にdaemontoolsが自動的に起動するように、「/etc/rc.conf」を編集します。
「/etc/rc.conf」に以下の記述を追記してください。
svscan_enable="YES"
この記述により、システムが起動した時に自動的にdaemontoolsも起動し、そこからtinydnsが起動されます。
あとは再起動するか、/usr/local/etc/rc.d/svscan startするだけです。
・文章中の誤記を修正。(damemontool→daemontool)
・文章の内容全般を見直し再構成。
・portsの導入時に適切な設定を選択することにより、必要なユーザが自動的に追加される旨を追記。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。