<POP before SMTPによるメールサーバーを立ち上げよう!>

〔更新履歴〕
 2000/12/13[Ver.1.01] Postfix Patchlevel 13対応、Red Hat 7.0Jのxinetd対応
 2001/03/06[Ver.1.02] Postfix 20010228バージョン対応、Turbo Linux 6.0J対応
 2001/03/20[Ver.1.03] Red Hat 7.0J完全対応
 2001/04/11[Ver.1.04] Postfix 20010228 patchlevel01に対応
 2001/04/27[Ver.1.05] sendmailの保存場所が/usr/libディレクトリに変更された仕様に対する不具合解決
 2001/05/02[Ver.1.06] Ver 1.0.5で含まれたバグフィックス、及び、portmapのインストール確認追加
 2001/05/08[Ver.1.07] Postfix 20010228 patchlevel02に対応
 2001/05/20[Ver.1.08] Red Hat 7.0でリブートしなければPostfixが有効とならない問題を解決
 2001/06/10[Ver.1.09] Postfix 20010228 patchlevel03に対応
 2001/07/22[Ver.1.10] Postfix 20010228 patchlevel03対応時に含まれたバグフィックス
 2001/07/23[Ver.1.11] aliases.dbを生成するように更新
 2001/08/23[Ver.1.12] Postfix 20010228 patchlevel04に対応
 2001/11/07[Ver.1.13] Postfix 20010228 patchlevel06に対応
 2001/11/24[Ver.1.14] Postfix 20010228 patchlevel08に対応
 2002/02/03[Ver.1.15] Postfix Version 1.1 Patchlevel 2に対応
 2002/02/05[Ver.1.16] Postfix Version 1.1 Patchlevel 3に対応
 2002/03/09[Ver.1.17] Postfix Version 1.1 Patchlevel 4に対応
 2002/03/27[Ver.1.18] Postfix Version 1.1 Patchlevel 6に対応
 2002/04/14[Ver.1.19] Postfix Version 1.1 Patchlevel 7に対応
 2002/05/11[Ver.1.20] Postfix Version 1.1 Patchlevel 8に対応、useraddの-Mオプションを削除、/etc/hosts.allowにpopa3d指定がなければ追加
 2002/04/14[Ver.1.21] Postfix Version 1.1 Patchlevel 11に対応

【おいでん講座:POP before SMTPとは何ぞや?】

 当サイトでは、POP before SMTPによってユーザ認証を強化したメールサーバを構築しています。利用しているソフトウェアは次の通りです。

SMTPサーバー:Postfix
 MTA(Message Transfer Agent)はsendmailでなく、Postfixを利用しています。理由は、sendmailよりセキュリティに強い、高速である、また、設定とメンテナンスが容易である点です。特にsendmailのバージョンが上がる度に覚えないといけないsendmail.cf(設定ファイル)中の呪文?にはホトホト嫌気が差していました。他のMTAとしては、Qmail,DMail,Zmailer...等いろいろありますが、sendmailとの互換性が高く、実績があるのはPostfixだと思います。

POPサーバー:Solid POP3(APOP対応)
 セキュリティを重視したPOPA3DにAPOP等の機能が追加されています。

【おいでん講座:APOPとは何ぞや?】

 また、POP before SMTP対応とするためにDRACを使用しており、POP before SMTPを有効にするに、以下の修正が必要です。

・Postfixはコンフィグレーションであるmain.cfのmynetworksにDRACで利用するデータベースをhash指定で追加します。
・Solid POP3では、Solid POP3内でユーザ認証をパスした後に、認証されたユーザのIPアドレスをDRACが管理するデータベースに追加する必要があるため、ソースファイルにDRACルーチンをコールする処理を追加します。
・DRACのコンパイルは各種UNIX系OSに対応しているため、MakefileをLinux向けに書き換える必要があります。
・その他、諸々。。。

 このメール環境を構築するには修正や設定が結構面倒なので、一発構築スクリプトを作成してみました。手順は以下の通りです。動作確認はRed Hat 6.2/7.0/7.010, Vine2.1.5と Turbo Linux 6.0で行ないました。この実行によりsendmail環境を置換しますが、sendmail関連の実行モジュールは自動的にバックアップしますので、後でsendmail環境に戻すことは可能です。

 尚、ダウンロードやインストールスクリプトの起動は同一の一般ユーザで実施して下さい。rootでの起動が必要な箇所のみ、インストールスクリプトがrootパスワードを問い合わせます。

1.モジュールのダウンロード

 以下の4つのモジュールを一時的に作成した同一ディレクトリにダウンロードします。バージョンは以下で明記しているものと同じものをダウンロードしないとパッチが正常に適応できない為、最初のバージョンチェック時にエラーとなります。
 各バージョンが上がりインストール出来ない場合は掲示板にお知らせ下さい。一発構築スクリプトを更新します。

【Postfix】  http://www.postfix.org/ftp-sites.html
 "Postfix Version 1.1 Patchlevel 11 Source code(postfix-1.1.11.tar.gz)"をダウンロードします。
 ※ Postfixの日本語解説は、ikeさんのPostfix のぺーじが大変参考になります。
