mailcow でメールサーバー構築
メールの運用はめんどくさい。それ以前にインストールがめんどくさい。
スパム対策や、DKIMだとか、MXとMTAだとかあれこれ考える必要がある。考えるのをやめて、GoogleApps(Gsuite/Google workspace)だとかoffice365を使えばいいんだろう。しかし、すべてが解決するというわけでもない。メアドの追加だとか、ライセンス数を考慮したらしんどい(エイリアスで無料で足せるんだけど)、キャッチオールアドレスが欲しくなったり
期間限定なプロジェクトで、アルバイト雇用など一気に人が増えるとか。フェスティバルやイベントのために問い合わせフォームとメアドが必要だったりとか。たかだが数ヶ月のためにメアドとアカウントを大量にサービス側で追加するのもコスト的に負荷がかかる。そういうなにかメアドを管理できる方法を模索した。
mailcow パッケージがオールインワン
mailcow というパッケージをみつけた。 https://mailcow.email/
これをDockerで動かすとメールのあれこれが解決しそう。
WEBメールとカレンダーとアドレス帳機能があるSogo WEB を使える。
OpenMail プロジェクトも mailcow をベースに使っている。
スパム対策
最初から、設定済みでソフトウェアが導入されているので、とても楽。 設定を増やすだけでいいのだから。必要なclamdとRspamdとか最初から入ってる。これが嬉しい。
インストール
インストールは、とてもかんたんだった。
docker と docker-composeが動く環境さえあればいい。
準備
ssh server-docker-host cd /var/www/virtualhost/maicow.example.com git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerized ./generate_config.sh vim mailcow.conf
設定変更
設定変更は次の箇所だけにした
MAILCOW_HOSTNAME=mail.example.com HTTP_PORT=11334 HTTPS_PORT=11335 SMTP_PORT=2525 TZ=Asia/Tokyo
MXレコード設定
dns 設定 で MXレコードとAレコード(今回はcname)を作った。
## mail.example.com cname gw.example.com mail.example.com mx gw.example.com
リバプロ設定
HTTPSの443アクセスで、nginx があるので、それをdockerで起動したmailcow へ向け、リバプロする。
server { listen 443 http2 ssl; server_name mail.exammple.com; if ($scheme != "https") { return 301 https://$host$request_uri; } ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location ~ { proxy_set_header Host $host; ## 略 proxy_pass http://docker-host.local:11334; } }
起動と終了
docker-composeで解決。
cd $installed_path docker-compose up -d docker-compose restart
docker-compose でshutdown rm しても 設定が ./data
に残るので、永続化も問題ない。ついてもportainer を入れていおいてもいいくらいだ。
OP25B をどうするのか
メール送信を行うとき、配送先のメールサーバーの25番に接続するが、一般のプロバイダ網内から外向けの25番は接続ができない。
通常個人ユーザーであれば、外向きにメール送信をする際のサブミッションポートを使えば事足りるが。メールサーバー間の配送は相手サーバー25番へ接続が不可欠である。
つまり Postfixから相手への配送は宛先ポート25番で転送するが、OP25Bでその接続(宛先ポート25)は使えない。ということで、代替手段が必要になる。
代替手段といっても、外部で25番が接続許可されている、制限されないIPアドレスのサーバーを確保するのが対策。わかりやすく言えばFromを書き換え許可されているSMTPサーバーが確保できるかが重要。
外部25へ転送方法さえ確保できれば、サーバーへの接続方法はなんでもいい。VPN接続でもよし、SSHポート転送でもよし、SSHのパイプ経由すら使える。一般的ならSubmissionポートへ接続だろう。
mailcow の管理画面からトランスポートを設定できる。
OP25Bへの対応が必要な場合、トランスポートを設定して、外部のリレーサーバーを指定する。mailcow のWEB画面から設定できるのが強い。
起動後の初期パスワード
初期パスワードは admin / moohoo
でログインできるので変えておく。
SOGoが嬉しい
SOGoでWEBメールのUIがあるので、最低限WEBからメールを使うことができる。IMAP・POP3・SMTP(submissuon)のポートや総当り対策を考えなくていいのは本当に嬉しい。
カレンダー
共有できるWEBカレンダーがあってちょっと驚く。
アドレス帳
メール運用に不可欠なアドレス帳もWEB機能があり、さらにドメイン内ユーザーでの共有アドレス帳も使える。いいじゃん
スパム対策
Rsamd があるのでこれを使っていく。フィルタの書き方や clamcv の導入に時間を取られないので嬉しい。
キューの一覧
postfix にたまったキューのチェックや削除も mailcow のWEB画面から行える。
メアドの追加
メールアドレスとメールボックスの追加は、mailcown のUIから行える。
mailcow導入で考えることが減る。
とりあえず、MXレコードとポート転送さえしておけば、辛うじてつかえるメール環境が手に入る。がちでPostfixから設定したらノウハウがまとまるまで1年経っても終わらない仕事になる。docker-compose でWEBメールボックス一式が手に入るのは強い。
運用してくとスパムとの戦いユーザー数が多くなる長期間の運用などは、運用担当者を割当てノウハウを確保してくのが大変だろうけど、一通り行えることはわかる。
VPSのメモリと容量が余っていればとりあえず入れておけば、クラウド追加課金を考えずにメアドを増やせて便利だと思う。
XMPP や unbound は流石に要らないと思うけど・・
その他のWEBメール環境
PostfixとDovecotでSMTPとIMAPさえ動かせてしまえば、あとは好きにできる。
nextcloud-mail / roundcube /Cypht のような、他のWEBメール環境も使える。
WEBメール環境を確保するには、IMAP環境さえあればなんとかなる。しかし、自前のIMAP構築のためにPostfix+Dovecot+pamAssassinのインストールがあまりに面倒すぎる。それで誰も試さないのがメール構築。 メール運用の最初ハードルがインストールと構築だと思う。それがこんなに簡単に行けるなら、脱Google 脱Gmailも不可能じゃないと思えてくる。