そういうのがいいブログ

某SIerで働く30代サラリーマンSEが、WEBエンジニアに憧れてプログラミング勉強をするブログ

CentOS8メールサーバ「SMTP-AUTH・OP25B」対応【Postfix・Dovecot設定】

CentOS8メールサーバ「SMTP-AUTH・OP25B」対応

・CentOS8にPostfixDovecotでメールサーバを構築したい。
・「SMTP-AUTH」の認証ができるようにしたい。
・送信のポートを25番ポートからサブミッション587番ポートに変更して「OP25B」対応をしたい。
・具体的な手順を教えてほしい。

こういった疑問に答えます。

本記事の内容

  1. CentOS8でメールサーバを構築した後に「SMTP-AUTH」対応する手順【PostfixDovecotの設定変更】
  2. CentOS8でメールサーバを構築した後に「OP25B」対応でサブミッション587番ポートに変更する手順【PostfixDovecotの設定変更】

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

こういった私が、解説していきます。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

souiunogaii.hatenablog.com

前提

今回の環境は、以下の記事の手順で、PostfixDovecotの設定をしてある前提です。

souiunogaii.hatenablog.com

souiunogaii.hatenablog.com

CentOS8でメールサーバを構築した後に「SMTP-AUTH」対応する手順【PostfixDovecotの設定変更】

SMTP-AUTH」とは

そもそも、「SMTP-AUTH」対応って何ですか?

SMTP AUTH」とはメール送信時にSMTP(送信)サーバーに対して認証を取る方式です。 「POP before SMTP」認証と比べ、受信(POP認証)と送信(SMTP認証)の認証を別々にする事で SPAMの踏み台になりにくく、セキュリティ向上が見込まれます。
「SMTP AUTH」とは何ですか。:Bizメール&ウェブ ビジネス(support.ntt.com)

SMTP-AUTH」対応はセキュリティ対策上、必要なものです。

今回は、DovecotのSASL認証機能を利用して「SMTP-AUTH」対応する手順を紹介します。

Dovecotの設定ファイル「10-master.conf」の修正

SMTP認証でDovecotのSASLを使えるように設定を変更します。

修正前のファイルのバックアップ

cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.original_bk
[root@SV-EARTH conf.d]# cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.original_bk

「10-master.conf」ファイルの修正

vi /etc/dovecot/conf.d/10-master.conf
[root@SV-EARTH conf.d]# vi /etc/dovecot/conf.d/10-master.conf
Postfix smtp-auth のコメントを外す
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

Dovecotの設定変更後の確認

doveconf -n
[root@SV-EARTH conf.d]# doveconf -n
# 2.3.8 (9df20d2db): /etc/dovecot/dovecot.conf
# OS: Linux 4.18.0-193.14.2.el8_2.x86_64 x86_64 CentOS Linux release 8.2.2004 (Core)
# Hostname: sv-earth.ad.planet.jp
auth_mechanisms = plain login
disable_plaintext_auth = no
first_valid_uid = 1000
listen = *
login_trusted_networks = 192.168.1.0/24
mail_location = maildir:~/Maildir
mbox_write_locks = fcntl
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
}
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_cipher_list = PROFILE=SYSTEM
ssl_key = # hidden, use -P to show it
userdb {
  driver = passwd
}

設定変更後のDovecot再起動

systemctl restart dovecot
systemctl status dovecot
[root@SV-EARTH conf.d]# systemctl restart dovecot
[root@SV-EARTH conf.d]# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-10-24 23:11:12 JST; 8s ago
     Docs: man:dovecot(1)
           http://wiki2.dovecot.org/
  Process: 85859 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
  Process: 85864 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
 Main PID: 85872 (dovecot)
    Tasks: 4 (limit: 47652)
   Memory: 4.8M
   CGroup: /system.slice/dovecot.service
           tq85872 /usr/sbin/dovecot -F
           tq85873 dovecot/anvil
           tq85874 dovecot/log
           mq85875 dovecot/config

1024 23:11:11 SV-EARTH systemd[1]: Stopped Dovecot IMAP/POP3 email server.
1024 23:11:11 SV-EARTH systemd[1]: Starting Dovecot IMAP/POP3 email server...
1024 23:11:12 SV-EARTH systemd[1]: Started Dovecot IMAP/POP3 email server.
1024 23:11:12 SV-EARTH dovecot[85872]: master: Dovecot v2.3.8 (9df20d2db) starting up for imap, pop3, lmtp

Postfixの認証の確認

postconf -a
[root@SV-EARTH conf.d]# postconf -a
cyrus
dovecot

Postfixの設定ファイル「main.cf」の修正

修正前のファイルのバックアップ

cp -p /etc/postfix/main.cf /etc/postfix/main.cf.original_bk2
[root@SV-EARTH postfix]# cp -p /etc/postfix/main.cf /etc/postfix/main.cf.original_bk2

