
第2回 POP/IMAPサーバの構築と不正中継対策
鶴長 鎮一
2001/10/5
POPの導入とPOP Before SMTPによる不正中継対策
■POP3の導入
まず、POP3を導入してみましょう。
POP3デーモン自体はすでに前回のqmailのインストールと同時にインストールされています。/var/qmail/bin/qmail-pop3dがそれに当たります。しかし、このデーモン自体には認証を行う機能がないため、認証機能を補う必要があります。平文パスワードによる最も簡単な認証確認の手段としては、D. J. Bernstein氏がqmailとともに提供しているcheckpasswordがあります。
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
をダウンロードし、ソースを展開します。
$ tar xvfz checkpassword-0.90.tar.gz |
デフォルトのインストール先は、/binになります。インストール先を/usr/local/binなどに変更する場合は、conf-homeファイルに
/usr/local |
と書き込んでおきます(注)。
| 注:conf-homeファイルに記述されたディレクトリ+/binがインストール先になります。 |
続いてコンパイルとインストールを行います。
$ make |
これで/bin/checkpasswordがインストールされました。前回のqmailのインストール同様、起動はtcpserverを使用します。qmailスクリプトのstartブロックに以下の行を追加します。
start) |
| 注:[サーバのFQDN]:サーバ名をドメイン名部分の省略をせずに記述したもの。例:mail.example.jp |
/etc/servicesにpop3の記述がない場合は、
tcpserver
-v 0 110 /var/qmail............ |
のように直接使用するリスニングポート110番をtcpserverの引数に指定してください。110番以外を使用したい場合も同様に指定します。続いて後半のパイプ処理(| /var/qmail/bin/splogger pop3d 3)で/var/log/messagesにログを出力できるため、今後のサーバ運用で活用できます。
ではPOP3/IMAP4導入の前にで紹介した手順に従ってqmailを再起動し、POP3の動作確認を行ってください。
■APOPの導入
続いて、APOPを導入してみましょう。APOP自体はPOP3のログイン認証を行うコマンドにすぎません。ここでもPOP3同様qmail-pop3dを使用しますが、認証機能を付加するにはAPOPに対応しているものを選択する必要があります。ここでは、OHIRA, Shinya氏が提供しているcheckpwを使用します。
先ほどのcheckpasswordでは/etc/shadowに登録されているパスワードを基に認証(PAM)を行いましたが、checkpwではパスワードを管理するために外部ファイルを用いているのがポイントです。こうすることで、仮にPOPパスワードが漏れてしまってもシステムのパスワードまで盗まれるのを防げるため、ほかのサービスへの被害を最小限に抑えられます。
また、checkpwの場合、ユーザーのPOPパスワードはユーザーが各自で管理できるように、ユーザーのMaildir/下にファイルを保存します。パスワード変更のたびにスーパーユーザーの手を煩わせる必要がなくなります。その代わり、telnetでサーバにログインするなど、ユーザーに要求するスキルも上がるため、現実的にはWebサービスとCGIを使ってパスワードの変更を行えるようにするといった手段が必要となる場合もあります。
では作業にかかりましょう。
http://www.geocities.co.jp/SiliconValley/4777/qmail/checkpw/
からcheckpw-0.80.tar.gzをダウンロードして展開します。
$ tar xvfz checkpw-0.80.tar.gz |
checkpassword同様に、インストール先を変更するにはconf-homeを編集します。デフォルトでは/binがインストール先になります。ここではそのまま使用します。ほかにもさまざまなconf-*ファイルが用意されています。
- conf-home
インストール先。実際にはbinを付加したものになります。/usr/localを指定した場合は/usr/local/binにインストールされます。デフォルトは「/」。
- conf-qmail
qmailがインストールされているディレクトリ。デフォルトは「/var/qmail」。
- conf-maildir
Maildirディレクトリ名。デフォルトは「Maildir」。
- conf-password
平文パスワードを収めたファイル名。デフォルトはユーザーごとの「~/Maildir/.password」。
続いてcheckpwのコンパイルとインストールを行います。
$ make |
これで/bin/checkapoppw、/bin/checkpw、/bin/selectcheckpwがインストールされました。先ほどのPOP導入時に変更したqmailスクリプト中の/bin/checkpasswordを/bin/checkapoppwに置き換えます。
start) |
次に各ユーザーにパスワードファイルを用意します。
$ echo 'パスワード' > ~/Maildir/.password |
必ずファイルパーミッションを変更しておいてください。これが正しく設定されていないと、パスワードが合っていてもAPOP認証に失敗します。
先ほどのインストールで、一般的なPOP3を行う/bin/checkpwもインストールされました。checkpasswordと大きく違うのは、/etc/shadowを使わずに外部ファイルによるパスワード管理が行えるという点です。
qmail起動スクリプトを修正します。
start) |
ところで、APOPとPOP3を同時に使うことはできないのでしょうか? クライアント全員にAPOPを強制できる環境であればAPOPのみでサーバを構築することも可能ですが、それでもユーザー全員がAPOPに対応したメールソフト(MUA)を使用しているとは限りません。やはりPOP3とAPOP両方のサービスを用意する必要があります。POP3とAPOPをそれぞれ違うサービスポートで立ち上げれば、簡単にそれを実現できます。
start) |
qmailスクリプトを上記のようにすることで、APOPを使用するユーザーには1100番、POP3を使用する場合には従来どおり110番でメールの受信を行うようにできます。ただし、ユーザー全員に周知させる必要があり、あまり優れた設計とはいえません。そこでqmailにパッチを当て、同じポートで両方のサービスを提供できるようにします。前回のqmailのインストールに戻り、qmail-date-localtime.patchを当てたように、checkpwに含まれるqmail-popup-auth.patchを当てます。
qmail-1.03のソースを展開したディレクトリでもう一度コンパイル・インストールを行います。
$ patch -p1 < checkpw-0.80を展開したディレクトリ/qmail-popup-auth.patch |
次に、qmailスクリプト中でcheckpwやcheckapoppwdを記述していた個所をselectcheckpwに変更します。selectcheckpwスクリプトを使えば、クライアントの要求に応じてcheckpwとcheckapoppwを切り替えて起動できます。
start) |
APOP認証に対応しているメールソフトを使用し、両方の認証に対応していることを確認してみましょう。
■POP Before SMTPの導入
前回、tcpserverは動作に必要なホスト名やIPアドレスなどの情報を環境変数から取り出し、接続の許可を行うと説明しました。SMTP接続許可は、使用するIPブロックまたはドメインを環境変数RELAYCLIENTに登録することで行います。
では、出張など出先でメールを送信したい場合はどうすればいいのでしょうか。あらかじめ使用するIPが分かっていれば登録しておくこともできますが、プロバイダから与えられるIPアドレスは接続ごとに変わります。かといって、Open RelayにしておけばSPAMメールの踏み台に利用されてしまいます。
送信の前に何らかの手段を使ってクライアントのIPアドレスをサーバに通知すれば、局所的なRelayの許可を行って送信を可能にできるはずです。都合のいいことに、メールの受信にはユーザーの認証が行われ、適切なユーザーかどうかを判断できます。同時にクライアントに割り当てられているIPアドレスをサーバに通知することも可能です。さらに都合がいいことに、環境変数を収めるcdbデータベースの更新にtcpserverの再起動は必要ありません。これで、既存のサービスに大きな変更を施すことなくPOP Before SMTPが導入できます。
さまざまなRelayコントローラがありますが、ここでは導入が比較的簡単なrelay-ctrlを使用します。http://untroubled.org/relay-ctrl/からrelay-ctrl-2.5.tar.gzをダウンロードして展開します。
$ tar xvfz .relay-ctrl-2.5.tar.gz |
インストール先を変更する場合はdefines.hを編集します。ここではデフォルトのままにし、引き続きmakeとインストールを行います。
$ make |
続いて設定ファイルを作成します。
# mkdir /etc/relay-ctrl |
* ダブルクオートを使用している点に注意 |
/etc/relay-ctrl下に生成されたファイルには、次のような意味があります。
- expiry
RealyをオープンにしたIPアドレスを記録したファイルの寿命。デフォルトは900秒。
- rule
POPで接続してきたIPアドレスに付加するルール。当然Relayを許可しなくてはいけないので「:allow,RELAYCLIENT=''」となります。
- rulesdir
cdbファイルとその基になるテキストファイルが収められているディレクトリ。デフォルトは「/etc/tcpcontrol」。
- smtpcdb
更新するcdbファイル名。デフォルトは「smtp.cdb」。
- smtprules
cdbの基になるテキストファイル。前回tcpserverのインストール時に使用したtcp.smtpに当たります。デフォルトは「smtp.rules」。
- spooldir
Relayを許可したIPアドレスを記録しておくスプール。デフォルトは「/var/spool/relay-ctrl」。
- tcprules
tcprulesコマンドのパス。デフォルトは「/usr/bin/tcprules」。
次に、spoolにたまったIPアドレスの記録を定期的に削除する指示をcrontabに追加します。
# crontab -e |
として、下記の行を追加します。
* * * * * /usr/sbin/relay-ctrl-age |
これで、記録を整理するプログラムを毎分起動するようになります。このプログラムにより、expiryで指定された保存期間を過ぎた記録を消去できます。
次にqmailスクリプトを変更します。
start) |
| 注:[認証プログラム]には、ここで紹介した /bin/checkpassword /bin/checkpw /bin/checkapoppw /bin/selectcheckpw を用途によって指定します。 |
また、ここでは/usr/sbin/relay-ctrl-allowがroot権限で起動されていますが、さらにセキュリティを高めるため、専用のユーザーを使用することをお勧めします。その場合は下記の作業を行います。
/var/qmail/relay-ctrlをホームディレクトリに持つユーザーrelay-ctrlを作成し、ホームディレクトリのオーナーを変更します。
# adduser -d /var/qmail/relay-ctrl -s
/bin/false relay-ctrl |
relay-ctrl-allowコマンドの所有者を変更し、もう一度setuidします。
# chown relay-ctrl /usr/sbin/relay-ctrl-allow |
cdbファイルもユーザーrelay-ctrlによって上書きできる必要があるため、/etc/tcp.cdbから書き込み可能な/var/qmail/relay-ctrl/tcp.smtp.cdbに変更します。
# cp /etc/tcp.smtp /var/qmail/relay-ctrl/. |
cdbファイルのパスが変更になるため、qmail-smtpを起動するtcpserverの起動方法も変更する必要があります。
start) |
qmailを再起動し動作の確認を行いましょう。受信を行う前に送信を行ってみたり、受信・送信を順番に行うなど、POP Before SMTPの挙動を確認してみましょう。
|
2/3
|
|
||||||
|
||||||
| 連載 実用qmailサーバ運用・管理術 |
| Linux Squareフォーラム サーバ構築・運用関連記事 |
| 連載:Heartbeatでかんたんクラスタリング(連載中) オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します |
|
| 特集:Apache 2.2でWebサイトをパフォーマンスアップ! 最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する |
|
| 連載:実用 Apache 2.0運用・管理術(全8回) 本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える |
|
| 連載:実用
BIND 9で作るDNSサーバ(全15回) 本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく |
|
| 連載:実用qmailサーバ運用・管理術(全14回) 本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで |
|
| 特集:Samba
3.0の全貌 改訂版 Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です - OSに付属するシェルスクリプトを読んで技術を盗む (2012/1/27)
シェルスクリプトマスターに近づくには、他人から技術を盗まなければならない。OS付属のスクリプトから技術を盗もう
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
