現在位置: ホーム 技術ノート 強いBIND DNSサーバを構築する 第一回 - ソースからビルドしよう

強いBIND DNSサーバを構築する 第一回 - ソースからビルドしよう

— カテゴリ: , , ,

最もオープンなネットワークサービスであるDNSは、ネットワーク攻撃の対象のNO1。だから、いつでもタイムリーに脆弱性対策ができるように、BINDはソースからビルドしよう。BIND9のソースからのビルド手順を解説します。

DNSサーバはネットワーク攻撃対象NO1

DNSサービスは、不特定多数のアクセスを許すという性格上、常にネットワーク攻撃の対象NO1にランクされます。DNSサーバのデファクトスタンダードであるISC(Internet Service Consorthium)のBINDは、たいていのLinuxディストリビューションに標準添付され、最近では、chroot設定の雛形が、RedHat系LinuxのRPMのような、バイナリーパッケージで提供されている場合もあります。

しかしながら、Linuxディストリビューションのヴァージョンアップを待っていたのでは、危険な脆弱性が発見された場合に、タイムリーに対応することができません。ですから、BINDの場合は、バイナリーインストールの便利さを捨てて、ソースからのビルドを心がけることを強くお勧めします。

BIND9をソースからビルドする

 BIND9のソースは、以下のISCのWEBサイトでダウンロード可能です。

http://www.isc.org/downloadables/11

 上のリンク先のページには、BIND9.2から現在までの、すべてのBIND9の各ミドルヴァージョンの最新版のソースコードが公開されています。2009年8月現在、最新ヴァージョンはBIND9.6.1-P1です。このヴァージョンは、2009年7月28日に公表されたDoS攻撃に対する脆弱性対策が施されています。

ISCは、何らかの脆弱性が発見され、これに対応する場合、その時点での最新ヴァージョンのみでなく、一定期間、過去の各ミドルヴァージョンについても対策を施します。たとえば、BIND-9.2, BIND-9.3はEOL(End Of Life)が宣言され、すでにサポートが終了していますが、BIND-9.4, BIND-9.5については、前述の脆弱性対策を施したヴァージョンが、BIND-9.6.1-P1とほぼ同時期にリリースされています。

ここでは、例として最新版BIND-9.6.1-P1を利用することにします。

BIND9のインストールに必要な他のソフトウェア

BIND9にはOpenSSLが必要です。OpenSSLはその演算の性格上、スタックオーバーフローなどをねらう攻撃者のターゲットになりやすく、BIND同様、活発に更新されますが、BIND9はconfig時にOpenSSLのヴァージョンをチェックします。

流通しているLinuxディストリビューションに付属するOpenSSLはほとんどすべて、BIND9のヴァージョンチェックに引っかかります。BIND同様、OpenSSLも、ソースからビルドしておくことをお勧めします。

BIND9のソースtarボールを入手し解凍する

ユーザープログラムのソースは、/usr/local/srcに配置するのがUNIX系OSでの習慣ですが、プロダクションサーバにソースを残したくない場合は、/tmp以下で行うことをお勧めします。ここでは/usr/local/src以下で作業することにします。

BIND9のビルドを行うホストからISCのサイトがFTPでアクセス可能である場合、以下の手順で直接BIND-9.6.1-P1のソースtarボールを入手します。

# cd /usr/local/src
# wget ftp://ftp.isc.org/isc/bind9/9.6.1-P1/bind-9.6.1-P1.tar.gz

ダウンロードが終了したら、解凍、展開します。

# tar -zxf bind-9.6.1-P1.tar.gz

configureする

BIND9は、configure実行時にパラメータ指定することにより、インストール場所の指定や機能追加をすることができます。以下のパラメータ指定は、ほとんどの場合に対応可能です。

  • --enable-threads
    マルチスレッド対応でビルドします。マルチCPU構成のホストでは、複数のCPUに対応したワーカースレッドが使用可能になります。シングルCPUのホストの場合、あまり意味がありませんが、指定しておいても動作に不都合はありません。
  • --with-openssl=/usr/local/ssl
    OpenSSLのインストール場所を指定します。OpenSSLは、Linux OSをインストールした際にインストールされたものがあります。そちらではなくソースからビルドした最新のOpenSSLを使用するために、この指定が必要です。上記の例は、OpenSSLをデフォルトのインストールパスにインストールした場合です。ライブラリが/usr/local/ssl/lib/、includeファイルが/usr/local/ssl/include/opensslで検索されます。

# cd /usr/local/src/bind-9.6.1-P1/
# ./configure --enable-threads --with-openssl=/usr/local/ssl

正常に終了すれば、次の工程のmakeに必要なMakefileが生成されます。

makeする

以下のようにmakeを実行すると、コンパイルが始まります。

# make

 バイナリ版のBINDがインストールされていたら削除する

もし、OSインストール時にBINDがインストールされていたら、この段階でアンインストールしておきます。

以下は、BIND9に関連してインストールされている可能性あるパッケージをリストアップしたものです。X86_64版のFedora8の場合ですが、他のOSでは、異なっているかもしれません。

PackageArchVersionRepositorySize
=================================================================
bind-chrootx86_6432:9.5.0-16.a6.fc8fedora51 k
bind-develx86_6432:9.5.0-16.a6.fc8fedora3.1 M
bind-develi38632:9.5.0-16.a6.fc8fedora3.1 M
bindx86_6432:9.5.0-16.a6.fc8fedora1.7 M
bind-libsi38632:9.5.0-16.a6.fc8fedora930 k

 

上記のパッケージがインストールされた際に、以下のものも依存性の関係でインストールされているかも知れません。不要なものはアンインストールしておきます。削除しようとしたときに、他のパッケージとの依存性があることがわかった場合や、わからない場合は、そのままにしておいても結構です。

PackageArchVersionRepositorySize
=================================================================
mysqlx86_645.0.45-4.fc8fedora2.7 M
mysql-libsx86_645.0.45-4.fc8fedora3.1 M
perl-DBIx86_641.58-2.fc8fedora930 k
unixODBCx85_642.2.12-4.fc8fedora878 k

 

RedHat系Linuxの場合以下のいずれかの手順でRPMを削除できます。

# yum remove bind
# rpm -e bind

削除しようとするRPMモジュールに依存している他のモジュールがある場合、警告とともにエラー終了します。不要なものであれば、依存しているものを先にアンインストールします。たとえば、bind-chrootはbindに依存しますので、bindより先にbind-chrootをアンインストールします。

BIND9をインストールする

以下を実行すると、BIND9のファイルが所定の場所にインストールされます。

# make install

その他の作業

bindは本来システム系のプログラムとして/usr/sbinにインストールされます。他のソフトウェアがこの場所を想定している場合を考慮して、BINDの実行ファイルであるnamed、その他のユーティリティプログラムのシンボリックリンクを作成しておきます。

# ln -s /usr/local/sbin/named /usr/sbin/named
# ln -s /usr/local/sbin/named-checkconf /usr/sbin/named-checkconf
# ln -s /usr/local/sbin/named-checkzone /usr/sbin/named-checkzone
# ln -s /usr/local/sbin/named-checkzone /usr/sbin/named-compilezone

named-compilezoneのリンク先がnamed-checkzoneとなっているのはタイプミスではありません。/usr/local/sbin/named-compilezone自体が、/usr/local/sbin/named-checkzoneへのシンボリックリンクなのです。

ユーティリティプログラムの使用方法については追って、別な回で解説します。

次はいよいよ設定作業

次回は、named.confやzoneファイルの設定を解説します。

ドキュメントアクション