「main.cf」ファイルの修正

vi /etc/postfix/main.cf
[root@SV-EARTH postfix]# vi /etc/postfix/main.cf
local_recipient_maps (Linuxローカルユーザーのみから受付ける)
# The right-hand side of the lookup tables is conveniently ignored.
# In the left-hand side, specify a bare username, an @domain.tld
# wild-card, or specify a user@domain.tld address.
#
local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =
smtpd_banner (SMTP接続でバナーの表示をしない)
# SHOW SOFTWARE VERSION OR NOT
#
# The smtpd_banner parameter specifies the text that follows the 220
# code in the SMTP server's greeting banner. Some people like to see
# the mail version advertised. By default, Postfix shows no version.
#
# You MUST specify $myhostname at the start of the text. That is an
# RFC requirement. Postfix itself does not care.
#
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP
SMTP-AUTH用の設定を追加
### SMTP-AUTH
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination

Postfix設定変更後の確認

[root@SV-EARTH postfix]# postfix check
[root@SV-EARTH postfix]#

CentOS8でメールサーバを構築した後に「OP25B」対応でサブミッション587番ポートに変更する手順【PostfixDovecotの設定変更】

Outbound Port 25 Blocking(OP25B)とは

そもそも、「OP25B」対応って何ですか?

Outbound Port 25 Blocking(OP25B)とは、インターネットサービスプロバイダ―(Internet Service Provider:ISP)が、スパムメールの送信を防ぐために、SMTPの標準ポートであるTCP 25番をブロックして、自ネットワーク外にあるSMTPサーバを利用できないようにする手法のことである。JEAG(Japan Email Anti-Abuse Group)が導入を推奨していて、日本国内のほとんどのISPが実施している。
Outbound Port 25 Blocking(OP25B)とは:@IT(atmarkit.co.jp)

OP25B」対応をしているISPではSMTPで使う25番ポートを利用した通信が出来ません。
専用のサブミッションポートの587番ポートを利用する必要があります。

今回は、Postfixでサブミッションポートの587番ポートを利用するよう設定変更する手順を紹介します。

Postfixの設定ファイル「master.cf」の修正

修正前ファイルのバックアップ

cp -p /etc/postfix/master.cf /etc/postfix/master.cf.original_bk
[root@SV-EARTH postfix]# cp -p /etc/postfix/master.cf /etc/postfix/master.cf.original_bk

「master.cf」ファイルの修正

vi /etc/postfix/master.cf
[root@SV-EARTH postfix]# vi /etc/postfix/master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
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

設定変更後のPostfix再起動

systemctl restart postfix
systemctl status postfix
[root@SV-EARTH postfix]# systemctl restart postfix
[root@SV-EARTH postfix]# 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 Sat 2020-10-24 23:26:51 JST; 7s ago
  Process: 86039 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
  Process: 86059 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 86057 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 86054 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 86127 (master)
    Tasks: 3 (limit: 47652)
   Memory: 4.9M
   CGroup: /system.slice/postfix.service
           tq86127 /usr/libexec/postfix/master -w
           tq86128 pickup -l -t unix -u
           mq86129 qmgr -l -t unix -u

1024 23:26:49 SV-EARTH systemd[1]: Stopped Postfix Mail Transport Agent.
1024 23:26:49 SV-EARTH systemd[1]: Starting Postfix Mail Transport Agent...
1024 23:26:51 SV-EARTH postfix/master[86127]: daemon started -- version 3.3.1, configuration /etc/postfix
1024 23:26:51 SV-EARTH systemd[1]: Started Postfix Mail Transport Agent.

ポートの確認

netstat -nat

SMTPの25番ポート、POP3110番ポート、IMAP4の143番ポート、サブミッションポートの587番ポートが、「LISTEN」になっています。

[root@SV-EARTH postfix]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN

SMTP-AUTH」と「OP25B」の確認テスト

テスト準備(ユーザー名/パスワードをBase64エンコードした文字列を作成)

perl -MMIME::Base64 -e 'print encode_base64("mail01\0mail01\0●●●●●●パスワード");'
[root@SV-EARTH postfix]# perl -MMIME::Base64 -e 'print encode_base64("mail01\0mail01\0●●●●●●パスワード");'
bWFpbDAxAG1haWwwMQBtYWlsMDF4

SMTPの25番ポートへの接続テスト

telnetSMTPの25番ポートへ接続

telnet localhost 25
[root@SV-EARTH postfix]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 SV-EARTH.ad.planet.jp ESMTP

ehlo コマンドで応答。

ehlo ad.planet.jp
ehlo ad.planet.jp
250-SV-EARTH.ad.planet.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

AUTH PLAIN コマンドで応答。

AUTH PLAIN
334

