前回の記事で、dovecotの初期設定、IMAP認証テストまで解説しました
今回はpostfix、dovecot両方でSMTP認証の設定を行います
PAM認証を使うのでお使いのLinuxのユーザー名とパスワードを使用して認証します
SMTP(Simple Mail Transfer Protocol)とは、電子メールを送信・転送するためのプロトコルです
主にメールサーバー間でのメールの送受信に使用されます
SMTPの役割
- メール送信(送信者 → メールサーバー)
- メールクライアント(例: Thunderbird、Outlook、Gmail など)がSMTPサーバーに接続し、メールを送信する
- メール転送(メールサーバー間)
- 送信者のSMTPサーバーが、受信者のメールサーバーへメールを転送する
- メールリレー(中継)
- 直接送信できない場合、中継サーバーを経由してメールを目的のサーバーへ届ける
SMTPの仕組み
- ポート番号
- 通常のSMTP: 25(メールサーバー間の転送に使用)
- 暗号化なしのメール送信: 587(クライアントがSMTPサーバーへ送信)
- SSL/TLS暗号化の送信: 465(古いがまだ使用される)
- 認証(SMTP-AUTH)
- メール送信時に、ユーザー名とパスワードで認証を行うことで、不正利用を防ぐ
SMTPの関連プロトコル
- IMAP(Internet Message Access Protocol):メールをサーバーに保存しながら閲覧・管理する(受信に使用)
- POP3(Post Office Protocol 3):メールをサーバーからダウンロードして受信する
1.Postfix 側の設定(SMTP認証をDovecot経由で行う)
① /etc/postfix/main.cf
postfix側でsmtp認証をdovecotで行うための設定をします
以前の設定から変更して書き換えます
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtputf8_enable = no
# SASL認証
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
# TLS関連
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/go-pro-world.net/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/go-pro-world.net/privkey.pem
smtpd_tls_security_level = may
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# SMTP中継・配送制限
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# 一般情報
myhostname = go-pro-world.net
mydomain = go-pro-world.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
② /etc/postfix/master.cf
このファイルでsubmissionポートも開きます
役割: master.cf は、Postfixの各サービス(SMTP、メール配送、SMTPリレーなど)のプロセスを管理するファイルです
ここで、どのサービスをどのポートで実行するか、サービスごとの詳細な動作や制限を設定します
内容: サービスのリスニングポートやデーモンの設定、優先度、サービスのプロセス設定が記述されています
main.cf がPostfix全体の設定なら、master.cf はPostfixの「サービス」を細かく定義する設定ファイルです
# SMTP 通常ポート (25番ポート) でメールを受信するサービス
smtp inet n - y - - smtpd
# Submission ポート (587番ポート) 経由でメールを送信するためのサービス(クライアント向け)
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# メールキューからのメッセージの取り出し
pickup unix n - y 60 1 pickup
# メールのヘッダ/本文のクリーンアップ処理
cleanup unix n - y - 0 cleanup
# メールキュー管理
qmgr unix n - n 300 1 qmgr
#oqmgr は古いキュー管理の方式(通常は無効)
#qmgr unix n - n 300 1 oqmgr
# TLS関連のセッション管理
tlsmgr unix - - y 1000? 1 tlsmgr
# メールのアドレス書き換え
rewrite unix - - y - - trivial-rewrite
# 配信失敗時のバウンス処理
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
# アドレスの検証処理
verify unix - - y - 1 verify
# 一時的なメール配送のフラッシュ処理
flush unix n - y 1000? 0 flush
# アドレスのマップをキャッシュとして使用するプロセス
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
# メールの送信処理(外部へのSMTP)
smtp unix - - y - - smtp
# 中継メールの送信処理(リレー)
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name # ログ出力の名前設定
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 # 接続タイムアウト設定(任意)
# メールキューの表示コマンド用(postqueue などで使用)
showq unix n - y - - showq
# 配信エラー用の処理
error unix - - y - - error
# 再試行処理(失敗したメールの再送)
retry unix - - y - - error
# 廃棄処理(意図的にメールを破棄)
discard unix - - y - - discard
# ローカル配送処理(例: /etc/aliases による転送)
local unix - n n - - local
# 仮想ユーザー向けのメール配送
virtual unix - n n - - virtual
# LMTP プロトコルによる配送(例: Dovecot のメールボックス)
lmtp unix - - y - - lmtp
# クライアント接続のレート制御などを行う
anvil unix - - y - 1 anvil
# SASL 認証セッションのキャッシュ処理
scache unix - - y - 1 scache
# postlogd によるログ出力用 (Postfix 3.4以降)
postlog unix-dgram n - n - 1 postlogd
2.PAM認証の有効化(Dovecotはデフォルトで対応)
おそらくに変更不要ですが、念のため /etc/dovecot/conf.d/auth-system.conf.ext を確認
passdb {
driver = pam
}
userdb {
driver = passwd
}
3.Maildirの作成(システムユーザー用)
USERNAMEをubuntuのユーザー名に置き換えてください
sudo mkdir -p /home/USERNAME/Maildir/{cur,new,tmp}
sudo chown -R USERNAME:USERNAME /home/USERNAME/Maildir
4.サービス再起動
設定内容を変更したらサービスの再起動をします
sudo systemctl restart dovecot
sudo systemctl restart postfix
5.動作確認
設定が終わったなら、動作確認していきましょう
以下の手順で、SMTP送信(Postfix)とIMAP受信(Dovecot)が正しく動いてるか確認できます
1. Linuxユーザー作成(まだなら)
メール用のアカウントがまだなければ、Linuxユーザーとして作成します:
sudo adduser username
このユーザーが「メールアドレス:username@go-pro-world.net」になります。
2. ポート確認(Postfix/DovecotがListenしてるか)
sudo ss -tulnp | grep -E 'master|dovecot'
結果の例:
LISTEN 0 100 *:25 ... users:(("master",pid=xxxx))
LISTEN 0 100 *:587 ... users:(("master",pid=xxxx))
LISTEN 0 100 *:993 ... users:(("dovecot",pid=xxxx))
- 25, 587 = SMTP(Postfix)
- 993 = IMAPS(Dovecot)
3. ログ確認(認証エラー時など)
Postfix(送信関連)ログ:
sudo journalctl -u postfix -f
Dovecot(受信・認証)ログ:
sudo journalctl -u dovecot -f
もしくは:
tail -f /var/log/mail.log
次回は実際にThunderbirdなどのメールクライアントを使ってメールの送受信をテストしたいと思います
コメント