自前メールホスティングの行く先 (1)

最近まったく記事を書いていませんが、いろいろ考えてはいます。 年単位で考えているのがプライベートで運用しているメールサービスの今後です。 ブログのリハビリも兼ねて書き出してみました。

現在の構成はさくらのVPS上のMXが1台で、そのなかでPostfix + Dovecot (IMAP) + LDAPでバーチャルドメインを使用し複数ドメインを収容しています。 もともと家族用に提供していましたが、利用者は私を入れて2名に減少しています。 自宅サーバ時代から数えてすでに15年以上提供していますが、当時IMAPを使うには自前でホスティングするしか選択肢がなかったはずです。

WikipediaによるとGmailは2004年ベータ版開始(招待制)、そしてIMAP対応と独自ドメインが使えるサービス(Google Apps; 現在のG Suite)が2007年でした。

1年ほど前まではMXが2台あり、LDAPもレプリケーションしていましたが、 バックアップ側のOSが老朽化してしまったのを機に潔く1台構成にしました。 しかし、現在運用中のプライマリもDebianのWheezyなので来年の5月までとなっており、対応が必要となってきました。

仕事柄、まっさきに考えるのは自前を諦めてどこかのサービスへ移管する案

4つ上げたところで、もしここから選ぶならOffice 365になりそうですね。

このまま自前でいく案

金銭面ではMXが1台なのは困るのでもう1台増やしたい。そうすると、月1000円* 2 で年間24000円、上でいう4ユーザー分に相当しますね。 容量は100GBあるので実際には8ユーザー程度くらい?ユーザー数的には10名越えるくらいなら細々と自前でもいいのかもしれません。

技術的な面では、まずOSに依存してしまうとディストリビューションのライフサイクルに強制的に引っ張られてしまうので PostfixとDovecotがいくら枯れていても作業が発生してしまいます。また、その作業自体もさくらのVPSだと安全にというかゆっくり作業ができません (スナップショットを用意するとか、インスタンスを別に用意して最後にIPアドレスを付け替えるなど)。 プライベートだと片手間に検証しつつ………になるので別インスタンスでこつこつ作業して最後に切り替えたい。 ここはコンテナで解決できます。

もう1つ厄介なのが、複数MX構成時のバーチャルアカウントの同期です。LDAPのレプリケーションはもう御免です。2人しかいないのにオーバーキルです。 今はLDAP上のパスワードを変更する昔書いたRailsアプリを必要に応じて使用。

実のところこの問題が解決できずコンテナ化が進んでいません。要件はパスワードの変更が自分でできて、アカウントの同期が簡単にできることです。

案はいくつかあります。

1つ目はコンテナの内部で動かすのであればシステムアカウント (/etc/passwd) でも問題ないので passwdとshadowを生成するWeb I/Fとそれをバラまく仕組みを自分で用意する。Goで書いてAmazon API Gateway -> Lambda -> S3 SSE-KMSに書いて、コンテナ起動時に取得する、など。 ちょっとダルい。

2つ目はサーバレスSTNS。API Gateway + DynamoDBで構成するSTNSをpam経由で使う。過去に検証したところdovecotで使うとstnsがcgoエラーで死ぬので断念しました。 そのまま使うのは厳しいと判断。ただ、Go + cgoでpamモジュールを書くのはよいと感じました。 もし自分がやるならpamモジュール内部ではローカル上のhttpサーバにunix socket経由で問合せるに留めて、以後バックエンドはユーザースペース側に別途用意する設計にするかな…。 ただ、この場合でもWeb I/Fは必要。

3つ目はAmazon Cognit User PoolsまたはAmazon Cloud DirectoryをバックエンドにしたpamモジュールとそれらをいじくるWeb I/Fを書く。 技術的には面白いし本命感ありますが、ユーザー2名なのにそこまで感がハンパない。

4つ目は……自前LDAPの代わりにAzureADを使う。だったら黙ってOffice 365使うよね…

結局のところ、どの案も手を動かす必要がありますね。

それで

私は自前メールサーバの辞め時を探しているのかもしれません。 今のところ、Office 365が最有力候補ですね。自分でも驚いていますが…。 進捗があったらまた続きを。