ユーザー名/パスワードをBase64エンコードした文字列を入力。

bWFpbDAxAG1haWwwMQBtYWlsMDF4
bWFpbDAxAG1haWwwMQBtYWlsMDF4
235 2.7.0 Authentication successful

quit で終了。

quit
quit
221 2.0.0 Bye
Connection closed by foreign host.

サブミッションポートの587番ポートへの接続テスト

telnetSMTPの587番ポートへ接続

telnet localhost 587
[root@SV-EARTH postfix]# telnet localhost 587
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 SV-EARTH.ad.planet.jp ESMTP

ehlo コマンドで応答。

ehlo ad.planet.jp
ehlo ad.planet.jp
250-SV-EARTH.ad.planet.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

AUTH PLAIN で応答。

AUTH PLAIN
AUTH PLAIN
334

ユーザー名/パスワードをBase64エンコードした文字列を入力。

bWFpbDAxAG1haWwwMQBtYWlsMDF4
bWFpbDAxAG1haWwwMQBtYWlsMDF4
235 2.7.0 Authentication successful

quit で終了。

quit
quit
221 2.0.0 Bye
Connection closed by foreign host.

ファイアーウォールの設定変更

ファイアウォールに「smtp-submission」を追加

firewall-cmd --zone=public --add-service=smtp-submission --permanent
firewall-cmd --reload
[root@SV-EARTH postfix]# firewall-cmd --zone=public --add-service=smtp-submission --permanent
success
[root@SV-EARTH postfix]# firewall-cmd --reload
success
firewall-cmd --list-all
[root@SV-EARTH postfix]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources:
  services: cockpit dhcpv6-client dns freeipa-ldaps freeipa-trust imap pop3 samba smtp smtp-submission
  ports: 3259-3268/tcp 49152-65535/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

メールソフトでのテスト

Windows10上のメールソフト「Mozilla Thunderbird」を使ってメール受信のテストをします。

メールソフトのアカウント設定

CentOS8メールサーバ「SMTP-AUTH・OP25B」対応

SSL暗号化を無しにしているので、「警告!」の画面が表示されます。
「接続する上での危険性を理解しました」のチェックを入れて「完了」

CentOS8メールサーバ「SMTP-AUTH・OP25B」対応

メールソフトの送信テスト

CentOS8メールサーバ「SMTP-AUTH・OP25B」対応

サーバー側のPostfixの送信ログの確認

/var/log/maillog
Oct 24 23:52:23 sv-earth postfix/smtpd[86273]: connect from pc-ganymede[192.168.1.101]
Oct 24 23:52:23 sv-earth postfix/smtpd[86273]: B815ACD9AA: client=pc-ganymede[192.168.1.101], sasl_method=PLAIN, sasl_username=mail01
Oct 24 23:52:23 sv-earth postfix/cleanup[86283]: B815ACD9AA: message-id=<2cf6dcb9-db75-4ca3-9223-ba6503795aed@ad.planet.jp>
Oct 24 23:52:23 sv-earth postfix/qmgr[86129]: B815ACD9AA: from=<mail01@ad.planet.jp>, size=615, nrcpt=1 (queue active)
Oct 24 23:52:23 sv-earth postfix/smtpd[86273]: disconnect from pc-ganymede[192.168.1.101] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6
Oct 24 23:52:23 sv-earth postfix/local[86284]: B815ACD9AA: to=<mail01@ad.planet.jp>, relay=local, delay=0.11, delays=0.08/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Oct 24 23:52:23 sv-earth postfix/qmgr[86129]: B815ACD9AA: removed

サーバー側のDovecotの受信ログの確認

/var/log/maillog
Oct 24 23:51:54 sv-earth dovecot[85874]: imap-login: Login: user=<mail01>, method=PLAIN, rip=192.168.1.101, lip=192.168.1.102, mpid=86276, secured, session=<XoKQ1muyOtrAqAFl>
Oct 24 23:51:54 sv-earth dovecot[85874]: imap(mail01)<86276><XoKQ1muyOtrAqAFl>: Logged out in=8 out=451 deleted=0 expunged=0 trashed=0 hdr_count=0 hdr_bytes=0 body_count=0 body_bytes=0
Oct 24 23:51:54 sv-earth dovecot[85874]: imap-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=192.168.1.101, lip=192.168.1.102, secured, session=<vO6S1muyO9rAqAFl>
Oct 24 23:51:56 sv-earth dovecot[85874]: imap-login: Login: user=<mail01>, method=PLAIN, rip=192.168.1.101, lip=192.168.1.102, mpid=86279, secured, session=<fmuq1muyPNrAqAFl>

まとめ

CentOS8.2で構築したメールサーバで、「SMTP-AUTH」と「OP25B」対応するように、PostfixDovecotの設定変更の手順を紹介しました。