CentOS7 メール設定 postfix dovecot

DNS設定

MXレコード、メールサーバのAレコード設定
メールサーバーのサブドメイン「mail」は任意

ホスト名            TYPE  TTL  VALUE              優先
mail.lists111.com A     3600 133.130.68.33
lists111.com      MX    3600 mail.lists111.com  10

ポート番号を使用しているプロセスを確認

netstat -tanp

メールサーバが使用するポート開放

  • SMPT(25)
  • SMTPS(465)
  • IMAPS(993)
  • POP3S(995)
# firewall-cmd --add-port=25/tcp --permanent
# firewall-cmd --add-port=465/tcp --permanent
# firewall-cmd --add-port=993/tcp --permanent
# firewall-cmd --add-port=995/tcp --permanent

// 設定反映
# firewall-cmd --reload

// 確認
# firewall-cmd --list-ports
465/tcp 995/tcp 25/tcp 993/tcp

基本パッケージ、開発ツールインストール

# yum -y groupinstall base
# yum -y groupinstall development
# yum -y groupinstall network-tools

Postfix、Dovecotインストール

# yum -y install postfix
// 確認
# postconf | grep mail_version
// 自動起動設定
# systemctl enable postfix.service
// 起動
# systemctl start postfix.service

# yum -y install dovecot
# dovecot --version
# systemctl enable dovecot
# systemctl start dovecot

mail.lists111.comの Let’s EncryptのSSL/TLS証明書取得

