jailの場合を書いていて、ふと思いついた。
この構成だと、SMTP AUTHを使ったメールの送信ができない。
昔なら、この構成でも問題はなかった。というのは、外からくるメールは 受け取るメールばかりだし、差し出すメールはネットワークの内側からに 限られていたから、そとから見えるメールサーバーは受け取り人のアドレス だけを見ていればよかった。
今、考えているのは、送信するメールも、メールサーバーの外側(インターネット側) からやってくる。入り口のメールサーバーで認証する以外に認証すべき場所はない。
一つの解決法は、CYRUS SASL2で行っているように、ユーザー名+レルム(ドメイン名)
の形で認証すること。
これなら、比較的枯れた方法だし、トラブルもそんなにはないだろう。
ただし、ユーザー認証のためのデータベースを一ヶ所に集める必要があるが、
「仕組みは集中的に、認証は階層的に」のポリシーと衝突するという難点がある。
これはjail固有の問題ではなくて、外部からの受け口が一つしかないという部分から 発生しているので、メールサーバーを一ヶ所に集中するという策を選ぶ場合は どういう構成をとるにしても付きまとってくる。
商用プロバイダで、独自ドメインのレンタルサーバーを扱っているところでも、 メールサーバーは別というケースもあるので、そういう方法に逃げるという手も あるけれど、aliasファイルくらいは、個々のドメインの管理者の管轄下に おきたい。 でないと、メールの受信をトリガーに何かを実行するということができなくなる。
メール関係のサービスを集中で行う場合
インターネットに直接つながっているのは、[GW]のみ。
[GW]でサービスの種類に従って
適宜内部のマシンにアクセスを振り分ける。
メールボックスも集中させる。
aliasも集中させるので、メールをプログラムの入力とするようなアプリケーション
(例えばメーリングリスト)などは、個々のhostの管理者にはできなくなる。
アカウント管理をどう分散させるかが課題となる
メーリングリストだけなら、別の枠組みを用意するなどの方法で 運用できないわけではない。 最悪でも sieveは使えるので、適当に WEBインターフェースを用意すればすむ話ではある。
メールだけなら、kerberosサーバーでなくて、単純にsasldbでもよさそう だけれど、他の login やらなんやらを考えると、将来的に必要になりそうなので とりあえず図の中にいれておきます。SASLもそうなんだけれど、wrapperを通して kerberosを利用するというのは、kerberosの良い部分を台無しにしている気がするので。
インターネットに直接つながっているのは、[GW]のみ。
[GW]でサービスの種類に従って
適宜内部のマシンにアクセスを振り分ける。
メールはそれぞれのhostに転送して、それぞれのhost上のsendmail(など)の処理に任せる。
POP/IMAPは、delegateやperditionなどのproxyで各hostに中継する。
忘れてた。メジャーなメールソフトウェアって、SMTP AUTH対応を謳っていても、
大抵は PLAIN認証か、LOGIN認証なのだった。
要再考。
(2005/07/09追加) SMTP AUTHを SASLのpamで受けて、pam_pop3を localhostに向けて、 それを perditionでproxyする... ってのでどうかな?
(2005/10/21追加)
pam_pop3+perditionでよさそう。
/etc/pam.d/smtpの内容hostnameはperditionが動いているホスト名。
auth required /usr/local/lib/pam_pop3.so hostname=gw.example.jp info pwprompt=Password: timeout=20 no_warn try_first_pass
perditionでproxyをする場合の設定メモ
make時のオプション
portsからインストールする場合は、GDBMを有効にする。
make WITH_GDBM=1/usr/local/etc/perdition/perdition.conf の修正部分
inetd_mode map_library_opt /usr/local/etc/perdition/popmap.gdbm.db strip_domain remote_login query_key \\u\\D\\d,\\D\\dドメイン名指定無しの場合にデフォールトサーバーと接続させるなら、
outgoing_server default.example.jpのような行も追加する。 popmap
@jail1.example.jp:jail1.example.jp @jail2.example.jp:jail2.example.jppopmapを修正した後は、 Makefile.popmap-dist を Makefile.popmapにコピーして、make を実行する。
pop3 stream tcp nowait root /usr/local/sbin/perdition -i -P POP3 など..
(まだ)