■目次
メールサーバ構築メールサーバの作成Postfixの設定Dovecotの設定DNSの設定メールユーザの作成メーラから送受信メールユーザの追加PHPから送信メールの転送設定メールの確認SPFの設定DKIMの設定DMARCの設定SSL証明書の導入その他メモトラブルシューティング
■メールサーバ構築
EC2でメールサーバを構築し、refirio.net のドメインでメールを送受信できるようにした検証メモ
■メールサーバの作成
■EC2の作成 マシンイメージ: Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0f310fced6141e627 インスタンスタイプ: t2.micro ネットワーク・サブネット: Study の Study-Trust-A を選択 自動割り当てパブリックIP: サブネット設定を使用(有効) ストレージサイズ: 8GiB Nameタグ: mail_test セキュリティグループ: default, study キーペア: 既存キーペアの選択 → AWS ※SSH用ポートに加えて、25(SMTP)・110(POP3)・143(IMAP)・587(サブミッション)番ポートを開けておく ■Elastic IPの割り当て ※AWSコンソールから作業 割り当て後、以下の情報でEC2にSSH接続できる ホスト: 対象のIPアドレス ポート: 22 (後に10022に変更) ユーザ名: ec2-user 鍵: LogiSquare-Production.pem mail_test ... 203.0.113.1 ■基本的な設定 ※サーバを一から設定する場合の参考に hostname は設定しなくても(そのままでも)メールの送受信はできた $ sudo su - # localectl set-locale LANG=ja_JP.UTF-8 # localectl status # timedatectl set-timezone Asia/Tokyo # timedatectl status # vi /etc/ssh/sshd_config
#Port 22 Port 10022 … ポート番号を変更
# systemctl restart sshd # yum -y install yum-fastestmirror # yum -y update # yum -y install yum-cron # systemctl start yum-cron # systemctl enable yum-cron # systemctl list-unit-files -t service | grep cron # systemctl | grep cron # yum -y groupinstall "Base" "Development tools" # sed -i '/^root:/d' /etc/aliases # echo "root: refirio@gmail.com" >> /etc/aliases # newaliases # yum -y install mailx # echo test | mail root ■ホスト名の設定 必要に応じて設定する # hostnamectl set-hostname refirio.net # vi /etc/hostname # vi /etc/hosts # hostnamectl status
■Postfixの設定
メールサーバ構築に必要な基礎知識とセキュリティについての解説 | OXY NOTES https://oxynotes.com/?p=4266 メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築 https://centossrv.com/postfix.shtml Postfixの設定 | さくらインターネットのVPS設定マニュアル https://www.sakura-vps.net/centos6-setting-list/postfix-settings-for-sakura-vps/ Mailサーバ(Postfix・Dovecot) | VPS設定のつぼ | VPS虎の巻 -VPS比較&設定のつぼ- http://vps-tora.com/tsubo/sakura/postfix/ さくらインターネットのVPSサービス 「さくらのVPS」 導入手順 − 10.postfixの利用準備 | たりすまんサーバ技術録 http://hosting.talisnet.info/sakura-vps-10/ さくらインターネットのVPSサービス 「さくらのVPS」 導入手順 − 11.dovecotの利用準備 | たりすまんサーバ技術録 http://hosting.talisnet.info/sakura-vps-11/ Postfixおよび外部リレーの設定 - さくらのVPS徹底活用ガイド https://sites.google.com/site/sakuravpsguide/postfix さくらのVPSの設定 - メールサーバーの構築 | TipsZone https://tipszone.jp/20120521_mail_server/ PostfixとDovecotでバーチャルメールボックスの設定をする - Qiita https://qiita.com/dribble13/items/36847b944caed440d714 unknown user のバウンスメールの削除 http://www.ice.is.kit.ac.jp/~umehara/misc/comp/20091218c.html メール運用がロストテクノロジーになっていく話 - Qiita https://qiita.com/koichiro/items/d65ac1af03b9063f0592 ■Postfixのインストール # yum -y install postfix … Postfixをインストール(Amazon Linux 2 では、はじめからインストールされている) ■バーチャルメールボックス管理のためのユーザを作成 ※バーチャルメールボックスを使い、UNIXユーザとは別にメールユーザを管理する # groupadd -g 10000 mailuser # useradd -u 10000 -g mailuser -s /sbin/nologin mailuser ■バーチャルメールボックス作成 # mkdir /home/virtualmail # chown -R mailuser:mailuser /home/virtualmail ■Postfixの設定 Postfixでバーチャルメールボックスを有効にし、バーチャルドメイン宛てのメールを受け取る - Postfix Tips & FAQ https://www.ipentec.com/document/linux-postfix-enable-virtual-domain-and-virtual-mailbox SASLの設定 - Qiita https://qiita.com/nkiw/items/cbddeaba18f8c010fb5e PostfixのSMTP認証で利用するCyrus SASLライブラリについて | OXY NOTES https://oxynotes.com/?p=4428 SMTP認証 (SMTP-AUTH) とは、メール送信時に送信者がユーザ本人であることを確認するために、SMTPサーバでユーザ認証を行うもの (以前は「POP before SMTP」で迷惑メール対策を行うことが多かったが、現在は使われなくなっている) PostfixではSMTP認証に「SASL(Simple Authentication and Security Layer / サスル)」というライブラリを利用する # vi /etc/postfix/main.cf
#myhostname = virtual.domain.tld myhostname = mail.refirio.net … ホスト名(FQDN)を設定 #mydomain = domain.tld mydomain = refirio.net … ドメインを設定 #myorigin = $mydomain myorigin = $mydomain … ローカルからのメール送信時、送信元メールアドレスの@以降にドメイン名を付加 #inet_interfaces = localhost inet_interfaces = all … SMTP接続を待ち受けるネットワークインターフェース(localhostだと他SMTPサーバからの接続を受け付けない) mydestination = $myhostname, localhost.$mydomain, localhost … 受け取るべきメールのドメイン。(今回は変更なしだが、最後に「, $mydomain」を付けておく必要は無いか) #home_mailbox = Maildir/ home_mailbox = Maildir/ … ホームディレクトリからの相対パスでメールボックスを指定 #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) smtpd_banner = $myhostname ESMTP unknown … メールサーバーソフト名の隠蔽化 # 以下、最終行へ追記 smtpd_sasl_auth_enable = yes … SMTP認証を有効にする smtpd_recipient_restrictions = … SMTP認証を使用する場合はこの設定にする permit_mynetworks permit_sasl_authenticated reject_unauth_destination message_size_limit = 10485760 … 受信メールサイズを10MB(10*1024*1024)に制限 virtual_mailbox_domains = /etc/postfix/vdomains … バーチャルメールボックスドメインで受信するドメイン virtual_mailbox_base = /home/virtualmail … メールが保存されるディレクトリ virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox … 有効な受信者アドレス全てを持つ検索テーブル virtual_uid_maps = static:10000 … バーチャルメールボックスは、すべて固定された uid 10000 が所有する virtual_gid_maps = static:10000 … バーチャルメールボックスは、すべて固定された gid 10000 が所有する local_recipient_maps = … Postfix SMTP サーバでのローカル受信者チェックを無効にする(空欄を指定) luser_relay = unknown_user@localhost … 存在しないアカウントに送信されたメールを特定のアドレスに送付
# echo unknown_user: /dev/null >> /etc/aliases … 存在しないアカウントに送信されたメールを破棄 # newaliases … 転送設定反映 # vi /etc/postfix/vdomains … バーチャルメールボックスドメインで受信するドメインを設定(ファイルを新規作成)
refirio.net stg.refirio.net … stg.refirio.net も設定する場合
# vi /etc/postfix/virtual-mailbox … 有効な受信者アドレス全てを持つ検索テーブルを設定(ファイルを新規作成)
info@refirio.net refirio.net/info/Maildir/
# vi /etc/postfix/master.cf … サブミッションポートを設定(OP25Bの対応)
#submission inet n - n - - smtpd submission inet n - n - - smtpd … サブミッションポートを有効にする # -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_auth_enable=yes … サブミッションポートで、SASL認証を実施(先頭のスペースの数は2つ必要かも?要検証)
# vi /etc/sasl2/smtpd.conf
#pwcheck_method: saslauthd pwcheck_method: auxprop
■Postfixの起動 # systemctl start postfix … 新規にインストールした場合は起動 # systemctl restart postfix … すでにインストールされていた場合は再起動 # chkconfig postfix on
■Dovecotの設定
■Dovecotのインストール メールサーバでバーチャルユーザとバーチャルメールボックス - VPS https://kame-no.com/vps/mail_virtual_user.php # yum install -y dovecot … Dovecotをインストール ■Dovecotの設定 # vi /etc/dovecot/dovecot.conf
#protocols = imap pop3 lmtp protocols = imap … imapのみ有効(pop3の有効化も試したい) #listen = *, :: listen = *, ::
# vi /etc/dovecot/conf.d/10-mail.conf … メール配送関連の設定ファイルを編集
#mail_location = mail_location = maildir:~/Maildir … メール受信ボックス
# vi /etc/dovecot/conf.d/10-ssl.conf … SSL/TLS関連の設定ファイルを編集
#ssl = required ssl = no … SSL接続を無効化。imapsとpop3sは使わない(メーラーとメールサーバのやり取りにSSLを使う場合は改めて検証したい)
# vi /etc/dovecot/conf.d/10-auth.conf … ユーザ認証関連の設定ファイルを編集
#auth_mechanisms = plain auth_mechanisms = cram-md5 plain login … 認証時のパスフレーズ送信方式を指定 #!include auth-passwdfile.conf.ext !include auth-passwdfile.conf.ext … メールを取得する際の認証に関する設定を行う #!include auth-static.conf.ext !include auth-static.conf.ext … 仮想ユーザの管理に関する設定を行う
# vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext … メールを取得する際の認証に関する設定
# args = scheme=CRYPY username_format=%u /etc/dovecot/users args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd … /etc/dovecot/users のままでいいかも?その場合、後の手順で /etc/dovecot/passwd を作成している箇所も要変更。ただし passwd で扱っている解説もあるので、これでいいかも # args = username_format=%u /etc/dovecot/users args = username_format=%u /etc/dovecot/passwd … /etc/dovecot/users のままでいいかも?その場合、後の手順で /etc/dovecot/passwd を作成している箇所も要変更。ただし passwd で扱っている解説もあるので、これでいいかも
# vi /etc/dovecot/conf.d/auth-static.conf.ext … 仮想ユーザの管理に関する設定
#userdb { # driver = static # args = uid=vmail gid=vmail home=/home/%u #} userdb { driver = static args = uid=10000 gid=10000 home=/home/virtualmail/%d/%n }
■Dovecotの起動 # service dovecot start # chkconfig dovecot on
■DNSの設定
※ムームードメインで設定を確認 MXレコードの優先度は、専用の入力欄があったのでそこに入力した また「mail.refirio.net」は「mail.refirio.net.」と最後にピリオドを付けて書くと「No.2の「 内容 」をメールサーバー名で入力してください。【MXレコード】」のエラーになった No サブドメイン 種別 内容 優先度 1 mail A 203.0.113.1 2 MX mail.refirio.net 10 別サーバから以下で反映を確認 $ dig refirio.net any $ dig mail.refirio.net any
■メールユーザの作成
※info@refirio.net を作成するものとする ※他ユーザを追加する場合、後述の「メールユーザの追加」を参照 ■IMAP受信ユーザの作成 Postfix の DB ファイルを一括生成・更新 - Postfix Advent Calendar 2014 - ダメ出し Blog https://fumiyas.github.io/2014/12/01/update-db.postfix-advent-calendar.html # doveadm pw … パスワードの作成。パスワードは「Tn9E3MPadF」としてみる。saslpasswd2のときのパスワードと合わせたが、合わせる必要があるかは要確認 # Enter new password: # Retype new password: {CRAM-MD5}3810c35cd82833f74aee20e8244707defa76155800d8ed4d784e6357fc0fb1d8 # vi /etc/dovecot/passwd … 作成されたハッシュ値を用いて /etc/dovecot/passwd を編集(最初はファイルが無いので新規に作成する)
info@refirio.net:{CRAM-MD5}3810c35cd82833f74aee20e8244707defa76155800d8ed4d784e6357fc0fb1d8
仮想メールボックスの作成 ディレクトリ構成は以下のとおり /home/virtualmail/[ドメイン名]/[メールユーザ名]/Maildir 従って、 /home/virtualmail/refirio.net/info/Maildir を作成することになる virtualmailディレクトリ配下の所有者は、全て "mailuser:mailuser" にする必要があるので注意 # mkdir -p /home/virtualmail/refirio.net/info/Maildir # chown -R mailuser:mailuser /home/virtualmail/refirio.net # chown -R mailuser:mailuser /home/virtualmail/refirio.net/info … 上で一括変更されているので不要のはず # vi /etc/postfix/virtual-mailbox … 有効な受信者アドレス全てを持つ検索テーブル
info@refirio.net refirio.net/info/Maildir/ … 最初のユーザはPostfixの設定手順中に追加済み
# postmap /etc/postfix/virtual-mailbox … virtual-mailboxファイルを、Postfixが参照するデータベースファイルに反映 # systemctl restart postfix … Postfixを再起動 ■SMTP送信ユーザの作成 saslpasswd2は「saslpasswd2 -p -u ドメイン -c ユーザ名」の書式で作成する # echo "パスワード" | saslpasswd2 -p -u refirio.net -c info … パスワードの作成。パスワードは「Tn9E3MPadF」としてみる # sasldblistusers2 … 反映されたか確認 info@refirio.net: userPassword … このように表示されれば反映されている # ll /etc | grep sasldb2 -rw-r----- 1 root root 12288 Apr 10 02:04 sasldb2 # chgrp postfix /etc/sasldb2 … /etc/sasldb2 の所有グループを postfix に変更 # ll /etc | grep sasldb2 -rw-r----- 1 root postfix 12288 Apr 10 02:04 sasldb2
■メーラから送受信
※Thunderbirdで設定を確認 メニューから「ツール → アカウント設定 → アカウント操作 → メールアカウントを追加」を選択 あなたのお名前: refirio メールアドレス: info@refirio.net パスワード: Tn9E3MPadF 「続ける」をクリック 「アカウント設定が、一般的なサーバー名で検索したことにより見つかりました。」と表示される 「IMAP(リモートフォルダー)」を選択して「手動設定」をクリック 「ユーザー名」が「受信サーバー」「送信サーバー」とも info になっているので info@refirio.net に変更する 「完了」をクリック 「mail.refirio.net への接続は暗号化されません。」という警告が表示されるが「接続する上での危険性を理解しました」にチェックを入れて「完了」をクリック 「送信(SMTP)サーバー」の「SMTPサーバーを編集」をクリック 以下は上記設定により設定済みになっているかもしれないが、設定がなければ設定する 説明: refirio.net サーバー名: mail.refirio.net ポート番号: 587 接続の保護: なし 認証方式: 平文のパスワード認証(安全でない) ユーザー名: info@refirio.net 入力したら「OK」をクリック 「送信(SMTP)サーバー」で今登録したものが選択されていることを確認して「OK」をクリック ※受信サーバーの認証方法は「暗号化されたパスワード認証」 送信サーバーの認証方法は「通常のパスワード認証」 となっている 上の手順にある「mail.refirio.net への接続は暗号化されません。」の警告を無くしたければ、SSL証明書の導入が必要のはず(未検証) ■メールログ参考 メールを送信したときのログは以下のようになっていた # cat /var/log/maillog Apr 10 05:32:21 ip-10-0-0-53 postfix/smtpd[5131]: connect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205] Apr 10 05:32:21 ip-10-0-0-53 postfix/smtpd[5131]: A16F6C57BD: client=p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205], sasl_method=PLAIN, sasl_username=info@refirio.net Apr 10 05:32:21 ip-10-0-0-53 postfix/cleanup[5135]: A16F6C57BD: message-id=<e3d903a0-817f-7cac-a0c4-b1bed27d13bc@refirio.net> Apr 10 05:32:21 ip-10-0-0-53 opendkim[3856]: A16F6C57BD: DKIM-Signature field added (s=20200409, d=refirio.net) Apr 10 05:32:21 ip-10-0-0-53 postfix/qmgr[4809]: A16F6C57BD: from=<info@refirio.net>, size=962, nrcpt=1 (queue active) Apr 10 05:32:21 ip-10-0-0-53 postfix/smtpd[5131]: disconnect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205] Apr 10 05:32:21 ip-10-0-0-53 postfix/smtp[5136]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c02::1a]:25: Network is unreachable Apr 10 05:32:23 ip-10-0-0-53 postfix/smtp[5136]: A16F6C57BD: to=<refirio.net@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.189.27]:25, delay=1.5, delays=0.13/0.01/0.42/0.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1586496743 90si761780pld.393 - gsmtp) Apr 10 05:32:23 ip-10-0-0-53 postfix/qmgr[4809]: A16F6C57BD: removed 参考までに、以下は Postfix の設定ミスによりメールを送信できなかったときのログ # cat /var/log/maillog Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: connect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205] Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication failure: Password verification failed Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205]: SASL PLAIN authentication failed: generic failure Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205]: SASL LOGIN authentication failed: generic failure Apr 10 05:27:34 ip-10-0-0-53 postfix/smtpd[5107]: disconnect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205]
■メールユーザの追加
※test@refirio.net を作成するものとする ■IMAP受信ユーザの作成 # doveadm pw … パスワードは「Bh6epMaDyH」としてみる # Enter new password: # Retype new password: {CRAM-MD5}d08c161987021307cf5180dd8db986b411d139e5a32a0f3a9869a6b4edab366b # vi /etc/dovecot/passwd … 作成されたハッシュ値を用いて /etc/dovecot/passwd を編集
info@refirio.net:{CRAM-MD5}3810c35cd82833f74aee20e8244707defa76155800d8ed4d784e6357fc0fb1d8 test@refirio.net:{CRAM-MD5}d08c161987021307cf5180dd8db986b411d139e5a32a0f3a9869a6b4edab366b … test@refirio.net を追加
# mkdir -p /home/virtualmail/refirio.net/test/Maildir # chown -R mailuser:mailuser /home/virtualmail/refirio.net/test # vi /etc/postfix/virtual-mailbox … 有効な受信者アドレス全てを持つ検索テーブルを編集
info@refirio.net refirio.net/info/Maildir/ test@refirio.net refirio.net/test/Maildir/ … test@refirio.net を追加
# postmap /etc/postfix/virtual-mailbox … virtual-mailboxファイルを、Postfixが参照するデータベースファイルに反映 # systemctl restart postfix … Postfixを再起動 ■SMTP送信ユーザの作成 # echo "パスワード" | saslpasswd2 -p -u refirio.net -c test … パスワードは「Bh6epMaDyH」としてみる # sasldblistusers2 info@refirio.net: userPassword test@refirio.net: userPassword … このように表示されれば反映されている ■メーラの設定 「メーラから送受信」の内容を参照
■PHPから送信
■PHPMailer 以下のコードで送信できた SMTPSecure は「ssl」や「tls」ではなく、「CRAM-MD5」で送信できた
<?php require_once 'PHPMailer/class.phpmailer.php'; require_once 'PHPMailer/class.smtp.php'; // SMTPサーバ: ホスト define('SMTP_HOST', 'mail.refirio.net'); // SMTPサーバ: メールアカウント define('SMTP_USERNAME', 'info@refirio.net'); // SMTPサーバ: メールパスワード define('SMTP_PASSWORD', 'Tn9E3MPadF'); // SMTPサーバ: プロトコル (ssl または tls) define('SMTP_SECURE', 'CRAM-MD5'); // SMTPサーバ: 送信ポート (ssl:465, tls:587) define('SMTP_PORT', '587'); // メール送信準備 $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; $mail->Host = SMTP_HOST; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->SMTPSecure = SMTP_SECURE; $mail->Port = SMTP_PORT; // メール内容定義 $mail->CharSet = 'UTF-8'; $mail->Encoding = 'base64'; $mail->setFrom('info@refirio.net', 'メール送信者'); $mail->addAddress('refirio.net@gmail.com', 'メール受信者'); $mail->Subject = '外部SMTPからの送信テスト'; $mail->Body = "テストメール。\r\nこれは外部SMTPからの送信テストです。"; // メール送信 if (!$mail->send()) { exit('Error: ' . $mail->ErrorInfo); } exit('complete');
■メールの転送設定
# vi /etc/postfix/main.cf
virtual_mailbox_domains = /etc/postfix/vdomains virtual_mailbox_base = /home/virtualmail virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox virtual_alias_maps = hash:/etc/postfix/virtual … 転送設定のファイルを追加
# vi /etc/postfix/virtual … エイリアステーブルを編集
info@refirio.net test@refirio.work … ファイルの最後に追加
※上記設定のフォーマットは以下のとおり [転送元メールアドレス] [転送先メールアドレス] ※この設定を行うと info@refirio.net のメールボックスにメールは残らず、test@refirio.work にメールが転送される # postmap /etc/postfix/virtual … virtualファイルを、Postfixが参照するデータベースファイルに反映 # systemctl restart postfix … Postfixを再起動 ■メールログ参考 メールを転送したときのログは以下のようになっていた (Gmail refirio.net@gmail.com から info@refirio.net にメールを送信して、そのメールが test@refirio.work に転送されたときのログ) orig_to が転送元、to が転送先、relay は転送されたサーバ # cat /var/log/maillog Apr 13 09:18:05 ip-10-0-0-232 postfix/smtpd[22608]: connect from mail-ed1-f42.google.com[209.85.208.42] Apr 13 09:18:05 ip-10-0-0-232 postfix/smtpd[22608]: 938053DE8B: client=mail-ed1-f42.google.com[209.85.208.42] Apr 13 09:18:05 ip-10-0-0-232 postfix/cleanup[22612]: 938053DE8B: message-id=<CAOwUPtZ-tAvNSZ2hsg0UaGmg-rxni8q+XXEQ6j_TqO+mHPkJPQ@mail.gmail.com> Apr 13 09:18:05 ip-10-0-0-232 opendkim[19543]: 938053DE8B: mail-ed1-f42.google.com [209.85.208.42] not internal Apr 13 09:18:05 ip-10-0-0-232 opendkim[19543]: 938053DE8B: not authenticated Apr 13 09:18:05 ip-10-0-0-232 opendkim[19543]: 938053DE8B: DKIM verification successful Apr 13 09:18:06 ip-10-0-0-232 postfix/qmgr[22607]: 938053DE8B: from=<refirio.net@gmail.com>, size=2836, nrcpt=1 (queue active) Apr 13 09:18:06 ip-10-0-0-232 postfix/smtpd[22608]: disconnect from mail-ed1-f42.google.com[209.85.208.42] Apr 13 09:18:06 ip-10-0-0-232 postfix/smtp[22613]: 938053DE8B: to=<test@refirio.work>, orig_to=<info@refirio.net>, relay=mx01.lolipop.jp[157.7.107.6]:25, delay=0.66, delays=0.41/0.01/0.04/0.2, dsn=2.0.0, status=sent (250 Queued! <CAOwUPtZ-tAvNSZ2hsg0UaGmg-rxni8q+XXEQ6j_TqO+mHPkJPQ@mail.gmail.com> (Queue-Id: 3CD6241003FE)) Apr 13 09:18:06 ip-10-0-0-232 postfix/qmgr[22607]: 938053DE8B: removed
■メールの確認
サーバ内のメールを、SSHで直接読めるか確認 それらしいデータは確認できるので、引き続き検証したい PHPなどでメーラーを作れるかも検証したい Maildirの仕様について | ijo.cc http://ijo.cc/it/ja/server/maildir_spec/ 以下にメールが保存されているようだが、また詳細を確認したい メールを表示するツールも作ってみたい # cd /home/virtualmail/refirio.net/info/Maildir # ll 合計 36 drwxr-xr-x 2 mailuser mailuser 4096 4月 13 18:21 cur -rw-r--r-- 1 mailuser mailuser 777 4月 13 18:21 dovecot-uidlist -rw-r--r-- 1 mailuser mailuser 8 4月 13 11:55 dovecot-uidvalidity -r--r--r-- 1 mailuser mailuser 0 4月 13 11:35 dovecot-uidvalidity.5e93cfec -rw-r--r-- 1 mailuser mailuser 6084 4月 13 18:21 dovecot.index.cache -rw-r--r-- 1 mailuser mailuser 4844 4月 13 18:22 dovecot.index.log -rw-r--r-- 1 mailuser mailuser 144 4月 13 11:55 dovecot.mailbox.log drwxr-xr-x 2 mailuser mailuser 6 4月 13 18:21 new -rw-r--r-- 1 mailuser mailuser 39 4月 13 11:55 subscriptions drwxr-xr-x 2 mailuser mailuser 6 4月 13 18:21 tmp # cd /home/virtualmail/refirio.net/info/Maildir/cur # ll 合計 32 -rw------- 1 mailuser mailuser 2822 4月 13 11:36 1586745369.Vca01I38c33M991392.ip-10-0-0-232.ap-northeast-1.compute.internal:2,RS -rw------- 1 mailuser mailuser 2834 4月 13 11:54 1586746490.Vca01I38c2dM169685.ip-10-0-0-232.ap-northeast-1.compute.internal:2,RS -rw------- 1 mailuser mailuser 3413 4月 13 11:56 1586746616.Vca01I38c3aM456123.ip-10-0-0-232.ap-northeast-1.compute.internal:2,S -rw------- 1 mailuser mailuser 3029 4月 13 12:17 1586747823.Vca01I3de66M138538.ip-10-0-0-232.ap-northeast-1.compute.internal:2,RS -rw------- 1 mailuser mailuser 3053 4月 13 18:07 1586768848.Vca01I3de92M582082.ip-10-0-0-232.ap-northeast-1.compute.internal:2,S -rw------- 1 mailuser mailuser 766 4月 13 18:09 1586768945.Vca01I3de90M680236.ip-10-0-0-232.ap-northeast-1.compute.internal:2,S -rw------- 1 mailuser mailuser 3029 4月 13 18:11 1586769108.Vca01I3de94M890118.ip-10-0-0-232.ap-northeast-1.compute.internal:2,S -rw------- 1 mailuser mailuser 3520 4月 13 18:21 1586769687.Vca01I3de95M578179.ip-10-0-0-232.ap-northeast-1.compute.internal:2,S # cat 1586745369.Vca01I38c33M991392.ip-10-0-0-232.ap-northeast-1.compute.internal:2,RS Return-Path: <refirio.net@gmail.com> X-Original-To: info@refirio.net Delivered-To: info@refirio.net Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by mail.refirio.net (Postfix) with ESMTP id B743C38C32 for <info@refirio.net>; Mon, 13 Apr 2020 11:36:09 +0900 (JST) Received: by mail-ed1-f54.google.com with SMTP id e5so10365356edq.5 for <info@refirio.net>; Sun, 12 Apr 2020 19:36:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=waLoHIFQ7gjmY2w93FJhKXW7cFZNc8UfyfWeMUlNyZY=; b=ig4PeFPDpAsN3/vu16imnioOhG5PfY1yS1dYyANLu4bokTCKxzXYVdoAkCIhc/nNfF aKHXckhvUQVUavLtvh/zIy0FQ1DCWY/FzMTjQcNjV3po3Eupt8sTtwNdvdbNO0s5mGyJ 5bZlE5Wru2HQ4//VYXAkSVI9z6SXIiydYEWQTjkxYlkKvZ8fOG+2VJrRinIV0aNQBsS/ 8trEYi2BjT5Zy34RGzbbJoqMjalngt2AJyvXPL1Ym2pmkwnfd5Gbb2gAmLKeP4AiqJEB QR59rIGcij16vUGKrj5FQPFvcethxWVwLeQFneVBJkYjKUSy0lfQoZanWNk5sP1nsXya I99Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=waLoHIFQ7gjmY2w93FJhKXW7cFZNc8UfyfWeMUlNyZY=; b=IrI5crDsv9LOp0+mQ+qKaNkyFpqY8AZ1SImxUBOiiFI9pyuLEBHLA0ZG/2oqzk/wIT 7XZTVoxguGNi7mgCJhObxgjn+YJPt1rAo/VWrLOQUMzvSGW6wsmTbrGSonWkTioaZJPS tTS4GFn8EKDejEmetrUTA26jYR7QldOz0aOGK3TLPPBx13ngoHkPWhBwYVx+3NTzmV4Y hbhWJ/slslXfOvWpmY2EDmI0vw1auG+8JGKKAHlYdDjKB6uSQU5jCqGXyS60M/NgX6/N ebcQ0n5/lBYjtqvzfsMQN3irTR4+LJDsYDzUWt8WmtqV//KQHN6QmsQNhyoomkUdoeyT hh8Q== X-Gm-Message-State: AGi0PuYATY25JSLEEYLkMY6qbYMlfKMWxFg6C1qhhvuvkkNUgzoYkG+S 8J7zaDb9GEJDLcXEfCgQhNES8TQVmzSt2rWwopcxOg== X-Google-Smtp-Source: APiQypKv+R7gir7nA7YEx1MjCXAAvEpAyhHiBSuqLuzZfaz/1WAFoXuY/w/hXpqQajt7kM3a1JOJV4GlBY4iky3tq9E= X-Received: by 2002:a17:906:4351:: with SMTP id z17mr14164431ejm.346.1586745367832; Sun, 12 Apr 2020 19:36:07 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?44CQVFDjgJHlsbHph47lr5vlkow=?= <refirio.net@gmail.com> Date: Mon, 13 Apr 2020 11:35:54 +0900 Message-ID: <CAOwUPtZXOmgUifcvtdqLsfexAh22sDb4m9BTm+p8hKtMfXPaVg@mail.gmail.com> Subject: =?UTF-8?B?44OG44K544OI44Oh44O844Or?= To: info@refirio.net Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 44OG44K544OI44CCDQrjgZPjgozjga/jg4bjgrnjg4jjg6Hjg7zjg6vjgafjgZnjgIINCg0KLS0g DQrilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIENCuWxsemHjuWvm+WSjA0KRS1tYWlsIDogcmVmaXJpby53b3Jr QGdtYWlsLmNvbQ0K4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBDQo=
■SPFの設定
■DNSの設定 No サブドメイン 種別 内容 優先度 3 TXT "v=spf1 ip4:203.0.113.1 -all" ■反映の確認 別サーバから以下で反映を確認 $ dig refirio.net any 反映されていれば、Gmailに対してメールを送信してみる メッセージのソースを表示して以下のように表示されていれば成功 SPF: PASS(IP: 203.0.113.1)
■DKIMの設定
■OpenDKIMインストール OpenDKIM で迷惑メール判定を回避する - Qiita https://qiita.com/bezeklik/items/a3619b5abc01ab38bec4 自ドメインのDNSとPostfixをSPF/DKIM対応させてみた - Qiita https://qiita.com/Sabuuuuu---nn/items/fc5448b7f5e3057365a1 # amazon-linux-extras install -y epel … EPELのインストール # yum install -y opendkim … OpenDKIMのインストール ■OpenDKIMの設定 # mkdir /etc/opendkim/keys/refirio.net … キーペア保存用ディレクトリ作成(管理ドメイン毎にキーペアを生成するため) # mkdir /etc/opendkim/keys/stg.refirio.net … stg.refirio.net も設定する場合 # opendkim-genkey -D /etc/opendkim/keys/refirio.net -d refirio.net -s 20200409 … キーペアの作成 # opendkim-genkey -D /etc/opendkim/keys/stg.refirio.net -d stg.refirio.net -s 20200409 … stg.refirio.net も設定する場合 # chown -R opendkim:opendkim /etc/opendkim/keys … 所有者の一括変更 # vi /etc/opendkim/KeyTable … KeyTableの変更
20200409._domainkey.refirio.net refirio.net:20200409:/etc/opendkim/keys/refirio.net/20200409.private 20200409._domainkey.stg.refirio.net stg.refirio.net:20200409:/etc/opendkim/keys/refirio.net/20200409.private … stg.refirio.net も設定する場合
※上記設定のフォーマットは以下のとおり [セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス] # vi /etc/opendkim/SigningTable … SigningTableの変更
*@refirio.net 20200409._domainkey.refirio.net *@stg.refirio.net 20200409._domainkey.stg.refirio.net … stg.refirio.net も設定する場合
※上記設定のフォーマットは以下のとおり *@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名] # vi /etc/opendkim.conf … 設定ファイルの編集
#Mode v Mode sv … 「s」送信時の署名「v」受信の確認の両方行う #KeyFile /etc/opendkim/keys/default.private … コメントアウト # KeyTable /etc/opendkim/KeyTable KeyTable /etc/opendkim/KeyTable … コメント解除 # SigningTable refile:/etc/opendkim/SigningTable SigningTable refile:/etc/opendkim/SigningTable … コメント解除 # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ExternalIgnoreList refile:/etc/opendkim/TrustedHosts … コメント解除 # InternalHosts refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts … コメント解除
■Postfixの設定 # vi /etc/postfix/main.cf … 最終行へ設定を追記
# DKIM smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
# systemctl restart postfix ■OpenDKIM起動 # systemctl start opendkim # systemctl enable opendkim ■DNSの設定 No サブドメイン 種別 内容 優先度 4 20200409._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFzmEY4m3v2bNRL68kIGwtTkmFxs5IU+cQdZHLOEtNAi+7m33wvgEz/AAbWqxMUX5+lTNpon0nLSKRlcvKGmNfQWCtwAbQOt3n5HleiZrtme66G8o0cpWryI9YF7lWFzw0OPYm+oNwCZEd9x5aSEIWwtCxuiJjnDu7iZGnDwNtKwIDAQAB" 5 _adsp._domainkey TXT "dkin=unknown" ※20200409._domainkey の内容は /etc/opendkim/keys/refirio.net/20200409.txt の内容を参照する 複数行で以下のように記載されているので、上のように1行にして記載する # cat /etc/opendkim/keys/refirio.net/20200409.txt 20200409._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFzmEY4m3v2bNRL68kIGwtTkmFxs5IU+cQdZHLOEtNAi+7m33wvgEz/AAbWqxMUX5+lTNpon0nLSKRlcvKGmNfQWCtwAbQOt3n5HleiZrtme66G8o0cpWryI9YF7lWFzw0OPYm+oNwCZEd9x5aSEIWwtCxuiJjnDu7iZGnDwNtKwIDAQAB" ) ; ----- DKIM key 20200409 for refirio.net ■反映の確認 別サーバから以下で反映を確認 $ dig 20200409._domainkey.refirio.net any $ dig _adsp._domainkey.refirio.net any 反映されていれば、Gmailに対してメールを送信してみる メッセージのソースを表示して以下のように表示されていれば成功 2020年4月時点に試したところ、SPFとDKIMの両方を設定して初めて、Gmailに迷惑メール扱いされなくなった DKIM: 'PASS'(ドメイン: refirio.net) ■PHPから送信 ※未検証 ※PHPMailerでSMTPを使って送信する場合、何も考えずに送信すれば対応できているはず PHPの標準命令で送信する場合、DKIM署名付きで送信する必要があるみたい PHPでDKIM署名を作成する | Tricorn Tech Labs https://lab.tricorn.co.jp/yamada/4109
■DMARCの設定
※未検証 送信ドメイン認証技術(SPF、DKIM )やDMARCとはどのような仕組みか?|メールマーケティングのCuenote https://www.cuenote.jp/library/marketing/dmarc.html なりすましを撲滅する?「DMARC」の概要をざっくり理解しよう | メルラボ https://mailmarketinglab.jp/about-dmarc/ Amazon Linux 2でDKIMの設定 (ついでにSPF/DMARCも) - Qiita https://qiita.com/biatunky/items/9009c95754da4b2e5571 AWS SESでのメール送信時にSPFの設定は必要だよ! - Qiita https://qiita.com/seiketkm/items/a4ddef03b7852353f554
■SSL証明書の導入
※未検証 メーラを設定する際「mail.refirio.net への接続は暗号化されません。」という警告が表示される。解消できるか Gmailで受信すると「このメールは ec2-52-193-221-232.ap-northeast-1.compute.amazonaws.com で暗号化されませんでした」のような表示がされる。解消できるか メーラーとメールサーバがやりとりする際のセキュリティに関するもの? Webサーバと同様、SSL証明書の設定が必要か。オレオレ証明書ではなく、正式なものが必要か SSLサーバ証明書 : dovecotサーバ証明書のインストール方法 | DigiCert https://rms.ne.jp/sslserver/install/install_dovecot-html/ DovecotへのSSL証明書の設定 - 初めてのVPS構築 https://linux-svr.com/SSL%E8%A8%BC%E6%98%8E%E6%9B%B8/45.php
■その他メモ
・PostfixやDovecotでタイムゾーンの設定は不要か 動作確認の際に、ログの日時などを確認したい ・Webサーバの同居も試す ・現状、stg.refirio.net は作成していないので試す ・サーバを再起動しても問題ないか試す。再起動の直前に正常動作を確認する ・110番ポートなど、不要そうなものを閉じても大丈夫か試す ・DMARCも試す ・トラブル対応時のことを考えて、色々な接続テスト方法を確立しておきたい
■トラブルシューティング
■Postfixの起動時にエラー # systemctl restart postfix Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details. systemctl status postfix.service でエラーの詳細を確認できた /etc/postfix/master.cf の編集ミスを修正すれば大丈夫になった ■Dovecotの起動時にエラー # service dovecot start Redirecting to /bin/systemctl start dovecot.service Job for dovecot.service failed because the control process exited with error code. See "systemctl status dovecot.service" and "journalctl -xe" for details. systemctl status dovecot.service でエラーの詳細を確認できた /etc/dovecot/dovecot.conf の編集ミスを修正すれば大丈夫になった ■ログを確認 # cat /var/log/maillog 基本的に上記ファイルにエラーなどが記録される ■コマンドでメール送信 メール送信の検証に 以下のコマンドでメール送信はできた # yum -y install mailx # echo "本文" | mail -s "タイトル" -r info@refirio.net refirio.net@gmail.com ■メーラの設定 ※接続の試行錯誤メモ ★「認証方式:CRAM-MD5」を登録する箇所がない? 「サーバー設定 → セキュリティ設定 → 認証方式」を「暗号化されたパスワード認証」にしてみる 送信(SMTP)設定も「暗号化されたパスワード認証」にしてみる …が送受信できず。だけど、以下にあるようにユーザ名の間違いであってこの対応は正しいかも Thunderbirdで「受信」を行ってみると、特にエラーは表示されなかった…が受信もできなかった。dovecotがそもそも起動されていなかった 起動して再度試すと「ユーザー名 info でサーバー mail.refirio.net へのログインに失敗しました」となった 送信を試すとエラーになった Gmailから送信してみる。エラーにはならない。エラーメールも返ってこない…が、届かない 再度設定を試して、送受信のテストをしてみるか ★ユーザ名が info になっているので info@refirio.net にしてみる メールを受信できた ★送信しようとすると、まだ以下のエラーになる メールの送信中にエラーが発生しました。サーバーからの応答: 454 4.7.1 <refirio@gmail.com>: Relay access denied メッセージの受信者 "refirio@gmail.com" を確認し、再度試してください。 ★ユーザ名が info になっているので info@refirio.net にしてみる メッセージを送信できませんでした。 送信 (SMTP) サーバー mail.refirio.net が暗号化されたパスワードをサポートしていないようです。 アカウントの設定直後の場合は、[アカウント設定] の [送信 (SMTP) サーバー] で [認証方式] を [平文のパスワード認証 (安全でない)] に変更し、再度試してください。認証が突然失敗するようになった場合は、誰かがパスワードを盗もうとしている可能性があります。 ★接続の保護は「なし」で、認証方式は「平文の認証パスワード(安全でない)」としてみる パスワードの入力を求められるが、入力しても以下のエラーになる メッセージを送信できませんでした。 予期しないエラー 80004005 により失敗しました。詳細は不明です。 原因不明の問題により、送信 (SMTP) サーバー mail.refirio.net を利用してメッセージを送信できませんでした。送信 (SMTP) サーバーの設定が正しいか確認し、再度試してください。 以下について設定できていないからか。それともまだ必要な設定が抜けているか 同じ設定でロジスクエアのテストアドレスは送受信できたので、メーラー側の設定ではなくメールサーバ側の設定が怪しいか 認証方式:CRAM-MD5 その他:OP25B を有効化。(Port:587) サーバ側のエラーメッセージを確認 # cat /var/log/maillog Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: connect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205] Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication failure: Password verification failed Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205]: SASL PLAIN authentication failed: generic failure Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied Apr 10 05:27:33 ip-10-0-0-53 postfix/smtpd[5107]: warning: p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205]: SASL LOGIN authentication failed: generic failure Apr 10 05:27:34 ip-10-0-0-53 postfix/smtpd[5107]: disconnect from p7cdba6cd.osakff01.ap.so-net.ne.jp[124.219.166.205] # ll /etc | grep sasldb2 -rw-r----- 1 root root 12288 Apr 10 02:04 sasldb2 大丈夫なサーバでは以下のようになっていた -rw-r----- 1 root postfix 12288 Apr 2 06:13 sasldb2 同じように変更してみる # chgrp postfix /etc/sasldb2 # ll /etc | grep sasldb2 -rw-r----- 1 root postfix 12288 Apr 10 02:04 sasldb2 メールが届いた Gmailで受信すると、SPFとDKIMはそれぞれ以下のようになっていた 大丈夫そう SPF: PASS(IP: 203.0.113.1) DKIM: 'PASS'(ドメイン: refirio.net) ★サーバを一から設定し直すと、メール送信時に以下のエラーになった?メーラー側も一から設定し直すと大丈夫になった メッセージは送信されましたがコピーは送信済みフォルダー (送信済みトレイ) に保存されませんでした。ネットワークエラーまたはファイルアクセスエラーが原因です。 もう一度試すかメッセージをローカルの ローカルフォルダー/送信済みトレイ-info@refirio.net に保存してください。