CentOS7でメールサーバを構築する(最新版のPostfix+Dovecot)

メール(Postfix+Dovecot)CentOS7,Dovecot,Postfix

はじめに

CentOS7で送信メールサーバと受信メールサーバを構築します。構築後にクライアントソフトを使いメールの送信・受信が行えることまで確認します。

環境と要件

環境

メールサーバのOSはCentosOS7、送信メールサーバにPostfix、受信メールサーバにDovecotを使います。メールサーバはインターネットに外部公開するのでプライベートネットワーク内に位置しますがホームゲートウェイでNATをします。

なお、PostfixとDovecotは記載時点で最新版のものをインストールします。

ソフトウェアバージョン
CentOS77.7.1908
Postfix3.5.3
Devecot2.2.36
今回使用するソフトウェアのバージョン

要件

  • 当方の環境(ISP)がOP25Bの対策を行っているようなので、SMTPのTCP25番が外部に出ることができません。サブミッションポートによるTCP587でメール送信をするようにします。
  • 送信メールのリレー先はGmailでSMTP認証をします。(Gmailアカウントが必要)
  • 受信メールのプロトコルはIMAPとします。(POP3も可)
  • メールサーバのPostfixとDovecotは一つのCentOS7上にインストールします。
  • メールサーバのFQDNは「mail.lab-infra.com」とし、パブリックDNSでAレコードの名前解決が可能な状態になっていることとします。(正確には、グローバルIPアドレスはホームゲートウェイのWAN側インタフェースに設定されており、NATによりメールサーバのプライベートIPアドレスに変換され通信します)
  • 今回作成するアカウントは「kantaro」のみとします。メールアドレスは「kantaro@lab-infra.com」となります。
  • 動作確認は、下図の通り今回構築するメールサーバ(mail.lab-infra.com)とiCloudメールとの送信と受信を行います。

送信メールサーバの構築

Postfixのインストール

まずはインストールですが、CentOS7には標準で2系のPostfixがインストールされています。最新のPostfixは3系なので、一度、2系をアンインストールしその後3系をインストールします。

CentOS7標準のyumリポジトリー上で提供されているバージョンの確認。

# yum info postfix
<省略>
利用可能なパッケージ
名前                : postfix
アーキテクチャー    : x86_64
エポック            : 2
バージョン          : 2.10.1
リリース            : 9.el7
容量                : 2.4 M
リポジトリー        : base/7/x86_64
要約                : Postfix Mail Transport Agent
URL                 : http://www.postfix.org
ライセンス          : IBM and GPLv2+
説明                : Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH (SASL),
                    : TLS

Postfixのインストール状態を確認します。

# yum list installed | grep postfix
postfix.x86_64                     2:2.10.1-7.el7             @anaconda

インストールされていれば下記のようにPostfixの停止と削除をします。

# systemctl stop postfix.service
# yum remove postfix

次にPostfixの最新版を提供している「GhettoForge」というリポジトリをインストールします。

# yum -y install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm

yumコマンド時に標準でGhettoForgeを使用しないようにします。

# vi /etc/yum.repos.d/gf.repo

mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/$basearch/mirrorlist
#enabled=1   ←コメントアウト
enabled=0   ←追加

次にインストールします。

# yum -y --enablerepo=gf-plus install postfix3

Postfixのインストールは以上です。

Postfixの設定ファイル編集

設定ファイルの編集をします。基本設定、SMTP認証の有効化とGmailへのリレー有効化を実施します。

# vi /etc/postfix/main.cf

#myhostname = virtual.domain.tld
myhostname = mail.lab-infra.com   ←追加
<省略>
#mydomain = domain.tld
mydomain = lab-infra.com       ←追加
<省略>
#myorigin = $mydomain
myorigin = $mydomain         ←追加
<省略>
#inet_interfaces = localhost  ←コメントアウトする
inet_interfaces = all        ←追加
<省略>
#mydestination = $myhostname, localhost.$mydomain, localhost  ←コメントアウトする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain   ←追加
<省略>
#home_mailbox = Maildir/
home_mailbox = Maildir/       ←追加
<省略>
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown     ←追加
<省略>

<下記を最終行にすべて追加>
## ADD SMTP AUTH
message_size_limit = 10485760

## ADD SMTP AUTH
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

## ADD MaxReceiveSize
message_size_limit = 10485760

## ADD Gmail Relay
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

#submission inet n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd   ←コメントアウトを解除
<省略>
#  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_auth_enable=yes   ←コメントアウトを解除

Postfixの設定ファイル編集は以上です。

Gmail向けのSMTP認証とメールリレー設定

SMTP認証に必要なライブラリのインストールをします。

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

Gmailの認証用ファイルの作成をします。chmodでrootのみでしか読み書きできないようにし、postmapコマンドでデータベースの作成をします。

