CentOS8でサーバー構築 - 2.Postfix+Dovecot(MTA)

CentOS7ではデフォルトでPostfixが、古いものではsendmailがインストールされていたが、
CentOS8ではPostfix、SendmailなどのMTAがインストールされておらず、する必要がある。
メールの送受信ができるようにPostfixとDovecotを使えるようにしておく。
主にサーバーサイドからの送信を目的とした設定を記載しています。
MTAとは Mail Transfer Agent の略。ネットワーク上でメールを転送・配送するソフトウェアの事。Postfix、Sendmail、qmailなど。
それに対し、ユーザ側がメールを表示・作成・送受信するソフトウェアをMUA(Mail User Agent)という。メールクライアント、メーラーと呼ばれるもの。Outlook、Thunderbird、Becky!(私はこれ使ってます)など。
使用中のMTAの確認
# alternatives --display mta mta -ステータスは自動です。 リンクは現在 /usr/sbin/sendmail.postfix を指しています。 /usr/sbin/sendmail.postfix - priority 60 スレーブ mta-mailq: /usr/bin/mailq.postfix スレーブ mta-newaliases: /usr/bin/newaliases.postfix スレーブ mta-pam: /etc/pam.d/smtp.postfix スレーブ mta-rmail: /usr/bin/rmail.postfix スレーブ mta-sendmail: /usr/lib/sendmail.postfix スレーブ mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz スレーブ mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz スレーブ mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz スレーブ mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz スレーブ mta-smtpdman: /usr/share/man/man8/smtpd.postfix.8.gz 現在の「最適」バージョンは /usr/sbin/sendmail.postfix です。
使用中のMTAの変更
# alternatives --config mta 1 プログラムがあり 'mta' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/sbin/sendmail.postfix Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Postfix

実際に運用するには暗号化通信、スパム対策、などの対策も必要だが、
今回はCentOS上で動作するWebアプリケーションの作製が主な目的のためとりあえず割愛。
参照:CentOS8でサーバー構築 - 7.Postfix3.3+Dovecot2.3の暗号化設定(SSL/TLS)
インストール
# dnf -y install postfix
設定
# vi /etc/postfix/main.cf
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = mail.kowloonet.local
・省略
・
 #mydomain = domain.tld
mydomain = kowloonet.local

・省略
・
#myorigin = $myhostname
myorigin = $mydomain
・省略
・
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost

# Enable IPv4, and IPv6 if supported
inet_protocols = ipv4
・省略
・
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
・省略
・
#home_mailbox = Mailbox
home_mailbox = Maildir/
・省略
・
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown
・
・下記追加

# SMTP Auth
#
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

# Mail size limit
# 10M
message_size_limit = 10485760

# Mailbox size limit
# 1G
mailbox_size_limit = 1073741824

