VPS上のAlmaLinux 10に、Postfix + SMTP-AUTH + Dovecotでメールサーバを構築する方法を解説します。
トラブル発生時の原因切り分けを容易にするため、以下のステップに分けて段階的に環境を構築していきます。
- まずは暗号化を行わずに基本環境を構築し、正常に送受信できるか動作確認を行う(本記事)
- 正常な動作を確認できた後、Postfix(送信)の通信暗号化(SSL/TLS)を行う
- 続けて、Dovecot(受信)の通信暗号化(SSL/TLS)を行う
なお、AlmaLinux 10(RHEL 10系)では従来のBerkeley DB(libdb)が完全に廃止され、Postfixのデフォルトデータベース形式が「LMDB」へ移行しています。データベース作成時の挙動や設定ファイルの書き方がAlmaLinux 9以前と一部異なりますので、その点についても詳しく解説します。
コマンドは一般ユーザーからsudoを実行する形で記載しています。そのままコピー&ペーストして実行可能です。
作業工程
作業工程は下記のとおりです。
- DNS設定
- ファイアウォール設定
- ポート開放 25, 587, 110, 143
- Postfixインストール
- Dovecotインストール
- Postfix設定
- main.cf
- master.cf
- newaliases(AlmaLinux 10でのLMDB対応)
- 設定反映
- 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(暗号化設定)
- /etc/dovecot/conf.d/15-mailboxes.conf(IMAP標準フォルダ設定)
- 設定反映
- 新規ユーザー用Maildirの自動作成設定(/etc/skel)
- サービスの自動起動設定
- 動作確認
- テスト用ユーザーの作成
- Postfixによるメール送信・配送テスト
- SMTP-AUTH(587番ポート)による送信認証テスト
- Dovecot(POP3)による受信・認証テスト
- メールログの確認
DNS設定
メールサーバを構築する前に、利用しているDNSへ下記レコードの設定を完了させておいてください。
- Aレコード:メールサーバのホスト名をIPアドレスに紐付け(例:
mail.server-memo.net→ サーバーのIPアドレス) - MXレコード:メールドメインの配送先を指定(例:
server-memo.netの宛先をmail.server-memo.netに指定) - SPFレコード(TXTレコード):送信ドメイン認証の設定(なりすましメール対策)
- PTRレコード(逆引き):IPアドレスからホスト名を逆引き(外部宛て送信時の受信拒否対策)
SPFレコードの書き方や設定方法については、下記ページで詳しく解説していますので参考にしてください。
PTRレコード(逆引き)の重要性について
逆引きが設定されていないサーバーからのメールは、GmailやYahoo!、大手プロバイダなどから「なりすまし・スパム」と判定され、ほぼ確実に受信拒否(バウンス)されて届きません。
さくらのVPSやConoHaなど主要なVPSの多くはコントロールパネルから逆引き設定が可能ですので、必ずサーバーのIPアドレスに対してメールサーバのホスト名(例: mail.server-memo.net)を正しく登録しておいてください。
※DNSレコードの具体的な登録画面や操作手順は、利用しているドメイン事業者やDNSサーバによって異なるため、ここでは省略します。
ファイアウォール設定
PostfixとDovecotで使用する下記のポートを開放します。
- 25/tcp:SMTP(メール受信・サーバー間配送用)
- 587/tcp:Submission / OP25B対策(クライアントからのメール送信用)
- 110/tcp:POP3(メール受信用)
- 143/tcp:IMAP(メール受信用)
sudo firewall-cmd --permanent --add-port=25/tcp sudo firewall-cmd --permanent --add-port=587/tcp sudo firewall-cmd --permanent --add-port=110/tcp sudo firewall-cmd --permanent --add-port=143/tcp
設定を反映させます。
sudo firewall-cmd --reload
設定したポートが「ports:」の行に正しく登録されていることを確認します。
sudo 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:
なお、今後のステップでSSL/TLS通信暗号化を導入する際は、追加で465番(SMTPS)や993番/995番(IMAPS/POP3S)のポートを開放します。
Postfixインストール
dnfコマンドを使って、MTA(メール転送エージェント)であるPostfixをインストールします。
sudo dnf install -y postfix
Postfixの設定は、SMTP-AUTH(送信認証)で使用するDovecotをインストールした後にまとめて行います。
Dovecotインストール
dnfコマンドを使って、MDA/IMAP/POP3サーバであるDovecotをインストールします。
sudo dnf install -y dovecot
Dovecot本体をインストールすることで、PostfixとのSMTP-AUTH認証連携に必要なDovecot-SASL機能も一緒に導入されます(別途ライブラリを追加インストールする必要はありません)。
Postfix設定
以下のファイルを編集してPostfixの設定を行っていきます。
- /etc/postfix/main.cf
- /etc/postfix/master.cf
メールサーバのホスト名とメールのドメイン名は下記の内容で設定を進めますので、ご自身の環境に合わせて適宜読み替えてください。
- ホスト名: mail.server-memo.net
- メールドメイン: server-memo.net
main.cf
main.cfを編集して、Postfixの基本動作およびSMTP-AUTHの設定を行います。
cd /etc/postfix/ sudo cp -p main.cf main.cf.orig sudo 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
# メールボックス・メッセージサイズ制限
mailbox_size_limit = 0
message_size_limit = 20971520
# VRFYコマンドの無効化(セキュリティ対策)
disable_vrfy_command = yes
# 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_mynetworks
permit_sasl_authenticated
reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
AlmaLinux 10でのデータベース形式(LMDB)について
AlmaLinux 10(RHEL 10系)では、従来のBerkeley DB(libdb)がOSから完全に削除されました。
これに伴い、Postfixの標準データベース形式は従来の「hash」から「lmdb」に変更されています。
設定ファイル内でマップ形式(エイリアスや仮想ドメインマップなど)を指定する際、従来の古い解説記事で見られる「hash:/etc/...」という記述は使用できません(指定すると「unsupported dictionary type: hash」というエラーが発生します)。
AlmaLinux 10では「lmdb:/etc/...」と明示するか、マップタイプのプレフィックスを省略(デフォルトでlmdbが適用)して指定してください。
inet_protocolsについて(IPv4を指定する理由)
Postfixのデフォルト値は「all」(IPv4とIPv6の両方を使用)ですが、本環境ではあえて「inet_protocols = ipv4」を指定しています。
VPS環境ではIPv6アドレスに対する逆引き(PTRレコード)設定が提供されていない事業者が多くあります。
逆引きが設定できない状態で「all」にしておくと、PostfixがGmailなどの外部メールサーバへメールを送信する際にIPv6を優先して接続を試みた結果、「IPv6送信ガイドライン(逆引きPTR必須など)を満たしていない」としてメールが即座に受信拒否(バウンス)されてしまうトラブルが発生します。
このようなIPv6の逆引き未設定に起因する配送エラーを未然に防ぐため、ここでは明示的に「ipv4」のみを使用する設定としています。
smtpd_bannerについて(セキュリティ向上)
初期設定のままでは、外部から接続された際にPostfixのソフトウェア名や詳細なバージョン番号まで返答してしまいます。
不要なシステム情報を攻撃者に与えないセキュリティ対策として、バージョンや製品名を伏せ、必要最低限のホスト名とESMTPのみを応答するように「$myhostname ESMTP」と設定しています。
mailbox_size_limit と message_size_limit について(容量制限の解除・調整)
Postfixのデフォルトでは、メールボックスの容量上限(mailbox_size_limit)が約51MBに制限されています。
Maildir形式で運用する場合、メールが蓄積してこの上限を超えるとメールが受信できなくなるトラブルが発生するため、「mailbox_size_limit = 0」を指定して無制限(ディスク容量の上限まで)に設定しています。
また、1通あたりの最大サイズ(message_size_limit)はデフォルトの約10MBから、実用的な20MB(20971520 bytes)へ拡大していますが、ご自分の環境に合わせて適宜設定を変更してください。
disable_vrfy_command について(ユーザー探索攻撃の防止)
外部の第三者がVRFYコマンドを実行して「指定したユーザー名(メールアドレス)が実在するかどうか」を調査するのを防ぐため、「disable_vrfy_command = yes」で無効化しています。
smtpd_recipient_restrictions について(リレー・不正中継の防止)
第三者による不正中継(オープンリレー)を防ぐための宛先制限ルールです。上から順に評価されます。
- permit_mynetworks: 自サーバー(ローカルホスト)からのメール送信を許可
- permit_sasl_authenticated: SMTP-AUTH認証を通過した正当なクライアントからのメール送信を許可
- reject_unauth_destination: 上記2つに当てはまらない、外部宛ての中継メールをすべて拒否(自ドメイン宛ての受信のみ許可)
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を使用できるように設定を変更します。
sudo cp -p master.cf master.cf.orig sudo vi master.cf
submissionポートに関する設定ブロックを探し、行頭の「#」を削除して有効化します。
あわせて、メールログ上で送信(submission)通信を判別しやすくするために「syslog_name=postfix/submission」も有効化します。
submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
設定ファイル内には、末尾に「s」が付いた「submissions(465番ポート / SMTPS)」という非常に似た項目も並んでいます。ここでは587番ポートを有効化するため、末尾に「s」が付いていない「submission」のほうを編集してください。
「-o」の前にはスペース(インデント)が必要です。行頭の「#」を削除する際、直後の空白まで一緒に消してしまわないように注意してください。
「syslog_name=postfix/submission」を指定しておくことで、ログ(/var/log/maillogなど)にプロセス名が「postfix/submission/smtpd」として記録され、25番ポート(通常のメール受信)のログと簡単に区別・フィルタリングできるようになります。
もしサーバー内部やVPN等の許可ネットワーク(mynetworks)から587番ポートを経由して送信する用途がある場合は、「smtpd_relay_restrictions」の先頭に「permit_mynetworks」を追加し、「-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject」と設定してください。
newaliases
エイリアスが参照するデータベースファイルを「newaliases」コマンドで作成します。
これは初回構築時や、「/etc/aliases」の内容を変更した際に実行する必要があります。
sudo newaliases
AlmaLinux 9以前では「/etc/aliases.db」が作成されていましたが、AlmaLinux 10ではLMDB形式の「/etc/aliases.lmdb」が作成されます。
ls -l /etc/aliases*
実行結果の例です。
-rw-r--r--. 1 root root 1529 Nov 29 2023 /etc/aliases -rw-r--r-- 1 root root 12288 Oct 28 21:28 /etc/aliases.lmdb
拡張子が「.lmdb」のデータベースファイルが正常に生成されていることが確認できます。
設定反映
設定ファイルの構文に問題がないかチェックした上で、Postfixを再起動して設定を反映させます。
sudo postfix check sudo 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 : 暗号化に関する設定
- /etc/dovecot/conf.d/15-mailboxes.conf : IMAP標準フォルダの自動作成設定
dovecot.conf
Dovecotで使用するプロトコルの明示と、IPv4/IPv6の両方からの接続を受け付けられるように設定します。
cd /etc/dovecot/ sudo cp -p dovecot.conf dovecot.conf.orig sudo vi dovecot.conf
設定内容
「#protocols = imap pop3 lmtp」および「#listen = *, ::」のコメントアウトを解除して編集します。
##### 変更前 ##### #protocols = imap pop3 lmtp #listen = *, :: ##### 変更後 ##### protocols = imap pop3 listen = *, ::
「protocols」で使用するプロトコルを明示します。POP3を使用せずIMAPのみで運用する場合は、「protocols = imap」と設定してください。
Dovecotへの接続もIPv4のみに限定したい場合は、「listen = *」と設定します。
これ以降の設定ファイルは、すべて「/etc/dovecot/conf.d/」ディレクトリ内にあるので、作業ディレクトリを移動しておきます。
cd /etc/dovecot/conf.d/
10-auth.conf
初期の動作検証用として「暗号化なし(平文)での認証」を一時的に許可し、メーラーやSMTP-AUTHで広く使われる認証方式(LOGIN)を追加します。
cd /etc/dovecot/conf.d/ sudo cp -p 10-auth.conf 10-auth.conf.orig sudo vi 10-auth.conf
設定内容
disable_plaintext_authを「no」に変更し、auth_mechanismsに「login」を追加します。
##### 変更前 ##### #disable_plaintext_auth = yes auth_mechanisms = plain ##### 変更後 ##### disable_plaintext_auth = no auth_mechanisms = plain login
「disable_plaintext_auth = no」:本ステップではSSL/TLSをまだ導入していないため、平文パスワードでの認証を許可します(後日SSL/TLS暗号化を設定した際に、安全のため「yes」に戻します)。
「auth_mechanisms」:標準の「plain」に加え、Outlookなどの各種メールソフトやPostfixのSMTP-AUTHで利用される「login」認証方式を追加します。
10-mail.conf
メールボックスの保存形式と保存場所を設定します。
sudo cp -p 10-mail.conf 10-mail.conf.orig sudo vi 10-mail.conf
設定内容
Postfixの「home_mailbox = Maildir/」設定と合わせるため、形式を「Maildir」、保存場所を各ユーザーのホームディレクトリ配下「~/Maildir」に指定します。
##### 変更前 ##### #mail_location = ##### 変更後 ##### mail_location = maildir:~/Maildir
10-master.conf
PostfixからDovecot-SASLによるSMTP-AUTH認証を利用できるよう、ソケット通信(UNIXドメインソケット)の設定を行います。
sudo cp -p 10-master.conf 10-master.conf.orig sudo vi 10-master.conf
設定内容
「service auth」ブロック内にある「Postfix smtp-auth」箇所のコメントアウトを解除し、所有者・グループを「postfix」、パーミッションを「0660」に設定します。
##### 変更前 #####
# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
##### 変更後 #####
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
所有者(user)とグループ(group)を「postfix」に設定しているため、パーミッションは全ユーザーに許可する「0666」ではなく「mode = 0660」(所有者とグループのみアクセス可能)に制限し、同一サーバー内の無関係な一般ユーザーからのアクセスを防ぎます。
10-ssl.conf
初期構築時の動作検証のため、SSL通信を行わない設定に変更します。
sudo cp -p 10-ssl.conf 10-ssl.conf.orig sudo vi 10-ssl.conf
設定内容
sslの項目を「no」に変更します。
##### 変更前 ##### ssl = required ##### 変更後 ##### ssl = no
基本の送受信テストが完了した後、SSL/TLSによる通信暗号化を導入するステップで証明書(Let's Encrypt等)のパスを指定し、この設定を「required」に戻します。
15-mailboxes.conf
PCやスマートフォンのメールソフト(Thunderbird等)からIMAPで接続した際に、「送信済み(Sent)」「ゴミ箱(Trash)」「下書き(Drafts)」「迷惑メール(Junk)」などの標準フォルダが自動作成・登録されるように設定します。
sudo cp -p 15-mailboxes.conf 15-mailboxes.conf.orig sudo vi 15-mailboxes.conf
設定内容
「namespace inbox」ブロック内の主要フォルダで、「auto = subscribe」(フォルダの自動作成および自動購読)が設定されていることを確認します(必要に応じてコメントアウトを解除・追記します)。
namespace inbox {
mailbox Drafts {
special_use = \Drafts
auto = subscribe
}
mailbox Junk {
special_use = \Junk
auto = subscribe
}
mailbox Trash {
special_use = \Trash
auto = subscribe
}
mailbox Sent {
special_use = \Sent
auto = subscribe
}
mailbox "Sent Messages" {
special_use = \Sent
}
}
これを設定しておくことで、メールソフト側で「送信済みメールが保存できない」「ゴミ箱フォルダが存在しない」といったフォルダ未作成に起因する初期トラブルを防ぐことができます。
「mailbox "Sent Messages"」はApple製品(MacやiPhoneの標準メール)との互換用設定です。
こちらにも「auto = subscribe」を設定してしまうとメーラー上に「Sent」と「Sent Messages」の2つの送信済みフォルダが同時に自動作成されてしまうため、「special_use = \Sent」のみ(デフォルトのまま)にしておきます。
設定反映
編集した設定ファイルに文法エラーがないか確認します。
sudo doveconf -n > /dev/null
「> /dev/null」で通常の設定一覧出力を破棄し、構文ミスがある場合のみエラーメッセージ(標準エラー出力)が画面に表示されるようにしています。何も表示されなければ構文チェックは合格です。
「sudo doveconf -n」をそのまま実行すると、デフォルト値から変更されたパラメータの一覧を確認できます。
設定エラーがないことを確認したら、Dovecotを再起動して設定内容を反映させます。
sudo systemctl restart dovecot
【補足】認証エラー時のログ確認について(10-logging.conf)
メールクライアントからの接続時、ユーザー名やパスワードの不一致でログインできない場合は、「/var/log/maillog」を確認することで原因を調査できます。
より詳細な認証ログを出力させたい場合は、「/etc/dovecot/conf.d/10-logging.conf」を開き、「auth_verbose = yes」に設定してDovecotを再起動すると、認証失敗時の理由が詳しくログに記録されるようになります。
【補足】同一IPからの同時接続数エラーが出る場合(20-imap.conf)
Dovecotの初期設定では、1つのIPアドレスから同時に接続できるIMAPセッション数が「10」に制限されています。
同じWi-Fi(同一グローバルIP)環境から複数台のPCやスマホで接続した際に「Maximum number of connections from user+IP exceeded」というエラーが発生する場合は、「/etc/dovecot/conf.d/20-imap.conf」内の「mail_max_userip_connections」の数値を「20」や「30」程度に変更して制限をゆるくしてください。
新規ユーザー用Maildirの自動作成設定(/etc/skel)
Maildir形式を採用している場合、最初のメールを受信するまでユーザーのホームディレクトリに「~/Maildir」が作成されません。
そのため、一度もメールを受信していない状態でメールソフトから接続しようとすると、「メールボックスが存在しない」というエラーになってしまいます。
OSに新規ユーザーを追加した際に、自動的に「~/Maildir」ディレクトリ群(cur, new, tmp)が初期生成されるよう、スケルトンディレクトリ(/etc/skel)にあらかじめ作成しておきます。
sudo mkdir -p /etc/skel/Maildir/{cur,new,tmp}
sudo chmod -R 700 /etc/skel/Maildir
「useradd -m」コマンドでユーザの作成をした際、「/etc/skel/」の中身が新規作成されたユーザーのホームディレクトリへ自動的にコピーされます。
すでに作成済みの既存ユーザーがいる場合は、そのユーザーのホームディレクトリにも同様に「Maildir」ディレクトリを作成し、所有者をそのユーザーに変更してください。
# 例: 既存ユーザー「testuser」にMaildirを手動作成する場合
sudo mkdir -p /home/testuser/Maildir/{cur,new,tmp}
sudo chmod -R 700 /home/testuser/Maildir
sudo chown -R testuser:testuser /home/testuser/Maildir
なお、本記事の手順はOSのローカルユーザー(/etc/passwd)を利用したメールサーバ構築を前提としています。
データベースやマップファイル等でアカウントを管理する「バーチャルユーザー(仮想メールボックス)」で運用する場合は、useraddコマンドを使用しないため/etc/skelは使われません(バーチャルユーザー環境では、初回メール配送時やDovecot接続時に専用ディレクトリ(例: /var/mail/vhosts/ドメイン/ユーザー/)へ自動生成されます)。
サービスの自動起動設定
OS再起動時にもPostfixとDovecotが自動的に起動するように、サービスの自動起動を設定しておきます。
sudo systemctl enable postfix sudo systemctl enable dovecot
各サービスが正常に稼働しているかステータスを確認しておきます。
systemctl status postfix systemctl status dovecot
いずれも「Active: active (running)」と表示されていれば正常です。
表示を終了してコマンドプロンプトに戻るには「q」キーを押してください。
動作確認
構築した環境でメールの送受信が正常に行えるか、サーバー上で実際に動作確認を行います。
テスト用ユーザーの作成
送受信確認を行うためのテストユーザーを作成します。
セキュリティ対策として、メールの送受信は許可しつつSSHでのサーバーログインを禁止するため、ログインシェルに「/sbin/nologin」を指定して作成します。
sudo useradd -m -s /sbin/nologin testuser sudo passwd testuser
「-s /sbin/nologin」を指定することで、メール専用アカウントとなりSSHでのログインを安全に遮断できます(DovecotやPostfixのメール認証には影響しないため、メール送受信は問題なく行えます)。
既存のユーザーをメール専用(SSH不可)に変更したい場合は、「sudo usermod -s /sbin/nologin ユーザー名」で変更可能です。
パスワードを設定したら、先ほど設定した「/etc/skel/Maildir」から、ユーザーのホームディレクトリに「Maildir」が自動生成されているか確認します。
sudo ls -la /home/testuser/Maildir/
実行結果の例です。
total 0 drwx------. 5 testuser testuser 43 Oct 28 21:00 . drwx------. 3 testuser testuser 74 Oct 28 21:00 .. drwx------. 2 testuser testuser 6 Oct 28 21:00 cur drwx------. 2 testuser testuser 6 Oct 28 21:00 new drwx------. 2 testuser testuser 6 Oct 28 21:00 tmp
「cur」「new」「tmp」ディレクトリが存在し、所有者が「testuser:testuser」になっていれば正常です。
Postfixによるメール送信・配送テスト
追加パッケージのインストールが不要な「sendmail」コマンドを使い、ローカルの「testuser」宛てにテストメールを送信します。
sendmail testuser@server-memo.net << 'EOF' Subject: Test Mail From: testuser@server-memo.net This is a test email on AlmaLinux 10. EOF
メール送信後、testuserの受信ディレクトリ(~/Maildir/new/)にメールが届いているか確認します。
sudo ls -l /home/testuser/Maildir/new/
実行結果の例です。
total 4 -rw-------. 1 testuser testuser 456 Oct 28 21:05 1730120700.Vfd00I12345M123456.mail.server-memo.net
届いたファイルの中身を確認してみます。
sudo sh -c 'cat /home/testuser/Maildir/new/*'
「sudo cat .../*」のように直接ワイルドカード(*)を指定すると、「sudo」が実行される前に一般ユーザーのシェルがファイル名を展開しようとして権限エラー(No such file or directory)になってしまいます。
そのため、「sudo sh -c '...'」を使ってroot権限内で展開させるか、直前の「ls」で確認できたファイル名を直接指定してください。
先ほど送信したメールの件名や本文が表示されれば、Postfixによるローカル配送とMaildirへの書き込みは成功です。
SMTP-AUTH(587番ポート)による送信認証テスト
PostfixのSubmissionポート(587番)で、Dovecot-SASLによるSMTP-AUTH認証が正しく機能しているか確認します。
SMTPの認証(AUTH LOGIN)では、ユーザー名とパスワードをBase64形式の文字列で送信するため、事前にBase64文字列を用意します。
事前準備:ユーザー名とパスワードをBase64変換
# ユーザー名のBase64化 echo -n "testuser" | base64 # 出力例: dGVzdHVzZXI= # パスワードのBase64化(設定したパスワードを入力) echo -n "your_password" | base64 # 出力例: eW91cl9wYXNzd29yZA==
ncコマンドで587番ポートへ接続
もしncコマンドがインストールされていない場合は、「sudo dnf install -y nc」でインストールしてください。
nc localhost 587
もし「Network is unreachable」というエラーが表示される場合は、名前解決でIPv6(::1)に接続しようとしている可能性があります。
その場合は「nc 127.0.0.1 587」とIPアドレスで指定して接続してください。
接続後、以下のようにコマンドを入力していきます(赤字部分を入力します)。
220 mail.server-memo.net ESMTP EHLO localhost 250-mail.server-memo.net 250-PIPELINING 250-SIZE 20971520 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdHVzZXI= 334 UGFzc3dvcmQ6 eW91cl9wYXNzd29yZA== 235 2.7.0 Authentication successful QUIT 221 2.0.0 Bye
- 「EHLO localhost」を入力した際、応答の中に「250-AUTH PLAIN LOGIN」が含まれていれば、PostfixがSMTP-AUTHを受け付ける状態になっています。
- 「AUTH LOGIN」を入力すると、Base64化された「Username:(VXNlcm5hbWU6)」が求められるので、先ほど変換したユーザー名のBase64文字列を入力します。
- 続いて「Password:(UGFzc3dvcmQ6)」が求められるので、パスワードのBase64文字列を入力します。
- 「235 2.7.0 Authentication successful」と返ってくれば、PostfixとDovecot-SASLの連携によるSMTP-AUTH認証は成功です。
- 「QUIT」と入力するとセッションが終了し、通常のプロンプトに戻ります(途中で強制終了したい場合は 「Ctrl + C」)。
Dovecot(POP3)による受信・認証テスト
続いて、Dovecotが正常に認証を行い、Maildir内のメールを取得できるかをPOP3(110番ポート)でテストします。
引き続き「nc」コマンドを使ってPOP3ポートへ接続します。
nc localhost 110
接続できない場合は「nc 127.0.0.1 110」とIPアドレスで指定して接続してください。
接続後、以下のようにコマンドを順に入力してテストを行います(赤字部分を入力します)。
+OK Dovecot ready. USER testuser +OK PASS (設定したパスワード) +OK Logged in. STAT +OK 1 456 RETR 1 +OK 456 octets Subject: Test Mail From: testuser@server-memo.net This is a test email on AlmaLinux 10. . QUIT +OK Logging out.
- 「USER」と「PASS」入力後に「+OK Logged in.」と表示されれば、Dovecotの平文認証設定は正常です。
- 「STAT」でメール件数(1件)が取得でき、「RETR 1」で先ほどのメール本文が表示されれば、DovecotによるMaildirの読み込みも正常に機能しています。
- 確認が終わったら、「QUIT」と入力してEnterを押すと接続が切断され、通常のシェルプロンプトに戻ります(途中で強制終了したい場合はキーボードの「Ctrl + C」を押してください)。
メールログの確認
一連の動作がメールログにどのように記録されているか確認します。
sudo tail -n 30 /var/log/maillog
もし「/var/log/maillog」が存在しない場合は、「sudo journalctl -u postfix」や「sudo journalctl -u dovecot」でログを確認できます。
Postfixによる配送成功「status=sent (delivered to maildir)」や、Dovecotへのログイン成功ログ「dovecot: pop3-login: Login: user=<testuser>」が記録されていれば、すべての動作確認は完了です。
まとめ&次のステップ
以上でAlmaLinux 10におけるPostfix + Dovecotの基本的なメールサーバ環境の構築と動作確認は完了です。
基本動作の確認が取れましたので、次のステップとして通信経路の暗号化(SSL/TLS化)を実施します。
無料のSSLサーバー証明書(Let's Encrypt)を取得し、メールの送受信経路を安全に保護していきましょう。
次のステップ(PostfixのSSL/TLS設定)の手順については、下記ページで詳しく解説しています。
【次ステップ】AlmaLinux 10:PostfixのSSL/TLS暗号化設定(Let's Encrypt / SMTPS / STARTTLS)
なお、今後SSL/TLS暗号化を導入した際は、セキュリティのため必ず「/etc/dovecot/conf.d/10-auth.conf」の「disable_plaintext_auth」を「yes」(暗号化通信以外での平文認証を拒否)に戻すことを忘れないようにしてください。
コメント