メールサーバの2要素認証について調べていたら自身で運用しているメールサーバでも 少し頑張れば動かせそうだったので試してみました。
現在のメールサーバの構成
freenginxのmail_moduleによるMail Proxyを設定しており、そこでTLSを終端している。
認証には自前のphpスクリプトを介してLDAP認証をし、LDAPからProxy先のdovecotの情報を得ている。 dovecotでは認証していない。
また、メールの送信については、Proxy先がpostfixになりxclientを使用して同じく認証はしていない。
2要素認証設定後のメールサーバの構成
2要素認証のためにAutheliaを導入し、認可やトークン発行周りの処理を一任した。図には書いてないがバックエンドはMySQLを選択。
自前のphpスクリプトは10年前に作成したもの。今回geminiにXOAUTH2対応とついでにリファクタリングをしてもらった。
なお、freenginxではなくnginxのmail_moduleはxoauth2には対応していない
KeycloakではなくAutheliaを選択したのは、サーバのメモリ節約。Javaを動かしたくなかった。
ログイン画面遷移
Roundcubeのログイン画面
Autheliaのログイン画面
Autheliaの2要素認証画面(初回)
Autheliaの2要素認証画面

メモ
- Roundcube
- この構成ではpasswordプラグインでのパスワード変更は不可
- managesieveプラグインも認証できず動作しないが、少しソースを修正することで動作を確認した
- 試してみて
- 自分の使い方で実用性があるかというと微妙だが、今まで何となく使用する側だった2要素認証の仕組みを理解できたのはよかった。
- ClientにThunderbirdが利用できないかと試行錯誤をしていたが、任意のOAuth2クライアントに対応していないことがわかり諦めた。