Postfix設定 完全版

長らく苦しんだメールサーバー立ち上げ。

先日の設定でとりあえず送受信できるようになりました。

グーグル先生やGPT先生に尋ねながら構築しましたが、結局一つのページで完結した情報はなかったように思います。

設定の解説についてはこのページが非常にわかりやすいです。

環境ですが、
Mac mini late2014
MacOS Monterey
ドメインはonamae.comでMXレコード設定済み
です。

まずはインストール。Macではデフォルトでインストールされていたと思います。
設定はetc/postfix/main.cfとmaster.cfとなります。

以下実際の設定でコメントアウトしている箇所。

main.cf

mail_owner = _postfix
myhostname = mail.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = host
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
inet_protocols = all

message_size_limit = 104857600 #メール一通のサイズ 100MB
mailbox_size_limit = 104857600 #メールボックスのサイズ 1GB
biff = no #新着通知設定、デフォルトではyes

#dovecotのauthenticatedを使う時の設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth

#TLS/SSL通信を用いる時の設定
smtp_tls_security_level = may #2.3以前はsmtpd_use_tls = yes
smtpd_tls_security_level = may #2.3以前はsmtp_use_tls = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.mydomain.com/fullchain.pem #let’s encryptで取得。詳細はこの記事
smtpd_tls_key_file = /etc/letsencrypt/live/mail.mydomain.com/privkey.pem #let’s encryptで取得。詳細はこの記事
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_recipient_restrictions = permit_mynetworks permit_inet_interfaces permit_sasl_authenticated

server_config_directory = disabled
default_transport = smtps
smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination permit_inet_interfaces permit_sasl_authenticated #relayを許可する通信

transport_maps = hash:/etc/postfix/transport #どうしてもmain.cfだけではgmailに転送できず、transportを設定
relayhost = [smtp.gmail.com]:587 #よくあるgmail smtp転送設定
smtp_sasl_password_maps = hash:/etc/postfix/gmail #gmailへのログイン。gmailのアプリケーションパスワードが必要
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_auth_enable = yes
relay_domains = smtp.gmail.com

です。

transportファイルには
mydomain.com local: #自分宛のメールはローカルに配信
* smtp:[smtp.gmail.com] #それ以外はsmtp.gmail.comに処理してもらう
と記載し、ターミナルで
postmap hash:/etc/postfix/transport
とし、transport.dbというファイルを作成します。

gmailファイルには
googleアカウントで16文字のアプリケーションパスワードを生成後、
[smtp.gmail.com]:587 <Gmailのアドレス>:<Gmailのアプリパスワード>
と記載し、ターミナルで
postmap hash:/etc/postfix/gmail
とし、gmail.dbというファイルを作成します。

ここまでがmain.cfの設定ですね。

続いてmaster.cfの中のファイルです。
正直呪文です。587ポートのTLS/SSL通信に必要な設定だそうです。

submission inet n – n – – smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
465 inet n – n – – smtpd #今回は465ポート使っていないですが念の為
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

以上がpostfixの設定の全貌ですかね。
他にもいろんなファイルの権限を調整したりした気がしますが、詳細は忘れてしまいました。
悩んでいる方の参考になれば幸いです。