強い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サイトでダウンロード可能です。

https://www.isc.org/downloads/

 上のリンク先のページには、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も、ソースからビルドしておくことをお勧めします。

参考:

「OpenSSLが必要」という記述について、正確に言うとBINDはOpenSSLがインストールされていないサーバでもビルド可能です。BINDでOpenSSLは証明書を使う機能に必須です。たとえば当社のDNSサーバはドメイン情報の査証等を防止するためDNSSECを採用していますが、DNSSECにはOpenSSLが必須です。また、いくつかの管理機能が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-chroot x86_64 32:9.5.0-16.a6.fc8 fedora 51 k
bind-devel x86_64 32:9.5.0-16.a6.fc8 fedora 3.1 M
bind-devel i386 32:9.5.0-16.a6.fc8 fedora 3.1 M
bind x86_64 32:9.5.0-16.a6.fc8 fedora 1.7 M
bind-libs i386 32:9.5.0-16.a6.fc8 fedora 930 k

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

PackageArchVersionRepositorySize
mysql x86_64 5.0.45-4.fc8 fedora 2.7 M
mysql-libs x86_64 5.0.45-4.fc8 fedora 3.1 M
perl-DBI x86_64 1.58-2.fc8 fedora 930 k
unixODBC x85_64 2.2.12-4.fc8 fedora 878 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ファイルの設定を解説します。

2010年6月27日 | カテゴリー : DNS, BIND | 投稿者 : eurotec