【AlmaLinux9】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築する方法

VPS上のAlmaLinux9にPostfix + SMTP-AUTH + Dovecotでメールサーバを構築する方法です。

最初はSSL/TLSでの通信暗号化を行わずに環境を構築して、問題無く動作することの確認ができた後に通信経路の暗号化を行っていく予定です。

SSL/TLSの設定を後で行う理由は、段階的に環境を構築して行くことで、問題が発生した際にどの部分で問題が発生しているのか原因の絞り込みが簡単になるからです。

作業工程

作業工程としては下記のとおりとなります。

  • DNS設定
  • ファイアウォール設定
    • ポート開放 25,587,110,143
  • Postfixインストール
  • Dovecotインストール
  • Postfix設定
    • main.cf
    • master.cf
    • newaliases
    • 設定反映
  • Dovecot設定
    • /etc/dovecot/dovecot.conf
    • /etc/dovecot/conf.d/10-auth.conf
    • /etc/dovecot/conf.d/10-mail.conf
    • /etc/dovecot/conf.d/10-master.conf
    • /etc/dovecot/conf.d/10-ssl.conf
    • 設定反映

DNS設定

事前にDNSへ下記項目の設定を済ませておいてください。

  • Aレコード(ホスト名の正引き)
  • MXレコード(受信するメールドメイン)
  • SPF設定
  • PTRレコード(逆引き)

SPFの設定ついての説明は下記ページで簡単に解説していますので、よかったら参考にしてみてください。

https://vpslife.server-memo.net/spf-record_setting/

PTRレコードについては、VPS上にメールサーバを構築する場合、設定ができな場合が多いので可能ならば設定という形になります。

VPSであればPTR(逆引き)レコードの設定を行えるところが多くなってきているようです。(設定方法はVPS提供会社のマニュアルやヘルプで確認できると思います)

DNSの設定方法はドメイン業者やDNSサーバごとに異なるため省略します。

ファイアウォール設定

PostfixとDovecotで使用する下記のポートを開放します。

  • 25 SMTP
  • 587 OP25B(Outbound Port25 Blocking)
  • 110 POP3
  • 143 IMAP
$ su -
# firewall-cmd --permanent --add-port=25/tcp
# firewall-cmd --permanent --add-port=587/tcp
# firewall-cmd --permanent --add-port=110/tcp
# firewall-cmd --permanent --add-port=143/tcp

設定を反映させます。

# firewall-cmd --reload

設定したポートが登録されていることを確認します。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client http https
  ports: 10022/tcp 25/tcp 587/tcp 110/tcp 143/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Postfixインストール

dnfを使ってPostfixをインストールします。

# dnf install postfix

Postfixの設定は、SMTP-AUTHで使用するDovecot-SASLライブラリをインストールしてから行っていきます。

Dovecotインストール

dnfを使ってDovecotをインストールします。

# dnf install dovecot

これでDovecot-SASLライブラリもインストールされます。

Postfix設定

以下のファイルを編集してPostfixの設定を行っていきます。

  • /etc/postfix/main.cf
  • /etc/postfix/master.cf

メールサーバのホスト名とメールのドメイン名は下記の内容で設定していきますので、ご自分の環境では適宜読み替えて設定を行ってください。

  • ホスト名: mail.server-memo.net
  • メールドメイン: server-memo.net

main.cf

main.cfを編集して、Postfixの設定を行います。

# cd /etc/postfix/
# cp -p main.cf main.cf_$(date +%Y%m%d-%H%M%S)
# vi main.cf

編集内容

下記の項目について設定を行っていきます。

myhostname = mail.server-memo.net
mydomain = server-memo.net
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

# 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_sasl_authenticated
    reject_unauth_destination
    permit_auth_destination
    permit_mynetworks

smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
mynetworksについて

mynetworksに設定されているネットワークからは、SMTP AUTHでの認証を行わずにメールが送信できますが、今回はVPS上にメールサーバを構築しているのでmynetworksについては設定を行っていません。

必要があればmynetworksの設定を行ってください。

下記の設定例は127.0.0.0/8(ループバック)と192.168.0.1/24のネットワークをmynetworksとして設定を行っています。

#mynetworks = 168.100.189.0/28, 127.0.0.0/8  # 変更前
mynetworks = 127.0.0.0/8, 192.168.0.1/24     # 変更後

mynetworksに登録するネットワークアドレスを間違えると、意図しないホストからのメール送信を許可してしまうことになるので、設定の際にはネットワークアドレスに間違いがないかの確認を注意してください。

