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
コメント