# echo [smtp.gmail.com]:587 [Gmailのメールアドレス]:[Gmailのパスワード] > /etc/postfix/sasl_passwd

# chmod 640 /etc/postfix/sasl_passwd

# postmap /etc/postfix/sasl_passwd

サービスの起動と自動起動

# systemctl start postfix
# systemctl enable postfix

# systemctl start saslauthd
# systemctl enable saslauthd

送信メールサーバの設定は以上です。

受信メールサーバの構築

Devecotの設定

まずはインストール。

# yum -y --enablerepo=gf-plus install dovecot23

設定ファイルの編集をします。

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

#mail_location =
mail_location = maildir:~/Maildir   ←追加
# vi /etc/dovecot/conf.d/10-auth.conf

#disable_plaintext_auth = yes
disable_plaintext_auth = no   ←追加
# vi /etc/dovecot/conf.d/10-ssl.conf

#ssl = required   ←コメントアウト
ssl = no   ←追加

サービスの起動と自動起動

# systemctl start dovecot
# systemctl enable dovecot

受信メールサーバの設定は以上です。

ユーザ追加

次に、メールアドレスを利用するユーザの追加作業をします。

ユーザの追加・パスワード設定・Maildir作成

# useradd kantaro
# passwd kantaro   ←Enter後、任意のパスワードを入力

自ドメインメールサーバ用のSMTP認証設定

# echo '任意のパスワードを入力' | saslpasswd2 -p -u mail.lab-infra.com -c kantaro

# sasldblistusers2
kantaro@mail.lab-infra.com: userPassword   ←上で設定した内容が表示される

# chgrp postfix /etc/sasldb2   ←初回のみ実施



#### ユーザを削除したい場合は下記 ####
# saslpasswd2 -d kantaro -u mail.lab-infra.com
# userdel -r kantaro

Gmailの設定

ここまでの設定でメール送信自体は可能になりますが、GmailにメールリレーをしているのでGmailのメールアドレスで転送してしまいます。つまり、受信側からするとFromがGmailのメールアドレスになります。
きちんと自ドメイン(今回で言うと「kantaro@lab-infra.com」)のメールアドレスで届けるには以降の対応をします。以降、しばらくGmailのWeb画面操作になります。

まず、GmailにWebログインし、右上の「歯車」を押し、「すべての設定を表示」を押します。

「アカウントとインポート」から「他のメールアドレスを追加」を押します。

「メールアドレス」欄に自ドメインのメールアドレスを入力し、エイリアスのチェックボックスを外し「次のステップ」を押します。

下図の通り、①~④を入力します。なお、SMTPサーバ欄の記載がなければメールサーバのドメインを入力します。
また、「SMTPサーバ」欄に自ドメインのメールサーバが入力されていなければFQDNで入力します。

メールに確認コードが届いてますので、入力し確認ボタンを押します。

Gmailの設定は以上です。

メールクライアントの設定

Thunderbird

Thunderbirdでクライアント設定を行います。

まず、Thunderbirdを起動し、画面右上の三本線から「アカウント設定」を押し、左下の「アカウント操作」>「メールアカウントを追加」を押します。

続いて、下記の画面の通り進めます。

①は受信側に表示される送信者氏名です。②は自ドメインのメールアドレスを入力します。③にアカウントのパスワードを入力し、「続ける」ボタンで進みます。

今回はIMAPにしましたが、POP3も可能です。

今後、暗号化対応も試す予定ですが、今回はこのまま進めます。

アカウントが読み込まれれば左ペインに表示されます。

Thunderbirdの設定は以上です。次に動作確認をします。

動作確認

メール送受信の確認

当方のiCloudメールから今回作成した「kantaro@lab-infra.com」宛てにメールを送信しました。

下記の通り正常にThunderbirdで受信しています。

次に上記で受信したTest Mailに返信しました。

下記の通りiCloudで受信しており、無事、メール送受信が可能であることが確認できました。

Maildirの確認

Maildirはメール毎にファイルを作成します。試しに、「kantaro@lab-infra.com」に3通のメールがある状態にして確認します。

この状態でMaildir/curを確認すると、3つのファイルが作成されています。問題なくMaildir方式になっていることが確認できました。

# ls -l /home/kantaro/Maildir/cur/
合計 12
-rw------- 1 kantaro kantaro 1923  8月 10 00:03 1596985384.Vfd00I2066132M275956.centos7mgr-01.localdomain:2,Sb
-rw------- 1 kantaro kantaro 1923  8月 10 00:04 1596985467.Vfd00I2066134M307156.centos7mgr-01.localdomain:2,b
-rw------- 1 kantaro kantaro 1923  8月 10 00:04 1596985490.Vfd00I2066136M494257.centos7mgr-01.localdomain:2,b
#

以上でPostfixとDovecotの構築を終わります。