Solaris 道をゆく(15) - qmailを使ったメールサーバー
今回は予告通り安全なメールサーバとして最近人気が高まってきているqmail について解説していきましょう。
qmailは前号で紹介したdjbdnsと同じD.J.Bernstein氏が作成しているメールサー
バです。djbdnsと同様、設計段階からセキュリティや性能を考慮してある点が
sendmailと比較した大きな利点といえるでしょう。またインターネットに特化
しているため、サーバとして必要な機能を保持しながら設計の簡素化が図られ
ている点もdjbdnsと共通しています。
qmailのセキュリティの高さを示すものとして、最新版のqmail-1.03が1998年
にリリースされてから3年近く経過しているという点があげられるでしょう。
毎日のように何らかのプロダクトでセキュリティホールが発見され、ソフトウェ
アのバージョンアップが行なわれている現状を考えると、qmailの安定性には
本当に驚嘆します。
なおqmailのソースファイルおよびインストールや運用に必要な各種情報は、
http://www.jp.qmail.org/以下から日本語で入手することが可能になっていま
す。qmailを利用するのであれば、必ず参照するようにしてください。また本
誌2001年4月号の特集中でもqmailを取り上げていますので、参考にするとよい
でしょう。
qmailを利用するには、ソースアーカイブの入手とコンパイルの作業が必要に なります(注1)。それでは早速見ていきましょう。
注1: djbdnsと同様、セキュリティと互換性維持のため、qmailのバイナリを配布するには、http://www.jp.qmail.org/qmail/dist.htmlで定められた非常に厳格な条件を満たすことを求められています。一部バイナリを配布しているサイトなどもありますが、作者のD.J.Bernstein氏のポリシーを尊重して自分でコンパイルして利用することを願います。 |
qmailのアーカイブ自体はqmail-1.03.tar.gzという名称で各所に存在しますの
で、適宜入手してください。付録CD-ROMにもいれてあります。またqmailは単
体でも動作しますが、前号で紹介したdaemontoolsやucspi-tcp(tcpserver)と
の連係が推奨されています。本文中でもucspi-tcpはインストール済という前
提で説明を行なっていきますので、前号を参照して適宜インストールを行なっ
ておいてください。
その他にもqmailには連係して動作するプロダクトが幾つかあります。
とりあえず記事中で紹介するプロダクトを全てインストールしてしまいましょう。
qmailのインストールには幾つかの準備が必要です。まず実行例1のようにして qmailが利用するアカウントとディレクトリを作成します。多数のアカウント を利用しますが、これは可能な限り権限を細分化することで、万一侵入された ときの影響範囲を最低限にするためです。アカウントが正しく作成されていな いと、後述するmake setup checkが失敗してしまいますので、必ず事前に作成 しておいてください。/var/qmailというディレクトリも作成しておきます。 qmail関連の各種ファイルは基本的にこのディレクトリ以下に置かれることに なります(注2)。
# mkdir /var/qmail # groupadd nofiles # groupadd qmail |
実行例1: qmailに必要なディレクトリとアカウントの作成
注2: 後述するように変更することも可能です。 |
ディレクトリを作成したら、実行例2のように展開後コンパイルを行ないます。 Solaris の場合ccが存在しないため(注3)、ファイルの展開後にconf-cc と conf-ld というファイル中のccという記述を各々図1と図2のようにgccに修正することを忘れないようにしてください。 開発環境の設定が正しく行なわれていれば(注4)、 root権限のあるアカウントで make setup checkとするだけで(注5) 簡単にコンパイルとインストールおよびインストールが正しく行なわれていることのチェックが完了します。
注3: もちろん商用のコンパイラを導入していれば、 cc のままでもコンパイルできる筈です。 注4: 初心者の方はCompanion CDをインストールした上で、
という設定をシェル初期化ファイルに記述してください。 もちろんCompanion CD中の開発ツールを使わずに自前でインストールしても構いません。 |
図1: conf-cc の修正 gcc -O2 This will be used to compile .c files. |
図2: conf-ld の修正 gcc -s This will be used to link .o files into an executable. |
# gunzip -c qmail-1.03.tar.gz | tar xf - # cd qmail-1.03 # vi conf-cc # vi conf-ld # make setup check ( cat warn-auto.sh; \ echo CC=\'`head -1 conf-cc`\'; \ echo LD=\'`head -1 conf-ld`\' \ (中略) nroff -man forgeries.7 > forgeries.0 ./install ./instcheck # ./config Your hostname is anduin. Your host's fully qualified name in DNS is anduin.home.local. (中略) Now qmail will refuse to accept SMTP messages except to those hosts. Make sure to change rcpthosts if you add hosts to locals or virtualdomains! |
実行例2: qmail のコンパイル
注5: インストール場所を変更する場合は、conf-qmailというファイルの先頭行の/var/qmailとなっている部分を適宜修正してください。 |
インストールが完了したら、引続きconfigというスクリプトを実行することで 設定ファイルのテンプレートを作成します。なおこの際にはDNSの設定が行な われていて、ホストのFQDN名が正しく解決できるようにしておく必要がありま す。DNSの設定方法に付いては前号のdjbdnsの記事や、本誌2001年1月号の特集 などを参考にしてください(注6)。
注6: configスクリプトの代わりに、「config-fast <ホストのFQDN名>」と入力すれば、DNSが動作していない場合や、現在のDNSの設定とは無関係に設定を行ないたい場合でも、設定ファイルのテンプレートを作成することができます。ただし、最終的にメールシステムを正しく動作させるにはDNSの設定が必要です。 |
引続き dot-forward と fastforward という関連プロダクトをインストールし ます。なおこれらのプロダクトの機能や設定については後述します。
dot-forwardのアーカイブはdot-forward-0.71.tar.gzという名称でqmailのサ イトより入手可能です。入手後は実行例3のようにしてインストールを行なっ てください。qmailと同様、makeの前にconf-cc と conf-ld を修正する必要が あります。
# gunzip -c dot-forward-0.71.tar.gz | tar xf - # cd dot-forward-0.71 # vi conf-cc ← cc を gcc に変更 # vi conf-ld ← cc を gcc に変更 # make setup check |
実行例3: dot-forwardのインストール
アーカイブは fastforward-0.51.tar.gz という名称でqmailのサイトより入手可 能です。入手後は実行例4のようにしてインストールを行なってください。 qmailと同様、makeの前にconf-cc と conf-ld を修正する必要があります。
# gunzip -c fastforward-0.51.tar.gz | tar xf - # cd fastforward-0.51 # vi conf-cc ← cc を gcc に変更 # vi conf-ld ← cc を gcc に変更 # make setup check |
実行例4: fastforward のインストール
最後に実行例5のようにして、幾つかのコマンドをsendmailが提供するものと 置き換えます。qmail自体はこれらのコマンドを利用することはありませんが、 多数のプログラムがsendmailコマンドの存在を前提として動作しているため、 実際にシステムを稼働させる上ではこのコマンドの置き換えは必須です。
# cd /usr/lib # mv sendmail sendmail.org # ln -s /var/qmail/bin/sendmail . |
実行例5: sendmail コマンドの置き換え
なお、何度か述べてきているように、オリジナルのsendmailコマンドはバック アップしておき、OSのパッチなどを適用する際には一時的に元に戻しておくよ うにしてください。
それでは動作確認のために自ホスト宛以外のメールは全てメールサーバに
転送するというメールクライアントとしての設定を行ないましょう。
まずは実行例6のようにしてメールシステムに最低限必要なエイリアスの設定
(注7)を行ないます。引続き実行例7のようにして、宛先が自分以外のメールを
送信するメールサーバを smtproutes ファイルで指定します。
# cd ~alias # touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 644 ~alias/.qmail* |
実行例6: 最低限の設定
注7: 後で解説しますが、これはpostmaster、mailer-daemon、root アカウントが各々メールが受け取れる設定を行なったことになります。 |
# echo :mail.home.local > /var/qmail/control/smtproutes |
実行例7:
上記ではメールサーバのホスト名をmail.home.localと指定しています。
なお、このファイルの書式は
ドメイン名:転送先[:転送ポート]
となっていて、特定ドメイン名宛のメールを特定ホストに転送すると
いった制御も可能な仕様になっています。ドメイン名が空白の場合は
「全て」のドメインを表しますので、実行例7では自ホストから外
部宛の全てのメールをmail.home.localに転送する指定になっている訳です。
メールサーバとして利用するのでなければ、これだけで設定は完了です。
最低限の設定ができたところで、qmailを起動してみましょう。 qmailの起動はメール送信(配送)部分と受信部分とで別個に行ないます。
まずは、送信部分を起動してみましょう。ここではsendmailが起動してい ても構いません。実行例8のように、/var/qmail/rcファイルを作成した上で、 ファイルを実行します(注8)。
# cp /var/qmail/boot/binm3+df /var/qmail/rc # csh -cf '/var/qmail/rc &' |
実行例8:
注8: /var/qmail/boot には、binm+df3 以外にも rc ファイル用のテンプレートが幾つかありますので、適宜利用してください。ただし本記事では、binm3+df を利用する前提で解説を行なっていきます。 |
起動に成功した場合は、/var/log/syslogファイルに図3のようなメッセージが 表示されます。このように「status: local 0/10 remote 0/20」というメッセー ジがあれば、起動に成功しています。
図3: May 13 04:11:32 anduin qmail: [ID 748625 mail.info] 989694692.069321 status: local 0/10 remote 0/20 |
念のため ps コマンドで qmail 関連のプロセスが起動していることを確認し ます。図4のように 5 つのプロセスが起動していれば成功です。
図4: qmail の起動確認 qmails 1768 1 0 17:24:59 pts/2 0:00 qmail-send |
ここで実行例9のようにして自ホスト上のアカウントにメールを送信すると、 図5のようなログが記録され、送信できることが確認できるはずです。同様に 自ホスト上の存在しないアカウントに対してメールを送信すると図6のように メールボックスが存在しないというエラーが出力されるはずです。
# echo to: monyo@anduin.home.local | /var/qmail/bin/qmail-inject |
実行例9:
図5: May 13 04:17:55 anduin qmail: [ID 748625 mail.info] 989695075.797727 starting delivery 1: msg 378826 to local monyo@anduin.home.local 図6: May 13 04:25:23 anduin qmail: [ID 748625 mail.info] 989695523.837197 delivery 6: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/ |
引続き、実行例10のように外部へのメール送信も確認しておきましょう。実行 例9が成功するにも関わらず、実行例10のパターンが失敗する場合はDNSの設定 に問題がありますので、2001年1月号や先月号などを参照して、設定を確認し てください。
% echo to: me@remote.host | /var/qmail/bin/qmail-inject ~~~~~~~~~~~~~~ ← 外部のメールアドレスを指定する ===== Jun 5 02:14:43 anduin qmail: [ID 748625 mail.info] 991674883.015961 delivery 17: success: 210.143.98.156_accepted_message./Remote_host_said: _250_CAA01116_Message_accepted_for_delivery/ |
実行例10: リモートへの送出テスト
smtpポートでメールを受信する qmail-smtpd は inetd や tcpserver などを経由して起動します。ここでは inetd を利用してみましょう。inetd.conf に図7のような行を追加した上で、
図7: smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd |
# kill -HUP `pgrep inetd` |
で変更を反映させます。なお可能であれば tcpserver 経由での起動が推奨されています。tcpserver をインストールしてあれば、実行例11のように tcpserverを実行することで qmail-smtpd の起動が可能です。
# tcpserver -u <qmailのuid> -g <nofilesのgid> 0 smtp /var/qmail/bin/qmail-smtpd & |
実行例11: tcpserver での qmail-smtpd 起動
なお sendmail が動作している場合は smtp ポートの利用が競合しますので、設定を行なう前には忘れずに
# /etc/init.d/sendmail stop |
と入力して、sendmailを停止させておいてください。なおqmailに完全移行する場合は、/etc/rc2.d/S88sendmail のファイル名をファイル名の先頭に「_」を追加するなどして、sendmailが自動起動しないように設定を変更しておいてください(注9)。
注9: このあたりのディレクトリの役割などに付いては2001年5月号のSolaris速習コース等を参照してください。 |
起動したら、メールが送信できることを確認しておきましょう。 別のホストから図7のようにしてメールを送信してみましょう。 うまく行けば、図7のように、ログが出力されるはずです。
図7: % Mail -s test root@anduin.home.local |
ここまで確認したら、一度 qmail を停止しておきましょう。 送信部分の停止は図8のように qmail-send プロセスをkillするだけです(注10)。 図9のようにログに「exiting」というメッセージが出力されたら停止完了です。
図8:
|
注10: もし送信中のメッセージが存在した場合は、それらを処理してから終了しますので、メッセージが損失することはありません。 |
図9: May 13 04:34:37 anduin qmail: [ID 748625 mail.info] 989696077.750503
status: exiting |
qmail-smtpdの方は、inetd.confのエントリを無効にしてから設定を反映させ るか、tcpserverのプロセスをkillしてください。
1/3 | 次へ -> |
---|