Memo

メモ > サーバ > 構築: メールサーバ設定

■メールサーバ構築
EC2でメールサーバを構築し、refirio.net のドメインでメールを送受信できるようにした検証メモ 以下は最近の記事なので参考にできるそう 引き続き内容は確認しておきたい CentOSとPostfixを使って送信専用のメールサーバーを構築する方法 - レムシステム エンジニアブログ https://www.rem-system.com/mail-postfix01/ CentOSのPostfixとDovecotで送受信ができるメールサーバーを構築 - レムシステム エンジニアブログ https://www.rem-system.com/mail-postfix02/ CentOSのPostfixとDovecotにSSLを設定して安全に通信を行う - レムシステム エンジニアブログ https://www.rem-system.com/mail-postfix03/ Ubuntu 22.04 でメールサーバーを作ったのでメモ - tmtms のメモ https://blog.tmtms.net/entry/202205-ubuntu-mail メールサーバ再入門 - Qiita https://qiita.com/fururun02/items/7e99c0a237a8cfdab848
■メールサーバの作成
■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)・143(IMAP)・587(サブミッション)番ポートを開けておく CentOS7環境の場合、以下のように設定する
# firewall-cmd --permanent --add-service=smtp # firewall-cmd --permanent --add-service=imap # firewall-cmd --permanent --add-service=smtp-submission # firewall-cmd --reload
■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 Postfixバーチャルメールボックス運用HowTo - Qiita https://qiita.com/i13ame/items/d1355c6ab77b0461a7f5 Postfix + dovecot バーチャルメールボックスの設定を深堀する https://web-creators-hub.com/linux/postfix3/ メール運用がロストテクノロジーになっていく話 - Qiita https://qiita.com/koichiro/items/d65ac1af03b9063f0592 ■Postfixのインストール
# yum list installed | grep postfix … 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)を設定(複数台構成のWebサーバから送信するなら、web1.refirio.net といった値にするといいみたい) #mydomain = domain.tld mydomain = refirio.net … ドメインを設定 #myorigin = $mydomain myorigin = $mydomain … ローカルからのメール送信時、送信元メールアドレスの@以降にドメイン名を付加 #inet_interfaces = localhost inet_interfaces = all … SMTP接続を待ち受けるネットワークインターフェース(localhostは自分自身からのメールのみ受け取る設定で、他SMTPサーバからの接続を受け付けない。送信専用サーバならデフォルト値localhostのままでいい) mydestination = $myhostname, localhost.$mydomain, localhost … 受け取るべきメールのドメイン。(今回は変更なしだが、「mydomain」の設定次第では最後に「, $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
サブミッションポート(587番ポート)は、 メール送信の際に認証を利用できるようにしたもの 詳細は以下を参照 サブミッションポートとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 https://wa3.i-3-i.info/word1773.html CentOS7 Postfix + SMTP-Auth/Submission Port - Qiita https://qiita.com/yoshidna/items/2d0b89086914a7be73a4 Postfix サブミッションポート(587番ポート)を有効にする手順 | mebee https://mebee.info/2020/05/27/post-11828/ CentOS 7 の Postfix で独自ドメインの設定 - Qiita https://qiita.com/bezeklik/items/438eadbdb06672f3c3b6 ■Postfixの設定補足 送信元アドレスが info@mail.example.com になる場合、/etc/postfix/main.cf で以下のように設定するといいみたい これはオプション設定で項目は用意されていないため、ファイルの最後に追記するといい
masquerade_domains = example.com
CentOSとPostfixを使って送信専用のメールサーバーを構築する方法 - レムシステム エンジニアブログ https://www.rem-system.com/mail-postfix01/ メールサーバ再入門 - Qiita https://qiita.com/fururun02/items/7e99c0a237a8cfdab848 ■Postfixの設定確認
# postconf … 現在の設定値を表示 # postconf -d … デフォルト値を表示 # postconf -n … デフォルト値と異なる設定値のみを表示
Postfixの設定確認をしてみる - Qiita https://qiita.com/emowl/items/06bdffa83e36b7dddd30
# postfix check … 設定をチェック(エラーが表示されなければ問題無い)
Postfixの設定ファイル(main.cf)の文法チェック │ TEAM T3A https://www.t3a.jp/blog/infrastructure/postfix-check-grammar/ ■Postfixの起動
# systemctl start postfix … 新規にインストールした場合は起動 # systemctl restart postfix … すでにインストールされていた場合は再起動 # systemctl enable postfix
■Dovecotの設定
■Dovecotのインストール
# 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 # systemctl enable dovecot
■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 … 「refirio.net」内の「info」や「Maildir」も設定される # 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で設定を確認 ※SPFもしくはDKIMを設定しないと、Gmailには届かないので注意 メニューから「ツール → アカウント設定 → アカウント操作 → メールアカウントを追加」を選択 あなたのお名前: 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@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 ※PHPMailerでのメール送信については、Etcetera.txt の「PHPMailerを使ってSMTPでメールを送信する」も参照 以下のコードで送信できた 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', 'XXXXXXXXXX'); // 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@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@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@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
■POP3の設定
■ファイヤーウォールの調整 110(POP3)番ポートを開けておく CentOS7環境の場合、以下のように設定する
# firewall-cmd --permanent --add-service=pop3 # firewall-cmd --reload
■Dovecotの設定
# vi /etc/dovecot/dovecot.conf
#protocols = imap pop3 lmtp protocols = imap pop3 … imapとpop3を有効
# systemctl restart dovecot
■メーラーから送受信 IMAPではなくPOP3を使って接続するようにする
■バーチャルメールボックスを使わない設定
※以前のメモももとに整理したい
■メールの確認
サーバ内のメールを、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@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@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 CentOSのPostfixで迷惑メール判定されないようDKIMを設定する - レムシステム エンジニアブログ https://www.rem-system.com/dkim-postfix04/
# 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 も設定する場合
以降にある「20200409」は「default」でもいいか もしくは、複数回作成したり定期的にキーを変更したりするなら、記載のとおり日付の方がいいか
# 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
※sendmailとPostfixでは、Milterと呼ばれるAPIが提供されている Milterを利用して外部プログラムと連携し、メールの受信や配送を制御する機能を追加できる Milterは通常、127.0.0.1の8891番ポートで稼働している DKIM署名を行なうための外部プログラムは、このアドレスとポートで待機している OpenDKIMの場合 /etc/opendkim.conf でポートを設定できるが、通常変更する必要は無い。また内部通信用なので、ファイヤーウォールで開放する必要も無い MTAとMilterによる外部連携 | OSSのデージーネット https://www.designet.co.jp/ossinfo/postfix/milter/ Postfix で dkim-milter(dkim-filter) を使ってDKIM に対応する(Debian/Ubuntu編) | レンタルサーバー・自宅サーバー設定・構築のヒント https://server-setting.info/debian/postfix-dkim-milter.html ■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から送信 ※未検証 ※PHPの標準命令で送信する場合、PHPMailerでSMTPを使って送信する場合、の両方で 普通に送信すればDKIM署名付きで送信できているみたい PHPでDKIM署名を作成する | Tricorn Tech Labs https://lab.tricorn.co.jp/yamada/4109 反映されていれば、Gmailに対してメールを送信してみる メッセージのソースを表示して以下のように表示されていれば成功 DMARC: 'PASS'
■DMARCの設定
※AmazonSESでDMARCを設定したときのメモが「AWS.txt」の「SES メール送信」にある 以下のとおりDNSを登録する mailtoには、DMARCレポートを受け取りたいメールアドレスを記載する Name: _dmarc.refirio.net Type: TXT Value: "v=DMARC1;p=quarantine;pct=25;rua=mailto:info@refirio.net" DNS設定後、少し時間をおいて以下のとおり反映されていることを確認する
$ dig _dmarc.refirio.net any ;; ANSWER SECTION: _dmarc.refirio.net. 3600 IN TXT "v=DMARC1;p=quarantine;pct=25;rua=mailto:info@refirio.net"
■メール受信の暗号化
メーラーを設定する際、 「mail.refirio.net への接続は暗号化されません。」 という警告が表示されるので対応する ■ファイヤーウォールの調整
# firewall-cmd --permanent --add-service=imaps # firewall-cmd --reload # firewall-cmd --list-all
以下のとおり、imapsが追加される
services: dhcpv6-client ftp http https imap smtp smtp-submission ssh ↓ services: dhcpv6-client ftp http https imap imaps smtp smtp-submission ssh
■証明書の作成
# cd /etc/pki/tls/certs # make dovecot.pem Country Name (2 letter code) [XX]:JP … 国名を設定 State or Province Name (full name) []:Tokyo … 都道府県名を設定 Locality Name (eg, city) [Default City]:Shibuya … 市区町村名を設定 Organization Name (eg, company) [Default Company Ltd]:refirio.net … 組織名を設定(なんでもいい) Organizational Unit Name (eg, section) []: … 空Enter(もしくは部署名を設定) Common Name (eg, your name or your server's hostname) []:mail.refirio.net … コモンネーム(Webサーバー名)を設定。SSL購入時に申請するものと一致させる Email Address []:refirio@example.com … 管理者メールアドレスを設定
■設定の変更
# vi /etc/dovecot/conf.d/10-ssl.conf … SSL/TLS関連の設定ファイルを編集
#ssl = required #ssl = no ssl = yes … SSL接続を有効化(requiredにすると必須になる?改めて検証したい) #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_cert = </etc/pki/tls/certs/dovecot.pem … 証明書を指定 #ssl_key = </etc/pki/dovecot/private/dovecot.pem ssl_key = </etc/pki/tls/certs/dovecot.pem … 証明書を指定
# systemctl restart dovecot
■メーラーの設定 IMAPの設定は以下のようにする 受信サーバ プロトコル: IMAP ホスト名: mail.refirio.net ポート番号: 993 接続の保護: SSL/TLS 認証方式: 自動検出 … 「暗号化されたパスワード認証」となる 登録しようとすると「セキュリティ例外の追加」というダイアログが表示され、以下が書かれている
例外的に信頼する証明書としてこのサイトの証明書を登録しようとします。 本物の銀行、通信販売、その他の公開サイトがこの操作を求めることはありません。 URL: mail.refirio.net:993
「次回以降にもこの例外を有効にする」にチェックを入れて「セキュリティ例外を承認」ボタンを押す 正式な証明書なら表示されないはず。改めて検証したい 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
■メール送信の暗号化
Gmailで受信したとき、まだ 「このメールは example.com で暗号化されませんでした」 と表示されているので対応する
# vi /etc/postfix/main.cf … SSL/TLS関連の設定を最終行に追記
smtp_tls_security_level = may
# systemctl restart postfix
これで「このメールは example.com で暗号化されませんでした」の表示が消えた 送信者と受信者の詳細を確認すると、「セキュリティ: 標準的な暗号化(TLS)」という表示が追加されている Gmailで「このメールは〜で暗号化されませんでした」を対処する | 己で解決!泣かぬなら己で鳴こうホトトギス https://onoredekaiketsu.com/encrypt-mail-transmission/ Gmail 非暗号化接続メールの警告表示をされないようにする方法 | あぱーブログ https://blog.apar.jp/web/4110/
■ログの確認
メールのログは送信受信とも、以下のファイルに記録される
# cat /var/log/maillog
メーラーを起動したとき、以下のようなログが記録された
Dec 4 18:21:41 refirio dovecot: imap-login: Login: user=<test@example.com>, method=CRAM-MD5, rip=219.122.243.233, lip=203.0.113.1, mpid=16572, TLS, session=<Gj8vjU7S8dvbevPp>
メールを受信したとき、以下のようなログが記録された
Dec 4 18:23:20 refirio postfix/smtpd[16574]: connect from mail-lf1-f47.google.com[209.85.167.47] Dec 4 18:23:21 refirio postfix/smtpd[16574]: 226F6CB4F: client=mail-lf1-f47.google.com[209.85.167.47]Dec 4 18:23:21 refirio postfix/cleanup[16576]: 226F6CB4F: message-id=<CABiFHFPYvKo86BLFBSmiQJOHammEnA6vcVOE+dSbUpMZ-JKeow@mail.gmail.com> Dec 4 18:23:21 refirio postfix/qmgr[16055]: 226F6CB4F: from=<example@gmail.com>, size=3293, nrcpt=1 (queue active)Dec 4 18:23:21 refirio postfix/virtual[16577]: 226F6CB4F: to=<test@example.com>, relay=virtual, delay=0.52, delays=0.51/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)Dec 4 18:23:21 refirio postfix/qmgr[16055]: 226F6CB4F: removed Dec 4 18:23:21 refirio postfix/smtpd[16574]: disconnect from mail-lf1-f47.google.com[209.85.167.47]Dec 4 18:23:55 refirio postfix/smtpd[16578]: connect from 219-122-243-233f1.osk2.eonet.ne.jp[219.122.243.233]
メールを送信したとき、以下のようなログが記録された
Dec 4 18:23:55 refirio postfix/smtpd[16578]: 6AEC8CADB: client=219-122-243-233f1.osk2.eonet.ne.jp[219.122.243.233], sasl_method=PLAIN, sasl_username=info@example.com Dec 4 18:23:55 refirio postfix/cleanup[16576]: 6AEC8CADB: message-id=<6ee9fbf2-3e90-8b9c-044c-bd21a793c382@example.com>Dec 4 18:23:55 refirio postfix/qmgr[16055]: 6AEC8CADB: from=<test@example.com>, size=1339, nrcpt=1 (queue active) Dec 4 18:23:55 refirio postfix/smtpd[16578]: disconnect from 219-122-243-233f1.osk2.eonet.ne.jp[219.122.243.233]Dec 4 18:23:55 refirio dovecot: imap(test@example.com): Logged out in=1298 out=717 Dec 4 18:23:57 refirio postfix/smtp[16579]: 6AEC8CADB: to=<example@gmail.com>, relay=gmail-smtp-in.l.google.com[142.250.157.27]:25, delay=1.7, delays=0.08/0.02/0.72/0.87, dsn=2.0.0, status=sent (250 2.0.0 OK 1638609837 np7si8160925pjb.75 - gsmtp)
■バックアップ
※未検証 メールデータ移行 - CentOSで自宅サーバー構築 https://centossrv.com/migrate_to_maildir.shtml Maildir のバックアップ https://www.shido.info/py/backup_maildir.html
■その他メモ
・PostfixやDovecotでタイムゾーンの設定は不要か 動作確認の際に、ログの日時などを確認したい ・Webサーバの同居も試す ・現状、stg.refirio.net は作成していないので試す ・サーバを再起動しても問題ないか試す。再起動の直前に正常動作を確認する ・110番ポートなど、不要そうなものを閉じても大丈夫か試す ・DMARCも試す ・トラブル対応時のことを考えて、色々な接続テスト方法を確立しておきたい ■AmazonLinux2での初期設定内容 以下はAmazonLinux2で確認した内容 PHPのmail関数やmb_send_mail関数でメール送信を行うと、最終的にはPostfixで送信されているみたい
# grep sendmail_path /etc/php.ini sendmail_path = /usr/sbin/sendmail -t -i # ll /usr/sbin | grep sendmail lrwxrwxrwx 1 root root 21 8月 25 2021 sendmail -> /etc/alternatives/mta -rwxr-xr-x 1 root root 247792 8月 1 2018 sendmail.postfix # ll /etc/alternatives/mta lrwxrwxrwx 1 root root 26 8月 25 2021 /etc/alternatives/mta -> /usr/sbin/sendmail.postfix # alternatives --config mta 1 プログラムがあり 'mta' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/sbin/sendmail.postfix
Postfixをインストールしてメール送信してみる - 本日も乙 https://blog.jicoman.info/2013/08/postfix_install/ 採用されている MTA の確認と切り替え方法について (CentOS 5.4) https://ez-net.jp/article/99/tbHOZztO/iqnhP1XOWWr1/ MTAをSendmailからPostfixに切り替える | りんか ネット https://rin-ka.net/sendmail2postfix/ phpからメール送信したいが、mail()関数を使っても何もおこらない - P-SQUARE MIDI Site https://psquare.hatenadiary.org/entry/20140108/p1
■トラブルシューティング
■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
基本的に上記ファイルにエラーなどが記録される このファイルの解析方法は Command.txt の「メールのログを解析」を参照 ■コマンドでメール送信 メール送信の検証に 以下のコマンドでメール送信はできた
# yum -y install mailx # echo "本文" | mail -s "タイトル" -r info@refirio.net example@gmail.com
■メーラーの設定 ※接続の試行錯誤メモ ★「認証方式:CRAM-MD5」を登録する箇所がない? 「サーバー設定 → セキュリティ設定 → 認証方式」を「暗号化されたパスワード認証」にしてみる 送信(SMTP)設定も「暗号化されたパスワード認証」にしてみる …が送受信できず。だけど、以下にあるようにユーザ名の間違いであってこの対応は正しいかも Thunderbirdで「受信」を行ってみると、特にエラーは表示されなかった…が受信もできなかった。dovecotがそもそも起動されていなかった 起動して再度試すと「ユーザー名 info でサーバー mail.refirio.net へのログインに失敗しました」となった 送信を試すとエラーになった Gmailから送信してみる。エラーにはならない。エラーメールも返ってこない…が、届かない 再度設定を試して、送受信のテストをしてみるか ★ユーザ名が info になっているので info@refirio.net にしてみる メールを受信できた ★送信しようとすると、まだ以下のエラーになる メールの送信中にエラーが発生しました。サーバーからの応答: 454 4.7.1 <example@gmail.com>: Relay access denied メッセージの受信者 "example@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 に保存してください。

Advertisement