CentOS7メールサーバ構築 ①<SMTPサーバ構築>
SMTP AUTH + Postfix ( sasldb2認証 )


◇  以下構成で送信メールサーバを段階的に構築 ◇
 OS   : CentOS 7.6
 SMTP : Postfix 2.10
 認証方式:smtp-auth
 smtp認証:sasldb2
 認証メカニズム:digest-md5 / plain
 送信ポート:submission (587番ポート)
 SMTPリレー:G-mail
 リレーサーバ間通信暗号化:STARTTLS

◇ 事前準備 ◇
 G-mailアプリケーションパスワード取得済
 Googleアカウントで「安全性の低いアプリの許可」を設定済
 DNSにMX/ Aレコード/SPFを登録済TLS 使用可
 ルータで以下指定ポート開放
  ・SMTP(TCP:25)ポート
  ・SUBMISSION(TCP:587)ポート
  ・POP3(TCP:110)ポート ※受信サーバ構築準備


Postfix導入

①Postfixインストール(postfix.x86_64 2:2.10.1-7.el7)

# yum -y install postfix

②Postfix設定  [ main.cf ]

# vi /etc/postfix/main.cf

#77行目追記:ホストのFQDN
myhostname <ドメイン名> 例:net-powered.com

#84行目追記:ドメイン名
mydomain = <ドメイン名>   例:net-powered.com

#100行目追記:メールアドレス@以降にドメイン名表示
98行目 #myorigin = $myhostname
99行目 #myorigin = $mydomain
100行目 myorigin = $mydomain

#メール送受信で利用するネットワークインターフェイス
#113行目コメント解除
#116行目コメントアウト
113行目 inet_interfaces = all
114行目 #inet_interfaces = $myhostname
115行目 #inet_interfaces = $myhostname, localhost
116行目 #inet_interfaces = localhost

#利用する通信プロトコル
#119行目コメントアウト
#120行目追記
119行目 #inet_protocols = all
120行目 inet_protocols = ipv4

#ローカルメール配信で利用可能なメールアドレス@以降の指定
164行目コメントアウト
165行目コメントアウト除去
164行目 #mydestination = $myhostname, localhost.$mydomain, localhost
165行目 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
166行目 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
167行目 #       mail.$mydomain, www.$mydomain, ftp.$mydomain

#267行目追記:メールを送信許可するネットワークをCIDR表記で指定
267行目 mynetworks = 127.0.0.0/8,<プライベートネットワークアドレス> 例:192.168.100.0/24

#419行目コメント解除:メールデータの保存形式
419行目 home_mailbox = Maildir/

574行目追記:メールサーバソフトウエア名隠蔽
573行目 #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
574行目 smtpd_banner = $myhostname ESMTP unknown 

##########以下最終行に追記################
#リレーホスト指定
relayhost = [smtp.gmail.com]:587

#SASL認証有効化
smtp_sasl_auth_enable = yes

#SASL認証ファイル指定
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

#SASL認証方式の指定(記述順に認証方式の優先順位高) 
smtp_sasl_mechanism_filter = digest-md5 plain

#SASLセキュリティオプション(隠蔽認証と平文認証を拒否)
smtpd_sasl_security_options = noanonymous

#TLS暗号化設定
#STARTTLS優先通信設定*TLS非対応の場合はSMTP有効
smtp_tls_security_level = may 

#TLSセキュリティオプション(隠蔽認証を拒否)
smtp_sasl_tls_security_options = noanonymous

#TLS暗号化ののログ出力設定(1: TLSハンドシェイクと証明書情報を保存)
smtp_tls_loglevel = 1

#STARTTLSと初回接続時にリモートサーバ名をログ出力
smtp_tls_note_starttls_offer = yes

#接続先証明書を検証するためのルート証明書の保存場所を指定
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

#TLSセッションキャッシュデータベース
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache 

#メールサイズ (10MB) 
message_size_limit = 10240000 

#メールボックス (1GB) 
mailbox_size_limit = 1024000000

③通信制御設定  [ master.cf ]

16行目と19行目をコメント解除
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

④Postfix 起動設定

Postfixデーモン起動
# systemctl start postfix

Postfixデーモン自動起動を有効化
# systemctl enable postfix
Created symlink from /etc/systemd/system/multi-user.target.wants/postfix.
service to /usr/lib/systemd/system/postfix.service.

⑤ファイアウォール設定 
smtp =  TCP:25番ポート 開放
submission  = TCP:587番ポート開放

# systemctl start postfix# firewall-cmd --add-service=smtp --zone=public --permanent
success
# firewall-cmd --add-port=587/tcp --zone=public --permanent
success
# firewall-cmd --reload
success

SMTP認証設定

①SASL導入(cyrus-sasl.x86_64 0:2.1.26-23.el7)
SASL(Simple Authentication and Security Layer)  = 認証システム用フレームワーク

# yum -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-md5 cyrus-sasl-plain

②G-mailのSMTPサーバ認証設定

# vi /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 <Googleアカウント>:<Googleアプリパスワード>

③パスワードをハッシュ化 

# postmap hash:/etc/postfix/sasl_passwd

④リレーサーバ ( G-mail ) 認証ファイル削除 ※ハッシュ化したので元ファイル不要

# rm -f /etc/postfix/sasl_passwd

⑤SASL認証設定

# vi /etc/sasl2/smtpd.conf
pwcheck_method: auxprop
mech_list: DIGEST-MD5 PLAIN

⑥SASLデータベースファイルのグループ設定およびパーミッション設定

# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2

◆POSTFIXコマンド

・設定ファイルの構文チェック

# postfix check

・Postfix設定値確認

Postfixのデフォルト設定値を表示
# postconf -d 
Postfixデフォルトの設定値との差分を表示
# postconf -n

・Postfixのバージョン確認

# postconf | grep mail_version
mail_version = 2.10.1
milter_macro_v = $mail_name $mail_version

以上で送信メールサーバの設定は取り合えず完了。
メールサーバー間通信内容暗号化等のセキュリティ対処については時間を見て作成予定。
※敢えて書いていない対処もあるので責任は自己責任でお願いします。


◆POSTFIXトラブルシュート

パスワードハッシュ化時に下記エラー表示が出力された場合の対処

# postmap hash:/etc/postfix/sasl_passwd
postmap: fatal: parameter inet_interfaces: no local interface found for ::1

原因:IPv6インターフェイスがサーバで無効化してある場合にエラー
対処:hostsの::1のインターフェイスをコメントアウト(#)してpostmapを再実行

例:
# vi /etc/hosts
      1 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdoma        in4
      2 #::1        #localhost localhost.localdomain localhost6 localhost6.localdom        ain6
      3 192.168.100.250 net-powered.com