Overview
Postfix を使用してローカル MTA の設定を行います。これはローカル MTA が稼働していることを前提をしたアプリケーションやサービスからのメール(システムメール)を送信するためであり、本稿の例としては WordPress, unattended-upgrades 等が対象になります。
前提条件
- こちらを参考にネットワーク設定が完了していること。
- こちらを参考に APT のTUI 抑止設定が完了していること。
- こちらを参考に自己署名証明書の設定が完了していること。
- こちらを参考に自己署名証明書の信頼設定が完了していること。
インストール
Postfix と mailutils をインストールします。
myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install postfix mailutils
/etc/postfix/main.cf
/etc/postfix/main.cf を確認します。
デフォルト値
デフォルト値は下記の通りです。
myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /etc/postfix/main.cf | expand | tr -s [:space:] | sed 's/^\s/ /g'
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
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
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ubuntu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, ubuntu, localhost.localdomain, , localhost
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 = all
設定値
設定例は下記の通りです。デフォルトの状態でもローカル MTA として動作可能ではあります。
myadmin@ubuntu:~$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
myadmin@ubuntu:~$ sudo tee /etc/postfix/main.cf <<"EOF"
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file = /etc/my-ssl/certs/si1230.com.crt
smtpd_tls_key_file = /etc/my-ssl/private/si1230.com.key
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
smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination
myhostname = ubuntu.si1230.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
mydomain = si1230.com
mua_client_restrictions =
mua_helo_restrictions =
mua_sender_restrictions =
EOF
変更箇所の設定値の説明は以下の通りです。
設定項目 | 設定値 | 説明 |
---|---|---|
smtpd_banner | $myhostname | セキュリティ観点から最小の情報にしています。SMTP の仕様上、$myhostname の設定は必要となるようですが、何かの文字列があれば一応問題ないようです。 |
smtpd_tls_cert_file | /etc/my-ssl/certs/si1230.com.crt | こちらで作成した証明書を指定しています。本稿の目的はローカル MTA であるため、あまり関係しませんが、便宜上設定を変更しています。 |
smtpd_tls_key_file | /etc/my-ssl/private/si1230.com.key | こちらで作成した秘密鍵を指定しています。説明は証明書の内容と同じです。 |
smtpd_relay_restrictions | permit_mynetworks defer_unauth_destination | permit_sasl_authenticated は不要な設定であるため、削除しています。 |
myhostname | ubuntu.si1230.com | ホスト名を指定しています。 |
mydestination | $myhostname, localhost | 必要最小限の設定に変更しています。 |
mynetworks | 127.0.0.0/8 [::1]/128 | 必要最小限の設定に変更しています。 |
inet_interfaces | loopback-only | ループバックネットワークインターフェースのみでメールを受け取ります。 |
mydomain | si1230.com | ドメイン名を指定しています。 |
mua_client_restrictions | none | postconf の実行時に警告が出るため、設定しています。 |
mua_helo_restrictions | none | 同上 |
mua_sender_restrictions | none | 同上 |
設定の有効化
設定を有効化します。
myadmin@ubuntu:~$ sudo systemctl restart postfix.service && systemctl status postfix.service
メールの送信方法
mail コマンドでの送信例は下記の通りです。mail コマンドは Postfix の myorigin = $myhostname は参照されず username@hostname となります。
myadmin@ubuntu:~$ echo "Email sending test (body)" | mail -s "Email sending test (title)" myadmin@si1230.com
Ubuntu 22.04 Postfix ローカル MTA 設定