※Let’s Encryptの初期設定済 (設定方法

# systemctl stop httpd.service
# cd /home/ユーザー名/letsencrypt
# ./letsencrypt-auto certonly -a standalone -d mail.lists111.com
# systemctl start httpd.service

Postfix の設定

cp /etc/postfix/main.cf /etc/postfix/main.cf.org
vi /etc/postfix/main.cf

# メールサーバのホスト名(FQDN)指定
#myhostname = host.domain.tld
↓
myhostname = mail.lists111.com

# メールサーバのドメイン名指定
#mydomain = domain.tld
↓
mydomain = lists111.com

# メールアドレスの形式:ユーザ名@ドメイン名
#myorigin = $mydomain
↓
myorigin = $mydomain

# 全てのホストからメール受信
inet_interfaces = localhost
↓
inet_interfaces = all

# mydomain で指定したドメイン宛のメールを受信
mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
↓
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# 存在しないメールアドレス(ユーザ)宛のメールの受信拒否
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
↓
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

# 中継を許可する宛先ドメインを指定
#relay_domains = $mydestination
↓
relay_domains = $mydestination

# 転送サーバ不使用
#relayhost = [an.ip.add.ress]
↓
relayhost = 

# メールの格納フォーマット指定
#home_mailbox = Maildir/
↓
home_mailbox = Maildir/

# 不要な情報を非公開
#smtpd_banner = $myhostname ESMTP $mail_name
↓
smtpd_banner = $myhostname ESMTP

##### 最下部に追加 #####

# VRFYコマンド禁止
disable_vrfy_command = yes

# MailBoxの最大サイズ
# メールボックスがMaildir形式のためこの設定は無視されるが「message_size_limit」との兼ね合いのため設定
mailbox_size_limit = 204800000

# 受信メールサイズの制限「mailbox_size_limit」より少ない値
message_size_limit = 5120000

# 接続元の制限(スパムメール対策)
smtpd_client_restrictions =
    check_client_access hash:/etc/postfix/access
    reject_rbl_client zen.spamhaus.org
    reject_rbl_client all.rbl.jp
    reject_non_fqdn_sender
    reject_unknown_sender_domain

# エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)
smtpd_sender_restrictions =
  reject_rhsbl_sender zen.spamhaus.org
  reject_unknown_sender_domain

##### SMTP-Auth関連 #####
# SASL認証を有効化
smtpd_sasl_auth_enable = yes

# Dovecot SASL ライブラリを指定
smtpd_sasl_type = dovecot

# Dovecot SASL ライブラリの認証ソケットファイル /var/spool/postfix/ からの相対パスで記述
smtpd_sasl_path = private/auth

# 古いバージョンの AUTH コマンド (RFC 2554) を実装した SMTP クライアントとの相互運用性を有効
broken_sasl_auth_clients = yes

##### TLS/SSL関連 #####
# TLSを有効化
smtpd_use_tls = yes

# 宛先のメールサーバがTLSに対応していれば、通信を暗号化
smtp_tls_security_level = may

# サーバ証明書と秘密鍵を指定
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.lists111.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.lists111.com/privkey.pem

# TLSログレベルの設定
# 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て
smtpd_tls_loglevel = 1

# 暗号に関する情報を "Received:" メッセージヘッダに含める
smtpd_tls_received_header = yes

# 接続キャッシュファイルの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

# キャッシュの保持時間の指定
smtpd_tls_session_cache_timeout = 3600s

# 認証を通過したものはリレーを許可する(permit_sasl_authenticated)
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

smtps(SMTP-Auth over SSL)有効化

ファイルのバックアップ

# cp /etc/postfix/master.cf /etc/postfix/master.cf.org
# vi /etc/postfix/master.cf

#smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
↓
smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

ルックアップテーブル作成

# postmap /etc/postfix/access

設定に誤りがないかチェック

問題ない場合は表示なし

# postfix check

Postfix再起動

# systemctl restart postfix

Dovecot の設定

受信プロトコル設定

# vi /etc/dovecot/dovecot.conf

#protocols = imap pop3 lmtp
↓
protocols = imap pop3

暗号化を使う imaps と pop3s を有効、
平文で通信する imap と pop3 は「port = 0」を設定し無効に

# cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.org
# vi /etc/dovecot/conf.d/10-master.conf

service imap-login {
  inet_listener imap {
    #port = 143
↓
    port = 0
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
↓
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    #port = 110
↓
    port = 0
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
↓
    port = 995
    ssl = yes
  }
}

Dovecot SASL ライブラリの認証ソケットファイル指定

# vi /etc/dovecot/conf.d/10-master.conf

service auth {
・・・
  # Postfix smtp-auth
  #unix_listener /var/spool/postfix/private/auth {
  #  mode = 0666
  #}
・・・
}
↓
service auth {
・・・
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
・・・
}

認証方式設定

(平文パスワードを許可しだが、SSL/TLSで暗号化されますので問題ない)

# cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
# vi /etc/dovecot/conf.d/10-auth.conf

#disable_plaintext_auth = yes
↓
disable_plaintext_auth = no

auth_mechanisms = plain
↓
auth_mechanisms = plain login

SSL/TLSの有効化とサーバ証明書と秘密鍵指定

# cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.org
# vi /etc/dovecot/conf.d/10-ssl.conf

ssl = required
↓
ssl = yes

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
↓
ssl_cert = </etc/letsencrypt/live/mail.lists.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.lists.com/privkey.pem

メールボックスの場所指定

# cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
# vi /etc/dovecot/conf.d/10-mail.conf

#mail_location =
↓
mail_location = maildir:~/Maildir

ログの出力先変更

# cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.org
# vi /etc/dovecot/conf.d/10-logging.conf

#log_path = syslog
↓
log_path = /var/log/dovecot/dovecot.log

ログの出力先作成

# mkdir /var/log/dovecot

Dovecot 再起動

# systemctl restart dovecot

journalctl -u dovecot.service

/var/spool/postfix/private/auth が作成されているか確認

# ls -l
・・・
srw-rw-rw- 1 postfix postfix 0  1月  7 23:04 auth
・・・

// ファイルが作成されない場合はエラーログを確認
# journalctl -u dovecot.service

ログのローテーション設定

1日ごとにファイル名に日付、保存期間60日。

Postfixログの設定

出力先ディレクトリ作成

# mkdir /var/log/mail

出力先の変更

# vm /etc/rsyslog.conf

mail.*        -/var/log/maillog
↓
mail.*        -/var/log/mail/maillog

syslog再起動

# systemctl restart rsyslog

不要なログ削除

# rm -f /var/log/maillog*

ログローテーション設定

# /etc/logrotate.d/syslog
// 下記削除
/etc/logrotate.d/syslog

// 新規作成
# vi /etc/logrotate.d/maillog

/var/log/mail/maillog {
    daily
    missingok
    dateext
    rotate 60
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

確認

# logrotate -dv /etc/logrotate.d/maillog

下記のような表示でOK

rotating pattern: /var/log/mail/maillog after 1 days (60 rotations)
empty log files are rotated, old logs are removed

Dovecotログの設定

// 新規作成
# /etc/logrotate.d/dovecot

/var/log/dovecot/dovecot.log {
    daily
    missingok
    dateext
    rotate 60
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

確認

下記のような表示でOK

rotating pattern: /var/log/mail/maillog after 1 days (60 rotations)
empty log files are rotated, old logs are removed

メールアカウント作成

contact@lists111.com を作成
シェルログインは必要ないので/sbin/nologinを指定

# useradd -s /sbin/nologin contact
# passwd contact

メーラー設定

受信サーバー

・ユーザー名
contact
・サーバー
IMAP
・ホスト
mail.lists111.com
・ポート
993
・SSL
SSL/TLS
・認証方式
通常のパスワード認証
・ユーザー名
contact
・サーバー
SMTP
・ホスト
mail.lists111.com
・ポート
465
・SSL
SSL/TLS
・認証方式
通常のパスワード認証

第三者中継チェック

・第三者中継チェック RBL.JP
http://www.rbl.jp/svcheck.php

  • mail.lists111.com 入力
  • 下記表示でOK
  • 第三者中継テストの結果
    全てのテストが行われました, no relays accepted.

SPFレコードの設定

v=spf1 は固定。
ip4: IPアドレス
[/text]

・ホスト名
[空欄].lists111.com
・TYPE
・TTL
300
・VALUE
v=spf1 ip4:133.130.68.33 -all

・確認(時間を置いて)

# dig lists111.com txt

・・・
;; ANSWER SECTION:
lists111.com.  300  IN  TXT  "v=spf1 ip4:133.130.68.33 -all"

・メールのソース
下記があれがOK

Received-SPF: pass ・・・

参考にさせて頂いたサイト

あぱーブログ

SSLメールサーバ構築メモ Let’s Encrypt+Postfix+Dovecot

PAGE TOP