動的なメール中継認証機能 日本語版 / English |
DRAC について、詳細な情報は以下のトピックをご覧下さい。
迷惑な電子メール(SPAM)が氾濫しているのは、電子メールそのものが匿名性を持って送信することが出来るからです。これは歴史的に SMTP というインターネット標準の電子メール送信プロトコルが、ユーザ認証のための仕組みを実装してこなかったからです。
かつて電子メールを送るためにはマルチユーザのホストにユーザ名とパスワードによる認証を経ないと使うことができませんでした。そのようなネットワーク環境で SMTP が開発されたのです。メールアドレスというものは固定されたものであり、メール中のヘッダ情報を辿ることで正しいメールかどうかの判別が出来たのです。SMTP は純粋にメールの送信を行う手段としてのみ利用されていたのです。
ところがインターネットへの対応が事態を変えました。シングル・ユーザの利用するホストから送信できるメールソフトの登場です。メールソフトは POP (最近は IMAP も)を経由してメールを受信し、SMTP をメール送信のために利用しはじめました。POP と IMAP はユーザ名とパスワードによる認証を必要とします。ですが、SMTP にはそのような認証を行う仕組みがありませんでした。そのためメールのヘッダの中に適切ではないメールアドレスがあっても SMTP はメールを送信させたのです。SMTP サーバは、サーバの利用者が送信するために SMTP を使うのか、あるいは外部のサーバから SMTP によってメールが配達されてくるのか、区別をつけることができません。迷惑メール送信者(スパマー)は偽造したメールのヘッダ情報で自由にメール送信ができるようになってしまいました。SMTP サーバの管理者が不正な利用に対処する手段は殆どありませんでした。
私はネットの古き良き時代の幸せなメール環境に戻れるかどうかは分かりません。ですが、メールサーバがクライアントからの接続とサーバとの接続を区別できるようにすることは必要な事でしょう。これはメールがクライアント・サーバ間でやりとりされるプロトコルとサーバ間での通信は異なったプロトコルとみなす事です。クライアント・サーバ通信プロトコルではユーザ認証とメールアドレスを関連づける事が必要で、クライアントがサーバのふりをするのも防ぐ必要があります。サーバ間通信のプロトコルでも何らかの対策が必要でしょう。Sendmail 8.10 の公開ベータ版では SMTP 認証を実現し、クライアントからのメールの送信にはサブミッション・ポート(TCP 587 番ポート)利用してサーバ間との通信を区別することが出来るようになりました。クライアント側(メールソフト)での対応が広まってゆくにつれ、迷惑メール(SPAM)の不正中継という問題も解決されてゆくでしょう。とはいえ、新しい方式が普及していくまでには、何とかして迷惑メールの不正中継を防ぐように対策を講じてゆく必要があるでしょう。
最近のバージョンの sendmail では初期状態でローカル・ユーザからであればローカル(サーバ内)だけでなく外部へも自由に送ることが出来るようになっています。これはスパマー(SPAMMER)がメールサーバを不正中継することを阻止する働きがあります。ところが、ユーザによっては外部のプロバイダやインターネット環境から接続する事も考えられます。そのままでは(正しいメール送信にかかわらず)外部からの不正な利用とみなされてしまい、メールが送信できなくなってしまいます。利用者は POP や IMAP によってメールを読むことは出来ます。ですが、SMTP サーバからはサーバにはないメールアドレスへの送信は拒否されてしまうのです。
どうしてこのような事になるかといえば、SMTP サーバは利用者のホスト名か IP アドレスしか知ることが出来ないからです。それだけの情報では、正規の利用かスパムによる利用か判断を行うことが出来ません。そこで、利用者がホスト名や IP アドレスを変更する度、利用者に対して都度メール送信(中継)の許可を与えなくてはいけません。もしそれが面倒なら、sendmail 標準の中継拒否機能を無効にするか、利用者に対して各々のプロバイダの SMTP サーバを使用するように案内をしなくてはいけないでしょう。
環境が不特定に変わるユーザに対して中継を許可するには POP-before-SMTP(ポップ・ビフォーア・エスエムティーピー)という方法があります。メール受信サーバ(POP)では利用者の IP アドレスを把握しています。これらの IP アドレスをリスト化して sendmail が中継を許可できるような仕組みを作ります。既存の手法としては POP サーバのログファイルを読むというものがあります*1。POP サーバの種類によってはログを認識できるように調整が必要となる場合があります。ログファイルは perl といったスクリプトにより定期的に監視され、メールが受信されると makemap という手法で送信許可リストを作ります。また、だいたい 30 分経過すると送信許可リストから削除する機能も持っています。
この機能の役割は、メールを利用者が受信することで、その利用者の IP アドレスに対して 30 分間の送信許可(SMTP 中継の許可)を与えるものです。一般的にメールの利用者はメールを送信前に新着メールが届いていないかも調べるでしょうから、利用者の目に見えないところで機能してくれます。メールソフトで5分おきに自動受信する設定をされていれば、常にメールの送信許可が出ている事になります。若干、メールを送信してから受信するくせのある利用者もいると思います。そのような利用者は POP サーバからメールを受信しないと送信できない事に気がつくでしょう。注意しなくてはいけないのは、利用者の IP アドレスによって送信が許可されるという事です。多数のユーザで1つの IP アドレスを共有していない場合には、予期せぬ利用者にもメール送信の許可を与える恐れもありますので。とはいえ、現実的には1ユーザが1つの IP アドレスを利用するのが普通ですので、あまり問題にはならないと思います。
DRAC は強固な POP-before-SMTP 機構です。C 言語で書かれたプログラムは1つの独立したデーモンとして稼働します。状況に応じ、sendmail に対して送信の許可リストへの追加削除を行います。POP や IMAP サーバはユーザの認証を終えると RPC コール*2を用いて dracd デーモンへ許可の追加を依頼します。許可リストへの追加を行うには、RPC コールへ追加することを必要とします。また、DRAC デーモンは時間が経過すると適切に許可リストから削除します。RPC はネットワーク間で働きますので、POP サーバと SMTP サーバが異なったホスト上で稼働していも DRAC を用いることができます。その場合には、設定ファイルによって、どのホストが DRAC デーモンへリクエストを送ることが出来るか明示する必要があります。
現在の DRAC がリリースされているバージョンは 1.12 です。ソース・コードは tar 形式で圧縮されたファイルとして入手可能です。
DRAC は以下のソフトウェアとオペレーティング・システム(OS)を必要とします:
DRAC は RPC を用いたネットワーク上で双方向にコミュニケーションを行うクライアント・サーバ・システムです。POP か IMAP サーバがクライアントとなり、DRAC デーモンがサーバとなります。DRAC デーモンは SMTP サーバと同じホスト内で動作させなくてはいけません。sendmail の送信許可リストがサーバ内へローカルに書き出されるものだからです。POP/IMAP サーバと SMTP サーバは別々に稼働させることもできます。
複数の POP/IMAP サーバから1つの DRAC デーモンに対して RPC リクエストを送ることも可能です。DRAC は最終的に複数の POP/IMAP サーバからの RPC を処理できるようになりました。DRAC 自身、メールサーバ側の設定を複雑にさせることはなく、複数の POP/IMAP サーバ、そして多用な SMTP サーバに対応することから、問題解決の手助けになるでしょう。
もし異なった OS 上で DRAC を導入したり、また異なった MTA や POP, IMAP サーバで動作できるなら、どうか詳細をマニトバ大学*10の Gary Miles 宛に送って下さい。
マニトバ大学*11のGary Mills 宛に送って下さい。
マニトバ大学での他の開発プロジェクトに関してはソースホームページをご覧下さい。