メールアカウント仮想化のすすめ


「メールアカウントはOSのユーザアカウントを使うものだ」というのが一般的なメールサーバに関する認識ですが、メールアカウントを「仮想化」することにより安全性・機能性は飛躍的に向上します。

ユーザアカウントの仮想化でメールサーバのセキュリティレベルと負荷耐力を向上させる。

ホストアカウント流用 vs 仮想ユーザ

Unixはもともと複数のユーザがリモート端末からログインして利用するTSS(タイムシェアリングシステム)のOSでした。E-メールもログインユーザ間の通信手段として生まれたものです。この生い立ちによって、ログインアカウントをメールアカウントとして使うことは当然として行われてきました。

電子メールの利用がクライアントサーバ型主流となった今日でも、sendmail、PostfixなどのSMTPサーバソフトウェアを使用したメールサーバの大多数で、ログインアカウントが流用されています。一方、Postfixその他一部のSMTPサーバソフトウェアでは、OSの認証メカニズムに頼らず、認証ソースをDBやLDAPディレクトリとした仮想ユーザ方式が可能です。ログインアカウントの流用は、仮想ユーザ方式に比べて、いくつかの点で劣ります。

不正侵入対する耐性

ログインアカウントを流用したメールサーバには、すべてのメールアカウントに対応したログインアカウントが存在します。

したがって、これらのアカウントを標的とした不正侵入などの被害をこうむる可能性が高くなります。ログインIDがそのままメールURLのローカルパートとして使われる場合が多いため、攻撃者にとっては、SPAMメールにまぎれてメール送信の試行錯誤をするなどの方法でメールURLの存在を確認できれば、辞書攻撃などのブルートフォース攻撃より安全にログインIDを特定することができます。

また、ログインアカウントを流用したメールサーバの場合、着信したメールの宛先確認とローカル配信時には、メールURLに対応したユーザの存在確認やMailboxの所在を特定するためにOSの認証メカニズムが利用されます。不特定の第三者のメールを着信することによって認証メカニズムが間接的に動作するこの仕組みは、クラッキングの標的となる可能性を含んでいます。

公開サーバでは要注意なpam_ldap認証

LDAPディレクトリで認証の統合を図る簡単な手段として、pam_ldapを利用する例が広く紹介されています。

この方法はメールサーバのアカウント管理にも使用可能で、sendmailのようにOSのログインアカウントを流用するよう設計されたMTAソフトウェアでは、「pam_ldapによりログインアカウントをLDAP化し、それをメールアカウントの管理に流用する」というのがLDAP認証の常套手段です。

PAMによる認証処理は、単なるUIDとパスワードペアの照合以上の処理をともなうため、LDAPディレクトリを認証ソースとするpam_ldapによる認証は、passwdやshadowファイルを参照する通常の認証に比べ必然的にオーバヘッドが著しく大きく、低速です。

実際、sendmail + pam_ldapのサーバに段階的にメール配信負荷を増加させていく実験を行うと1000ユーザ未満程度の企業サイトの実トラフィックに相当する程度の負荷で、タイムアウトによる再送の発生が確認されます。

このようなpam_ldap認証のオーバヘッドは思わぬ角度でDoS攻撃に格好の標的を与えてしまう可能性があり、利用、運用に十分な注意が必要です。

実験的に「pam_ldap化」したLinuxホストのFTPサービスに集中的にブルートフォース攻撃をかけてみると、hosts.allow、hosts.denyなどに対するTCPラッパーによるファイル参照でファイルハンドルの利用数が上限に達し、結果、slapdデーモンが、dbファイルを開けなくり異常終了する場合があることが確認できました。passwdファイルによる認証ではこの現象は確認できませんので、pam_ldapによるホストログイン認証のオーバヘッドが、全体のバランスを崩したため、TCPラッパーによるファイルハンドルの消費の問題が顕在化したものと思われます。

結論

高速で安全なメールの処理を考えると、Postfixなどのように「完全な仮想ユーザ化」が可能なSMTPサーバに軍配があがります。sendmailにもvirtusertableによる仮想ユーザ機能はありますが、機能的には、「ある程度の正規表現記述が可能なエリアス」のようなもので、最終的にそれぞれのログインアカウントへのローカル配信をともなうことに変わりはありません。

Postfixの場合、LDAPによるメールアカウント情報の参照にはPostfixが提供するPAMに比べてはるかに単純で高速な処理系が使用され、各ユーザのメールボックスへの配信も、単一の専用代理ユーザが使用されるため、ホストのログインをLDAP認証とする必要がありません。加えて、sendmailが一つのファイルをメールボックスとして使用するのに対して、Postfixでは統一的な構造でMailDir形式が利用可能で、メールを個別のファイルとして取り扱うため、大規模なメールサイトでの負荷分散やメールのメンテナンス、バックアップの観点でも、保全性、機能性に優れています。実際、私たちは30000人弱のユーザアカウントを擁するメールサイトの運用にかかわり、大規模なワームメールの着信やメールボム攻撃も経験していますが、仮想ユーザほか大半のマップ可能な設定をLDAP参照としてPostfix + ldapサーバは、このような試練にも破綻することなく、SPAMメールを大量に溜めた不在者アカウントの整備などもスムーズに行っています。

この視点は、あくまでスマートホストに限った話であり、sendmailの有用性を否定するものではありません。最近の世代のsendmailの帯域制限などの細かなSPAM対策の記述機能は極めて優れ有用なものですし、LDAP参照によるメールルーティング機能は、大規模なメールサイトでの複数のメールホストに対するメールルーティングを行う際には有益です。sendmailをメールアカウントを持つ必要のないリレーホストやメールルータとして使用し、Postfixをスマートホストに使用するといった構成が適材適所の使い分けではないでしょうか?