さくらのVPS+Kusanagi環境で複数ドメインでWordPressを運営している。
独自ドメインに届いたメールをGmailに転送するよう設定したが、Gmailから独自ドメインメールアドレスを使ってメールを送信できるようにする。
【関連記事】
>>>【単独ドメイン】独自ドメインに届いたメールをPostfixでGmailに転送する
>>>【複数ドメイン】独自ドメインに届いたメールをPostfixでGmailに転送する
なお上記の設定が終わっていれば下記コマンドでメール送信自体は何も追加設定しなくてもできる。
echo "本文" | mail -s "タイトル" -r [送信元メールアドレス] [送信先メールアドレス]
ただサーバにログインした状態でしか送信できないのは不便なのでGmailや一般的なメールソフトから送れるようにする。
ちなみに送信元メールアドレスは実際に存在しないアドレスでも送信できる。
設定など何も要らない。
「メールは送信元の偽装が簡単」というはこういうことである。
DNSの設定
「メールは送信元の偽装が簡単」という問題を解決するためDNSサーバに「SPFレコード」を追加する。
「SPF」は電子メールの送信元ドメインが詐称されていないかを検査するための仕組みです。「SPF」はDNSを利用し、その情報は「SPFレコード」と呼ばれる。
SPF (Sender Policy Framework)とは、 電子メールの送信元ドメインが詐称されていないかを検査するための仕組みです。 SPFの仕様は、 RFC4408(*1)で定められています。
インターネット用語1分解説~SPFとは~ – JPNIC
インターネットでメール送信に使用されるプロトコルであるSMTP (Simple Mail Transfer Protocol)は、 差出人のメールアドレス(Fromアドレス)を自由に設定することが可能です。 このため、 送信元を偽った「なりすましメール」を簡単に送ることができてしまい、 これが迷惑メールに利用されてきました。
SPFは、こうしたメールアドレスにおけるなりすましを防ぐための技術の一つで、 DNSを利用するのが特徴です。 ドメインをSPFに対応させるには、 そのドメインのゾーンデータにSPFレコード(*2)という情報を追加します。 SPFレコードには、 そのドメイン名を送信元としてメールを送ってもよいサーバのIPアドレス等を記述します。
一方、SPFに対応したメール受信サーバは、 メールの受信時にそのメールの送信元となっているドメイン(*3)のSPFレコードを、 DNSで問い合わせます。 送信元のサーバがSPFレコード中で許可されていない場合は、 送信ドメインの詐称が行われたと判断して、 受信を拒否するなどの処理を行います。
つまりSPFは、送信元サーバのIPアドレスとDNSを利用して、 あらかじめ想定された送信元以外からのなりすましメールを検出できるようにする機構で、 より多くのドメインがこの仕組みに対応することで、 その効果が高くなります。
*1 Sender Policy Framework (SPF) for Authorizing Use of Domains in E-Mail, Version 1
http://www.ietf.org/rfc/rfc4408.txt
*2 SPFレコードのためのRR(リソースレコード)として”SPF”がRFC4408で定義されていますが、 これを扱えないプログラムのために、 同RFCでは併せてTXTレコードでも同一の内容を記述するべきとされています。
*3 RFC4408では、 envelope from (SMTPのMAILコマンドで使用されたメールアドレス)のチェックは必須で、 HELOドメイン(SMTPのHELOコマンドで使用されたドメイン名)のチェックも推奨されていますが、 どのドメイン名を使うかは実装により異なります。
SPFレコードは下記のような値となる。
それぞれの値についてザクッと解説。
SPFレコードのバージョンを表す。「v=spf1」はSPFバージョン1の文法に従って定義されていることを示している。
IPアドレスは設定するサーバに合わせ変更してください。意味は下記となる。
「+」:許可する
ip4:このアドレスはInternet Protocol version 4であることを明示。
デフォルトの設定を示す。
「-」:拒否する
all:全て
この設定で
「lonely-sufer.com」ドメインのメールは「153.126.215.119」からのみ送信されます。このIPアドレス以外から送信されたメールは全部なりすましです!破棄してください!!
ということになる。
サーバの設定
GmailからPostfix経由でメールを送るには「送信者を認証する仕組み」が必要となる。
(認証しないと俗に言う「踏み台」になってしまう)
「送信者を認証する仕組み」をSMTP認証と呼ぶ。
SMTP認証の一つがSMTP-AUTHでSASL(サスル)メカニズムを利用した認証を行う。
メール転送プログラムであるPostfixは認証機構を持っていないためSASLを利用しユーザーを認証する。
Postfixとsaslは別物なので両方に設定が必要となる。
Kusanagi環境ではSASLに「cruy-sasl」ライブラリを利用する。インストールされていない場合はインストールする。
Postfixで使うSASL 2.1系の設定ファイルは「/etc/sasl2/smtpd.conf」。今回は下記で設定する。
認証方法:auxprop
認証方式:plain login
/etc/sasl2/smtpd.conf:
pwcheck_method: auxprop
mech_list: plain login
saslサービスの自動起動設定と起動を行う。
systemctl enable saslauthd.service
systemctl start saslauthd.service
PostfixにSASL認証とTLS設定を利用するように設定する。
Kusanagi環境でSSL化していると「/etc/letsencrypt/live/[ドメイン]/」に証明書と秘密鍵が作成さているのそれをTLSに利用する。
※Postfixのバージョン 2.10.1
/etc/postfix/main.cf:
########## SASL関連 ##########
# SASL認証を有効化
smtpd_sasl_auth_enable = yes
# 匿名認証の拒否
smtpd_sasl_security_options = noanonymous
#smtpd によって使われるレルム
smtpd_sasl_local_domain = $mydomain
# 転送要求設定
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
########## TLS/SSL関連 ##########
# TLSを有効化
smtpd_use_tls = yes
# 宛先のメールサーバがTLSに対応していれば、通信を暗号化する
smtp_tls_security_level = may
# サーバ証明書と秘密鍵を指定
smtpd_tls_cert_file = /etc/letsencrypt/live/[ドメイン]/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/[ドメイン]/privkey.pem
TLS通信を有効化するため「master.cf」の下記3行のコメントアウトを解除する。
/etc/postfix/master.cf:
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
なおKusanagi環境でないならSSL証明書を自力で取るかTLS、SMTPsは使わずSMTPの25番ポートでの通信を行えば良い。
編集後にPostfixをリロードし設定を反映させる。
postfix reload
「cyrus-sasl」に用意されている「saslpasswd2」コマンドを使用してSASL認証させるユーザーを追加する。
echo '[パスワード]' | saslpasswd2 -u [ドメイン] [ユーザー名]
#具体例
echo 'password' | saslpasswd2 -u lonely-surfer.com contact
このコマンドで「/etc/sasldb2」に認証用データベースが作成される。
このデータベースをPostfixが読めるよにグループ、パーミッションを変更する。
chgrp postfix /etc/sasldb2
chmod 640 /etc/sasldb2
その他のコマンド群
#ユーザー一覧表示
sasldblistusers2
#ユーザー削除
saslpasswd2 -u [ドメイン] -d [ユーザー名]
#パスワード変更
saslpasswd2 -u [ドメイン] [ユーザー名]
CentOS7のファイアウォールはfirewalldサービスを使っている。TLSを使うためサブミッションポート(587ポート)を開放する。
firewall-cmd --add-service=smtp-submission --zone=public --permanent
firewall-cmd --reload
これでサーバ側の設定は完了です。
Gmailの設定
Gmailにログインし
設定→アカウントとインポート→名前→他のメールアドレスを追加
認証用に設定したユーザーの情報を入力。エイリアスにはしないのでチェックは外します。
DNSに設定したSMTPサーバの情報とSASL認証ユーザーのユーザー名とパスワードを設定。ポートは587。TLSをを選択し「アカウントを追加」
なおメールサーバのDNS設定については下記で既に行っているものとする。
>>>Postfixで独自ドメインの転送サーバを作る
先程記入したメールアドレスに確認コードの入ったメールが届くので転記→確認。
これでGmailから新規作成や返信時に追加したメールアドレスから送信が可能になる。
スポンサーリンク
まとめ
こうやってまとめると大したことはしてないが実際はcyrus-saslのtestsaslauthdコマンドに激ハマり。
どうやってもテストログインに成功しない。
結局テストではログインは出来ないがGmailからは正しくログインできたのでauxpropではtestsaslauthdは利用できないと解釈した。
独自ドメイは受信専用で良いかと思っていたが企業からの問い合わせや連絡も来るため送信もできるようになって便利になった。
関連記事