第4回 DNSのIPv6設定でやっていいこと、悪いことまでに、IPv6での経路制御周辺とDNSのIPv6関連の設定に関して解説した。第5回目の今回は、HTTPサーバ、SMTPサーバ、POPサーバなど、DNS以外のサーバのIPv6設定について解説する。
全てのサーバ設定に共通する注意点
個々のHTTPサーバ、SMTPサーバ、POPサーバの設定についての注意点を述べる前に、まずは全てのサーバ設定に共通することを述べておく。
・IPv6アドレスのフォーマットはまちまち
IPv6アドレスをアプリケーションの設定ファイルで指定する場合、そのままIPv6アドレスを書けないことが多い。理由は、IPアドレスとポート番号とを区別する:(コロン)と、IPv6アドレスの区切り記号である:(コロン)とが重複してしまうからだ。
多くの場合は、[3ffe:ffff:ffff::1]:80という具合にIPv6アドレスを大括弧([])でくくって指定するが、上記のような書式をしないアプリケーションも多いので、アプリケーションごとに注意が必要である。
・IPv4射影アドレスには要注意
IPv6アドレス体系の中には、IPv4射影アドレス(IPv4-mapped address)※1と呼ばれるIPv6アドレスが存在する。具体的には先頭96bitが0:0:0:0:0:ffff::で後ろ32bitにIPv4アドレスが入ったIPv6アドレスである。
※1IPv4射影IPv6アドレスとは、IPv6アドレスの上位80bitに0、81〜96bit目に1を入れ、下位32bitにIPv4アドレスを埋め込んだアドレスである。IPv6をサポートしていないノードのアドレスをIPv6アドレスとして表現するために用いられている。
このアドレスは、IPv6-onlyなアプリケーションがIPv4アドレスを処理するために内部的に用いるものである。例えばIPv6のみで受け待ちしているHTTPサーバがIPv4で接続されたら、あたかもIPv4射影アドレスから接続されたかのように振る舞う。
この機能は一見便利なようだが、実はフィルタリングの穴を作りがちな非常に危険な機能である。例えばあるHTTPサーバへのアクセスを特定のセグメントからだけ認めさせるために、HTTPサーバのアクセスフィルタとして、
- そのセグメントのIPv4アドレス
- そのセグメントのIPv6アドレス
- そのセグメントのIPv4アドレスに対応するIPv4射影アドレス
の3つを書かなければならないからである。最初の2つは気が付いたとしても、最後の1つを忘れがちなのはいうまでもないことだろう。
対策としては、
- サーバOSでIPv4射影アドレス機能を無効にする
- 忘れずにIPv4射影アドレスのフィルタも書く
のいずれかが必要である(アプリケーションによっては、IPv4射影アドレスがないと動かないものもあるため、IPv4射影アドレスを無効にすればそれでおしまい、というわけにはいかないのが難しいところである)。
個々のサーバのIPv6化
以下、個々のサーバのIPv6化の方法と、その注意点を解説する。
・HTTPサーバ
代表的なHTTPサーバであるApacheは、バージョン2.0以降で最初からIPv6対応済みである。従ってバージョン2.0以降のApacheで普通にIPv4のHTTPサーバとして動くような設定をしたら、後はHTTPサーバのIPv6アドレスをDNSに登録するだけで、すぐにIPv6対応のHTTPサーバとして機能するようになる。
KAMEプロジェクトのホームページやIPv6普及・高度化推進協議会のホームページのように、IPv6でアクセスした人だけに特別サービスをしたい場合には、以下のいずれかの方法を取ればいい。いうまでもないことだが、こちらのように、IPv4でもIPv6でも全く同じに見えるホームページでも全然問題ない。
- IPv6アドレスだけDNS登録したHTTPサーバを用意して、そこにIPv6特典サービスコンテンツを盛り込む。
- CGIやPHPなどのスクリプト言語を用いて、アクセス元のIPアドレス(Apacheの場合はREMOTE_ADDR変数にIPv4/IPv6アドレス文字列が含まれている)に応じてコンテンツの中身を変更する図2)。
#!/usr/bin/perl .... if ($ENV{'REMOTE_ADDR'} =~ /^[a-fA-F0-9:]+$/) { print << EOF Conguratulations! You are using IPv6! EOF } else { print << EOF You are just using IPv4 EOF }
当然なことだが、“http://1.2.3.4/……”というようにURL内にIPv4アドレスをベタ書きしていると、ネットワークやHTTPサーバがIPv6化したとしてもそのURLはIPv4でしかアクセスできない。同じようにIPv6アドレスをURL内にベタ書きすることも不可能ではないが、面倒なうえに今度はそのURLへIPv4でアクセスできなくなってしまうので、HTTPサーバのホスト名をDNSに登録して、そのホスト名をURLに書くことをお勧めする。
・HTTPプロクシ
代表的なHTTPプロクシであるSquidやDeleGateについては、残念ながら正式版でのIPv6対応はまだである。従って現在は、SquidIPv6化プロジェクトにて公開されているIPv6対応版Squidや、ApacheのHTTPプロクシ機能を用いるのが適切だろう。
なおHTTPプロクシのIPv6対応があまり進んでいない背景には、そもそもIPv6は端末と端末とが直接に通信し合う世界を指向するという事実がある。IPv6でもHTTPプロクシを作ることは技術的にはさして難しいことではないが、HTTPプロクシのように端末と端末との間に挟まって通信を仕切るような存在があると、そもそもIPv6を導入する意味が薄れてしまうというわけだ。
・SMTPサーバ
SMTPサーバにはいくつか有名なソフトがあるが、いずれについてもIPv6対応版が存在する。
- sendmail
バージョン8.10以降標準でIPv6対応済み。 - qmail
正式版はまだIPv6未対応だが、IPv6対応パッチが第三者により公開されている。 - postfix
正式版はまだIPv6未対応だが、IPv6対応パッチが第三者により公開されている。■
いずれの場合も、普通にIPv4のSMTPサーバとして動くような設定をしたら、後はSMTPサーバのIPv6アドレスをDNSに登録するだけで、すぐにIPv6対応のSMTPサーバとして機能するようになる。
後は必要に応じてopen-relay防止のために、メール中継を認めるソースアドレスを追記していけばよい。IPv6アドレスの書式はソフトによってまちまちなのに注意すること(図3)。
* sendmailの場合 /etc/mail/access
192.168.1 RELAY IPv6:3ffe:ffff:ffff:: RELAY
* postfixの場合 /etc/postfix/main.cf
.... #mynetworks_style = subnet mynetworks=192.168.1.0/24, [3ffe:ffff:ffff::/48] ....
・POPサーバ
代表的なPOPサーバであるqpopperの正式版はまだIPv6未対応だが、IPv6対応パッチが第三者により配布されている。FreeBSDの場合portsやpackageでIPv6対応版qpopperが配布されているので、自力でパッチをあてるのが面倒な場合はそちらを使うといいだろう。
普通にIPv4のPOPサーバとしての設定をしたら、後は、
- POPサーバを立ち上げるホストのIPv6アドレスをDNSに登録
- IPv6ソケットでqpopperを立ち上げる
だけ(図4)で、IPv6対応のPOPサーバとして機能するようになる。
/etc/inetd.conf
…… pop3 stream tcp46 nowait root /usr/local/libexec/qpopper qpopper -s ……
(注)/etc/inetd.confに元々書いてある
pop3 stream tcp nowait root /usr/local/libexec/popper popper
という行は削除すること
今回は、もろもろのサーバのIPv6対応について解説した。次回はIPv6のセキュリティの対応について解説していく。
Copyright © ITmedia, Inc. All Rights Reserved.