独自ドメイン メールサーバー構築 postfix SMTP認証

Server

前回の記事で、dovecotの初期設定、IMAP認証テストまで解説しました

今回はpostfix、dovecot両方でSMTP認証の設定を行います
PAM認証を使うのでお使いのLinuxのユーザー名とパスワードを使用して認証します

SMTP(Simple Mail Transfer Protocol)とは、電子メールを送信・転送するためのプロトコルです
主にメールサーバー間でのメールの送受信に使用されます

SMTPの役割

  1. メール送信(送信者 → メールサーバー)
    • メールクライアント(例: Thunderbird、Outlook、Gmail など)がSMTPサーバーに接続し、メールを送信する
  2. メール転送(メールサーバー間)
    • 送信者のSMTPサーバーが、受信者のメールサーバーへメールを転送する
  3. メールリレー(中継)
    • 直接送信できない場合、中継サーバーを経由してメールを目的のサーバーへ届ける

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などのメールクライアントを使ってメールの送受信をテストしたいと思います

コメント