【Solid POP3】  http://solidpop3d.pld.org.pl
 "solid-pop3d-0.15.tar.gz"をダウンロードします。
【DRAC】  http://mail.cc.umanitoba.ca/drac/
 "Obtaining the Source"の"compressed tar file"から最新版のVersion 1.11をダウンロードします。
【インストールスクリプト】
 当サイトのmkmailenv.sh.gzをダウンロードします。

2.インストールスクリプトの起動

2.1 インストールスクリプトのチェック
 Postfix、Solid POP3、DRACのチェックサムとバージョンはインストールスクリプト内でチェックしますが、インストールスクリプトであるmkmailenv.sh.gzは必ず、以下のコマンドでチェックサムの値が一致しているかを確認して下さい。このスクリプトが途中、rootパスワードを問い合わせる仕様になっているため、利用する上で充分注意が必要です。悪意あるユーザにこのモジュールが書き換えられていた場合には、パスワードの漏洩、バックドアの作成、ファイルシステムの破壊等々、何でもあり状態ですので。。。

 gto$ cksum ./mkmailenv.sh.gz
 3751552886 4703 ./mkmailenv.sh.gz ← 必ずこの表示の数値が一致していることを確認して下さい。

2.2 インストールスクリプトの解凍

 gto$ gzip -d ./mkmailenv.sh.gz

2.3 インストールスクリプトの起動
 起動後の問い合わせは以下の通りであり、rootのパスワードはイニシャルインストールでは2回問い合わせを行ないますので、間違わないように入力して下さい。また、グローバルIPアドレスとホスト名を入力しますが、グローバルIPアドレスは、インターリンクで割り当てられた固定のグローバルIPアドレス、グローバルのホスト名はドメイン名のCNAMEで割り当てられたホスト名を指定して下さい。

 gto$ sh ./mkmailenv.sh
 INFO: /usr/local/mailsrcが存在しません。
 /usr/local/mailsrcを作成しますか? (Y|n) : y
 rootパスワードを入力して下さい。: ********
 INFO: /usr/local/mailsrcを作成しました。ディレクトリのオーナーはhoshinaです。
 INFO: spop3dとpostfixのユーザを作成しました。
 グローバルIPアドレスを入力して下さい。: 210.199.8.73
 グローバルのホスト名を入力して下さい。: gto.oiden.net
  ・
  ・ 当サイトサーバーのPentium133MHzマシンで大体 7分弱要しました。(PentiumV733MHzではナント55秒)
  ・
 rootパスワードを入力して下さい。: ********
  ・
  ・ 20秒程度 (PentiumV733では数秒)
  ・
 全てのインストールが完了しました。
 gto$

3.インストール後のテスト

3.1 POPサーバーの動作確認
 pop-3のポートを使ってログインできることを確認し、またログイン後にDRACのデータベースである/etc/mail/dracd.dbにログイン元のIPアドレスが登録されるかを確認します。

 MR2# telnet localhost pop3 ← まず自分自身で確認
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 +OK Solid POP3 server ready <1179.975765626@mr2>
 user hoshina
 +OK username accepted
 pass ********
 +OK authentication successful
 quit
 +OK session ended
 Connection closed by foreign host.
 MR2# strings /etc/mail/dracd.db
 975767482
 127.0.0.1 ← 追加されることを確認

 MR2# telnet gto ← リモートホストへ一旦ログイン
 Trying 192.168.76.2...
 Connected to gto.
 Escape character is '^]'.

 Red Hat Linux release 6.2 (Zoot)
 Kernel 2.2.16 on an i586
 login: hoshina
 Password: ********
 Last login: Sat Dec  2 22:52:09 from mr2
 gto$ telnet mr2.oiden.net pop3 ← リモートホストから確認(WindowsPCからでもOK)
 Trying 192.168.76.3...
 Connected to mr2.
 Escape character is '^]'.
 +OK Solid POP3 server ready <1187.975765919@mr2>
 user hoshina
 +OK username accepted
 pass ********
 +OK authentication successful
 quit
 +OK session ended
 Connection closed by foreign host.
 gto$ exit
 Connection closed by foreign host.
 MR2# strings dracd.db
 975767746
 192.168.76.2 ← 追加されることを確認
 975767482
 127.0.0.1
 MR2#
3.2 SMTPサーバーの動作確認
 MR2# telnet localhost smtp
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 gto.oiden.net ESMTP Postfix
 helo localhost
 250 gto.oiden.net
 mail from: hoshina@localhost
 250 Ok
 rcpt to: hoshina@localhost
 250 Ok
 data
 354 End data with .
 test!
 .
 250 Ok: queued as 15D232BAB2
 quit
 221 Bye
 Connection closed by foreign host.
 MR2#

【備考】shutdown時にsendmailの終了ステータスが[FAILED]になりますが無視して下さい。

【旧バージョン置き場:Ver1.19】
 postfix-1.1.8.tar.gz
 solid-pop3d-0.15.tar.gz
 drac.tar.Z
 mkmailenv.sh.gz