- メールサーバ構築
- メールサーバの作成
- Postfixの設定
- Dovecotの設定
- DNSの設定
- メールユーザの作成
- メーラーから送受信
- メールユーザの追加
- PHPから送信
- メールの転送設定
- POP3の設定
- バーチャルメールボックスを使わない設定
- メールの確認
- SPFの設定
- DKIMの設定
- DMARCの設定
- メール受信の暗号化
- メール送信の暗号化
- ログの確認
- バックアップ
- その他メモ
- トラブルシューティング
メールサーバ構築
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
【入門】Postfixとは?メールサーバー構築方法と基本設定 - カゴヤのサーバー研究室
https://www.kagoya.jp/howto/it-glossary/mail/postfix/
メール運用がロストテクノロジーになっていく話 #SMTP - Qiita
https://qiita.com/koichiro/items/d65ac1af03b9063f0592
■プロトコル
SMTP ... メールの送信、転送に使われる。
POP ... メールの受信に使われる。メールデータは手元にダウンロードして閲覧する。
IMAP ... メールの受信に使われる。メールデータはサーバ上に置いたまま閲覧する。
メールサーバの作成
■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
サブミッションポート(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 で以下のように設定するといいみたい。
これはオプション設定で項目は用意されていないため、ファイルの最後に追記するといい。
#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
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の設定
※SMTP認証に「CRAM-MD5」を指定しているが、現在は「CRAM-SHA-1」や「CRAM-SHA-256」を使う方が好ましい。
# vi /etc/dovecot/dovecot.conf
■Dovecotの起動
#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
}
# 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 を編集。(最初はファイルが無いので新規に作成する。)
仮想メールボックスの作成。
ディレクトリ構成は以下のとおり。
/home/virtualmail/[ドメイン名]/[メールユーザ名]/Maildir
従って、
/home/virtualmail/refirio.net/info/Maildir
を作成することになる。
virtualmailディレクトリ配下の所有者は、全て "mailuser:mailuser" にする必要があるので注意。
info@refirio.net:{CRAM-MD5}3810c35cd82833f74aee20e8244707defa76155800d8ed4d784e6357fc0fb1d8
# 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 … 有効な受信者アドレス全てを持つ検索テーブル。
■SMTP送信ユーザの作成
saslpasswd2は「saslpasswd2 -p -u ドメイン -c ユーザ名」の書式で作成する。
info@refirio.net refirio.net/info/Maildir/ … 最初のユーザはPostfixの設定手順中に追加済み。必要に応じて追記する。
# postmap /etc/postfix/virtual-mailbox … virtual-mailboxファイルを、Postfixが参照するデータベースファイルに反映。
# systemctl restart postfix … Postfixを再起動。
# 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 を編集。
■SMTP送信ユーザの作成
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を再起動。
# 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
■メールログ参考
メールを転送したときのログは以下のようになっていた。
(Gmail refirio@gmail.com から info@refirio.net にメールを送信して、そのメールが test@refirio.work に転送されたときのログ。)
orig_to が転送元、to が転送先、relay は転送されたサーバ。
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を再起動。
# 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
■メーラーから送受信
IMAPではなくPOP3を使って接続するようにする。
#protocols = imap pop3 lmtp
protocols = imap pop3 … imapとpop3を有効。
# systemctl restart dovecot
バーチャルメールボックスを使わない設定
※以前のメモももとに整理したい。
メールの確認
サーバ内のメールを、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の変更。
※上記設定のフォーマットは以下のとおり。
[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵へのパス]
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 も設定する場合。
# vi /etc/opendkim/SigningTable … SigningTableの変更。
※上記設定のフォーマットは以下のとおり。
*@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名]
*@refirio.net 20200409._domainkey.refirio.net
*@stg.refirio.net 20200409._domainkey.stg.refirio.net … stg.refirio.net も設定する場合。
# vi /etc/opendkim.conf … 設定ファイルの編集。
■Postfixの設定
#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 … コメント解除。
# vi /etc/postfix/main.cf … 最終行へ設定を追記。
※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起動
# DKIM
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
# systemctl restart postfix
# 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の設定
※DMARCの概要は「Network.txt」の「メールを送信する際、迷惑メール扱いされないための設定(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関連の設定ファイルを編集。
■メーラーの設定
IMAPの設定は以下のようにする。
受信サーバ
プロトコル: IMAP
ホスト名: mail.refirio.net
ポート番号: 993
接続の保護: 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
例外的に信頼する証明書としてこのサイトの証明書を登録しようとします。
本物の銀行、通信販売、その他の公開サイトがこの操作を求めることはありません。
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関連の設定を最終行に追記。
これで「このメールは example.com で暗号化されませんでした」の表示が消えた。
送信者と受信者の詳細を確認すると、「セキュリティ: 標準的な暗号化(TLS)」という表示が追加されている。
Gmailで「このメールは〜で暗号化されませんでした」を対処する | 己で解決!泣かぬなら己で鳴こうホトトギス
https://onoredekaiketsu.com/encrypt-mail-transmission/
Gmail 非暗号化接続メールの警告表示をされないようにする方法 | あぱーブログ
https://blog.apar.jp/web/4110/
smtp_tls_security_level = may
# systemctl restart postfix
ログの確認
メールのログは送信受信とも、以下のファイルに記録される。
# 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 に保存してください。