前回の振り返り
以前、ConoHaのメールサーバで証明書エラーが出るのをどうにかする - お茶漬けぶろぐという記事を書いた。
要約すると、
- 証明書と実際のサーバのドメインが一致しておらず、証明書をとにかく受け入れないとSSL通信ができない
- 「証明書をとにかく受け入れる」ができないMUAが存在し、それを使う都合がある場合にはどうしようもない(SSLをオフにする必要がある)
- というわけで、DovecotでIMAP, SMTPのプロキシサーバを立てて、MUA〜プロキシは正しく証明書を配置、プロキシ〜ConoHaは「受け入れる」という設定にした
- IMAPについては正常に動作した
- SMTPはうまくSTARTTLSできなくて失敗
というのが前回記事の内容だった。
さて、
SMTPの問題をどうやって解消するか?
解消っつーか実際には逃げの手なんだけど、
- ConoHaのメールサーバから送信する必要が(実際には)無い
- メール転送サービスを利用すれば、メール送信にまつわるエトセトラを省エネで実現できる
- エトセトラとは、そもそもサーバ設定とか、受信してもらえるようにSPFとかDKIMとか…
メール転送サービスは、今回はSendGridを使わせてもらう。
というわけで、以下の対処方針でなんとかする。
- DovecotのSMTPプロキシを停止
- Postfixを以下の要領で新規にセットアップ
- SSL有効
- SMTP認証有効
- 全メールをSendGridにリレー
Postfixの設定
※あやふやな記憶をベースに書いてるので過不足や間違いあると思うので、これを見た人は自分で調べ直してね()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ sudo vim /etc/postfix/main.cf
# TLS parameters
smtpd_use_tls = yes
smtpd_tls_cert_file=/etc/letsencrypt/live/DOMAIN/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/DOMAIN/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_lovlevel=1
smtpd_tls_received_header=yes
# sasl
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
# relay
relayhost = [smtp.sendgrid.net]:587
# local mail settings
local_recipient_maps =
transport_maps = hash:/etc/postfix/transport
$ sudo vim /etc/postfix/master.cf
smtps inet n - y - - smtpd
基本線はこんなイメージのはず。
それぞれぴろっと書くか。
SSL通信するように
略
SMTP認証
基本的には上記設定で良いと思う。
認証情報としてのユーザを登録する必要がある。引数はUSER@DOMAINというメールアドレスを操作するつもりで書いている。
1
2
3
4
5
6
# ユーザ作成
$ sudo saslpasswd2 -f /var/spool/postfix/etc/sasldb2 -u DOMAIN -c USER
# ユーザ一覧
$ sudo sasldblistusers2 -f /var/spool/postfix/etc/sasldb2
# ユーザ削除
$ sudo saslpasswd2 -f /var/spool/postfix/etc/sasldb2 -u DOMAIN -d USER
リレー
メールは全てSendGridに投げるので良いけど、SendGridに認証を要求されるので、認証情報を記載する必要がある。
1
2
3
$ sudo vi /etc/postfix/sasl_passwd
[smtp.sendgrid.net]:587 apikey:hogehogefugafuga
$ sudo postmap hash:/etc/postfix/sasl_passwd
ローカルメール対応
ローカルメールというのは、宛先ドメインが、自分のサーバと同じになっているメールのこと。本来ならそういう状態のメールは外部に転送する必要もなく、自分のところのサーバ内でやり取りすれば済む。
ただ、今回の構成は、
- メールボックスはConoHaのメールサーバが持っている
- 利用のドメインは自前のVPSで利用している
- ここにDovecot及びPostfixを立てている
という状態のため、普通に自分自身とか、同ドメインの別アドレスにメールを送信しようとすると、ローカルメール扱いになってしまう。
そして、ローカルメールに見えるくせに、メールボックスは外部サーバのため、本当は送信する必要があるのだ。
更に言うと、Postfixのデフォルト動作では、ローカルメール判定を受けた上で、そのユーザがローカルに存在しない場合Rejectするようになっている。
これらに対処する必要がある。
まずはローカルにユーザが存在しない場合でも処理をする設定としてlocal_recipient_maps =を入れている。明示的に空の値を設定している。
次に、ローカルメールのとき、つまり宛先ドメインが自分自身のときに、リレーをするようにtransport_mapsを記載する。
1
2
$ cat /etc/postfix/transport
DOMAIN smtp:[smtp.sendgrid.net]:587
おわり
メールサーバに対してかなり苦手意識があったけど、動くものが一旦作れると、多少なりとも自信にはなるね。送信部分はまるっとSendGridにお願いしちゃってるのでなんともだけど。
今回は別の趣味で使ってるドメインについて設定したけど、今度は普通にプライベート用を作ってみたりしようかな。メインのドコモ回線をahamoに切り替えようと思っているので、ドコモメールが無くなっちゃうんだよね。それの退避先として自前のサーバに作ってみようかな〜と思ったりしちゃったり。最早メールアドレスを作る事より、既存のドコモメールで登録しているサービス群の登録変更がクソめんどうくさい…