それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

mailcowをインストールしてubuntuでお手軽メールサーバー構築

mailcow でメールサーバー構築

メールの運用はめんどくさい。それ以前にインストールがめんどくさい。

スパム対策や、DKIMだとか、MXとMTAだとかあれこれ考える必要がある。考えるのをやめて、GoogleApps(Gsuite/Google workspace)だとかoffice365を使えばいいんだろう。しかし、すべてが解決するというわけでもない。メアドの追加だとか、ライセンス数を考慮したらしんどい(エイリアスで無料で足せるんだけど)、キャッチオールアドレスが欲しくなったり

期間限定なプロジェクトで、アルバイト雇用など一気に人が増えるとか。フェスティバルやイベントのために問い合わせフォームとメアドが必要だったりとか。たかだが数ヶ月のためにメアドとアカウントを大量にサービス側で追加するのもコスト的に負荷がかかる。そういうなにかメアドを管理できる方法を模索した。

mailcow パッケージがオールインワン

mailcow というパッケージをみつけた。 https://mailcow.email/

これをDockerで動かすとメールのあれこれが解決しそう。

WEBメールとカレンダーとアドレス帳機能があるSogo WEB を使える。

OpenMail プロジェクトも mailcow をベースに使っている。

https://openemail.io/

スパム対策

最初から、設定済みでソフトウェアが導入されているので、とても楽。 設定を増やすだけでいいのだから。必要な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からメールを使うことができる。IMAPPOP3SMTP(submissuon)のポートや総当り対策を考えなくていいのは本当に嬉しい。

カレンダー

共有できるWEBカレンダーがあってちょっと驚く。

アドレス帳

メール運用に不可欠なアドレス帳もWEB機能があり、さらにドメイン内ユーザーでの共有アドレス帳も使える。いいじゃん

スパム対策

Rsamd があるのでこれを使っていく。フィルタの書き方や clamcv の導入に時間を取られないので嬉しい。

キューの一覧

postfix にたまったキューのチェックや削除も mailcow のWEB画面から行える。

メアドの追加

メールアドレスとメールボックスの追加は、mailcown のUIから行える。

そのさいにエイリアスや複数のドメインなども使える。

mailcow導入で考えることが減る。

とりあえず、MXレコードとポート転送さえしておけば、辛うじてつかえるメール環境が手に入る。がちでPostfixから設定したらノウハウがまとまるまで1年経っても終わらない仕事になる。docker-compose でWEBメールボックス一式が手に入るのは強い。

運用してくとスパムとの戦いユーザー数が多くなる長期間の運用などは、運用担当者を割当てノウハウを確保してくのが大変だろうけど、一通り行えることはわかる。

VPSのメモリと容量が余っていればとりあえず入れておけば、クラウド追加課金を考えずにメアドを増やせて便利だと思う。

XMPP や unbound は流石に要らないと思うけど・・

その他のWEBメール環境

PostfixDovecotSMTPIMAPさえ動かせてしまえば、あとは好きにできる。

nextcloud-mail / roundcube /Cypht のような、他のWEBメール環境も使える。

WEBメール環境を確保するには、IMAP環境さえあればなんとかなる。しかし、自前のIMAP構築のためにPostfixDovecot+pamAssassinのインストールがあまりに面倒すぎる。それで誰も試さないのがメール構築。 メール運用の最初ハードルがインストールと構築だと思う。それがこんなに簡単に行けるなら、脱GoogleGmailも不可能じゃないと思えてくる。

2023/10/17 追加

Solr が動かないので

https://docs.mailcow.email/manual-guides/Dovecot/u_e-dovecot-fts/#delete-mailbox-data

インデックスが入ってるフォルダを明示的に消した。

docker compose exec solr rm /opt/solr/server/solr/dovecot-fts/data/index
docker compose exec solr rmdir /opt/solr/server/solr/dovecot-fts/data/index

参考資料