master.cf

submission(587)ポートの有効化と、SMTP AUTHも使用できる設定に変更します。

# cp -p master.cf master.cf_$(date +%Y%m%d-%H%M%S)
# vi master.cf

submissionポートに関する設定の、行頭に「#」がつけられてコメントになっている下記項目の「#」を消して設定を有効化します。

submission inet n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject

「-o」の前には空白が必要ですので、行頭の「#」を削除する際にはその後にある空白部分を削除しないように注意してください。

newaliases

aliasが参照するためのデーベースファイル/etc/aliases.dbをnewaliasesコマンドで作成します。

これは、/etc/aliases.dbが存在しない初回と/etc/etc/aliasesの設定を変更した場合に実行する必要があります。

# newaliases

/etc/aliases.dbが作成されました。

# ls /etc/aliases*
/etc/aliases  /etc/aliases.db

設定反映

設定ファイルの書式に間違いがないかをチェックしてから、Postfixを再起動させて設定を反映させます。

# postfix check
# systemctl restart postfix

Dovecot設定

下記の設定ファイルを編集してDovecotの設定を行っていきます。

  • /etc/dovecot/dovecot.conf プロトコルの指定(IPv4,IPv6)
  • /etc/dovecot/conf.d/10-auth.conf 認証に関する設定
  • /etc/dovecot/conf.d/10-mail.conf メールボックスに関する設定
  • /etc/dovecot/conf.d/10-master.conf SMTP AUTHに関する設定
  • /etc/dovecot/conf.d/10-ssl.conf 暗号化に関する設定

dovecot.conf

DovecotでIPv4とIPv6を使用できるように設定します。

# cd /etc/dovecot/
# cp -p dovecot.conf dovecot.conf_$(date +%Y%m%d-%H%M%S)
# vi dovecot.conf

設定内容

「#listen = *, ::」の行頭にある「#」を削除して、設定を有効化させます。

IPv4は「*」IPv6は「::」となっているので、接続を許可させたい物を記述してください。

下記の場合は、IPv4とIPv6両方の接続を許可させる設定になります。

#listen = *, ::    # 変更前
listen = *, ::     # 変更後

10-auth.conf

暗号化なしでの認証(プレーンテキスト認証)を許可する設定に変更します。

# cd conf.d/
# cp -p 10-auth.conf 10-auth.conf_$(date +%Y%m%d-%H%M%S)
# vi 10-auth.conf

設定内容

disable_plaintext_authをnoに変更するのと、auth_mechanismsにloginを追加します。

#disable_plaintext_auth = yes  # 変更前
disable_plaintext_auth = no    # 変更後

auth_mechanisms = plain        # 変更前
auth_mechanisms = plain login  # 変更後

10-mail.conf

メールボックスの保存形式と保存場所を設定します。

# cp -p 10-mail.conf 10-mail.conf_$(date +%Y%m%d-%H%M%S)
# vi 10-mail.conf

設定内容

メールボックスの保存形式と保存場所を下記の内容で設定します。

  • 保存形式:maildir
  • 保存場所:~/Maildir

「~/」は、ユーザのホームディレクトリを表しています。

#mail_location =                     # 変更前
mail_location = maildir:~/Maildir    # 変更後

10-master.conf

SMTP AUTHについての設定を行っていきます。

# cp -p 10-master.conf 10-master.conf_$(date +%Y%m%d-%H%M%S)
# vi 10-master.conf

設定内容

Postfix smtp-auth部分のunix_listenerに関する設定部分についてる「#」を消して、設定を有効化するとともにunix_listenerのuserとgroupをpostfixにするという設定を追加します。

##### 変更前 #####

# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
#  mode = 0666
#}

##### 変更後 #####

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

10-ssl.conf

sslを使った通信暗号化を行わない設定に変更します。

# cp -p 10-ssl.conf 10-ssl.conf_$(date +%Y%m%d-%H%M%S)
# vi 10-ssl.conf

設定内容

最初はSSL/TLSでの通信暗号化を行わずに環境を構築して動作確認を行いたいため、sslの設定をnoに設定変更して暗号化通信を行わない設定にします。

ssl = required   # 設定前 
ssl = no         # 設定後

今後SSL/TLSで通信を暗号化する場合には、requiredかyesに設定を変更します。

設定反映

Dovecotを再起動して設定内容を反映させます。

# systemctl restart dovecot

コメント

タイトルとURLをコピーしました