・CentOS8にPostfixとDovecotでメールサーバを構築したい。
・「SMTP-AUTH」の認証ができるようにしたい。
・送信のポートを25番ポートからサブミッション587番ポートに変更して「OP25B」対応をしたい。
・具体的な手順を教えてほしい。
こういった疑問に答えます。
本記事の内容
- CentOS8でメールサーバを構築した後に「SMTP-AUTH」対応する手順【PostfixとDovecotの設定変更】
- CentOS8でメールサーバを構築した後に「OP25B」対応でサブミッション587番ポートに変更する手順【PostfixとDovecotの設定変更】
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
- 本記事の内容
- 前提
- CentOS8でメールサーバを構築した後に「SMTP-AUTH」対応する手順【PostfixとDovecotの設定変更】
- CentOS8でメールサーバを構築した後に「OP25B」対応でサブミッション587番ポートに変更する手順【PostfixとDovecotの設定変更】
- 「SMTP-AUTH」と「OP25B」の確認テスト
- ファイアーウォールの設定変更
- メールソフトでのテスト
- まとめ
前提
今回の環境は、以下の記事の手順で、PostfixとDovecotの設定をしてある前提です。
CentOS8でメールサーバを構築した後に「SMTP-AUTH」対応する手順【PostfixとDovecotの設定変更】
「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 10月 24 23:11:11 SV-EARTH systemd[1]: Stopped Dovecot IMAP/POP3 email server. 10月 24 23:11:11 SV-EARTH systemd[1]: Starting Dovecot IMAP/POP3 email server... 10月 24 23:11:12 SV-EARTH systemd[1]: Started Dovecot IMAP/POP3 email server. 10月 24 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番ポートに変更する手順【PostfixとDovecotの設定変更】
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 10月 24 23:26:49 SV-EARTH systemd[1]: Stopped Postfix Mail Transport Agent. 10月 24 23:26:49 SV-EARTH systemd[1]: Starting Postfix Mail Transport Agent... 10月 24 23:26:51 SV-EARTH postfix/master[86127]: daemon started -- version 3.3.1, configuration /etc/postfix 10月 24 23:26:51 SV-EARTH systemd[1]: Started Postfix Mail Transport Agent.
ポートの確認
netstat -nat
SMTPの25番ポート、POP3の110番ポート、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番ポートへの接続テスト
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番ポートへの接続テスト
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」を使ってメール受信のテストをします。
メールソフトのアカウント設定
SSL暗号化を無しにしているので、「警告!」の画面が表示されます。
「接続する上での危険性を理解しました」のチェックを入れて「完了」
メールソフトの送信テスト
サーバー側の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」対応するように、PostfixとDovecotの設定変更の手順を紹介しました。