# OP25B
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
# vi /etc/postfix/master.cf
smtp      inet  n       -       n       -       -       smtpd
#smtp      inet  n       -       n       -       1       postscreen
#smtpd     pass  -       -       n       -       -       smtpd
#dnsblog   unix  -       -       n       -       0       dnsblog
#tlsproxy  unix  -       -       n       -       0       tlsproxy
submission inet n       -       n       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
ユーザー毎にメールボックスが作製されるように設定
# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/
既存ユーザにMaldirが存在しない場合はメールボックス作成
# mkdir -p /home/xiohei/Maildir/{new,cur,tmp}
# chmod -R 700 /home/xiohei/Maildir/
# chown -R xiohei. /home/xiohei/Maildir/
SMTP認証
# dnf -y install cyrus-sasl
# systemctl start saslauthd
# systemctl enable saslauthd
SMTP認証で使用するパスワード設定
# echo [smtp.gmail.com]:587 Gmaiのlアドレス:Gmailのパスワード > /etc/postfix/sasl_passwd
# chmod 640 /etc/postfix/sasl_passwd
# postmap /etc/postfix/sasl_passwd
OP25B対策リレーに使うGmailアカウント設定
リレー(中継)に使うGmailアカウントのセキュリティレベルを変更する必要があったため変更。
「リンクされているGoogleアカウントの重大なセキュリティ通知」のメールも飛んできました。
Gmailアカウントを管理 → セキュリティ → 安全性の低いアプリのアクセス を有効にする。
OP25:Outbound Port 25 Blocking。ISP(インターネットサービスプロバイダ)が迷惑メール対策として特定のサーバ以外からPort25をブロック。
Gmailのセキュリティ設定で中継がうまくいかない時のmailログ
# tail -f /var/log/maillog May 17 13:02:35 kowloonet postfix/smtp[9253]: 45CF0185725A: to=<送信先メールアドレス>, relay=smtp.gmail.com[64.233.189.109]:587, delay=1.8, delays=0.04/0.03/1.7/0, dsn=4.7.8, status=deferred (SASL authentication failed; server smtp.gmail.com[64.233.189.109] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/?p=BadCredentials q100sm5156446pjc.11 - gsmtp)
変更後は無事に送信できました。
# tail -f /var/log/maillog May 17 13:04:37 kowloonet postfix/smtp[9253]: 43B15185725D: to=<送信先メールアドレス>, relay=smtp.gmail.com[64.233.189.109]:587, delay=2.5, delays=0.02/0/1.7/0.86, dsn=2.0.0, status=sent (250 2.0.0 OK 1589688277 a16sm5273075pff.41 - gsmtp)
起動
# postfix check
# systemctl start postfix
# systemctl enable postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-05-11 17:26:22 JST; 9min ago
 Main PID: 8383 (master)
    Tasks: 3 (limit: 4884)
   Memory: 7.6M
   CGroup: /system.slice/postfix.service
           ├─8383 /usr/libexec/postfix/master -w
           ├─8384 pickup -l -t unix -u
           └─8385 qmgr -l -t unix -u

Dovecot

インストール
# yum -y install dovecot
設定
# vi /etc/dovecot/conf.d/10-mail.conf
#  <doc/wiki/MailLocation.txt >
#
mail_location = maildir:~/Maildir
# vi /etc/dovecot/conf.d/10-auth.conf
# See also ssl=required setting.
disable_plaintext_auth = no
# vi /etc/dovecot/conf.d/10-ssl.conf
# plain imap and pop3 are still allowed for local connections
ssl = no
起動
# systemctl start dovecot
# systemctl enable dovecot
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /usr/lib/systemd/system/dovecot.service.

root宛メールを一般ユーザへ転送

この場合は一般ユーザ xiohei
# sed -i '/^root:/d' /etc/aliases
# echo 'root: xiohei' >> /etc/aliases
# newaliases

メール配送の確認

Gmailなどの外のアドレス宛へメールが送信できるか確認。
mailコマンドが使えない場合はインストール。
mailxインストール
# dnf -y install mailx
メール送信
# echo testMessage| mail -s "test" 送信先メールアドレス
メールログ確認
# tail -f /var/log/maillog
May 18 07:26:42 kowloonet postfix/pickup[18628]: 6C4831857241: uid=0 from=
May 18 07:26:42 kowloonet postfix/cleanup[18829]: 6C4831857241: message-id=<20200517222642.6C4831857241@mail.kowloonet.local>
May 18 07:26:42 kowloonet postfix/qmgr[9097]: 6C4831857241: from=, size=451, nrcpt=1 (queue active)
May 18 07:26:46 kowloonet postfix/smtp[18831]: 6C4831857241: to=<送信先メールアドレス>, relay=smtp.gmail.com[64.233.189.108]:587, delay=3.9, delays=0.06/0.04/2.2/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK  1589754406 ce21sm6744215pjb.51 - gsmtp)
May 18 07:26:46 kowloonet postfix/qmgr[9097]: 6C4831857241: removed
status=sent と出てればOK。
キューの確認
# postqueue -p
キューの配送
# postqueue  -i キューのID
全てのキューの配送
# postqueue  -f
キューの削除
# postsuper -d キューのID
全てのキューの削除
# postsuper -d all