#
ドキュメント

Document

自分のための備忘録です。

Postfix(MSA, MTA)

Ref.

メールの仕組み

Postfix

Postfixを導入

インストール

$ sudo apt install postfix
tmux tmux

バージョンを確認

$ postconf | grep mail_version
mail_version = 3.6.4
milter_macro_v = $mail_name $mail_version

基本設定

設定ファイル /etc/postfix/main.cf

デフォルトの main.cf
# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = ec2-54-249-13-56.ap-northeast-1.compute.amazonaws.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination = localhost
relayhost =
mynetworks_style = host
# mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = localhost
inet_protocols = all
smtp_host_lookup = native

主要なパラメータ

メールサーバが mail.example.com の場合を例に記載します。 あくまで参考までの設定例であり環境に応じて変わります。

myhostname

  • mail.example.com

まずはmyhostnameという設定を探しましょう。 ドキュメントにはPostfixをインストールしたマシンの完全修飾ドメイン名(いわゆるFQDN)を指定する、とあります。

ref. https://tech-blog.rakus.co.jp/entry/20220815/postfix

  • hostname コマンドの値ではなくFQDNを設定する
  • EC2 ではapt install した際に変更しなければデフォルトでプライベートな FQDN を表すホスト名のタイププライベート IP DNS名(IPv4のみ)と同じ)の値になる

ref.

mydomain

  • example.com

myorigin

  • example.com

myorigin パラメータにはローカルで 投函されたメールがどのドメインから来るように見えるかを指定します。 デフォルトではローカルマシン名、すなわちマシン名がデフォルトになっている $myhostname を使います。非常に小さな サイトを運営しているのでなければ、マシン名の親ドメインがデフォルトに なっている $mydomain に変更したく なるでしょう。

ref. https://www.postfix-jp.info/trans-2.2/jhtml/BASIC_CONFIGURATION_README.html

mydestination

mydestination パラメータには、 このマシンが他のマシンに転送せずにローカルに配送するドメインを指定します。 デフォルトではマシン自身に対するメールを受け取ります。 ホスティングしているドメイン 用に Postfix を設定する方法は VIRTUAL_README ファイルを参照してください。

ref. https://www.postfix-jp.info/trans-2.2/jhtml/BASIC_CONFIGURATION_README.html

mynetworks_style mynetwork

  • $myhostname, $domain, localhost.$domain, , localhost

home_mailbox

新規に追加しました。

  • Maildir/
$ sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ chmod -R 700 /etc/skel/Maildir/

設定値を確認

デフォルトとの差分表示。

$ sudo postconf -n

設定ファイルチェック

$ sudo postfix check

送信確認

sendmailコマンド

$ sendmail -t <<EOL
> From: info@example.com
> To:info@example.org
> Subject: test
> test mail
> EOL

mailコマンド

$ sudo apt install mailutils
$ echo "test mail" | sudo mail -s "test subject" -r "info@example.com" info@example.org

作業例

https://blog.denet.co.jp/ec2-postfix-dovecot-mail-server-setup/ がとてもわかり易いので参考に作業しました。

インストール

$ sudo apt install -y  postfix
$ postconf | grep mail_version
mail_version = 3.6.4
milter_macro_v = $mail_name $mail_version
sudo systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2023-09-11 15:33:35 JST; 2min 35s ago
       Docs: man:postfix(1)
    Process: 3398 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 3398 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 11 15:33:35 xxxxxx systemd[1]: Starting Postfix Mail Transport Agent...
Sep 11 15:33:35 xxxxxx systemd[1]: Finished Postfix Mail Transport Agent.

設定ファイルを編集

バックアップを作成します。

$ sudo cp /etc/postfix/main.cf{,.$(date "+%Y%m%d")}

設定ファイル: /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

myorigin=example.com
myhostname=example.com
mydomain=example.com

# smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP unknown
biff = no

# appending .domain is the MUA's job.
# append_dot_mydomain = no
append_dot_mydomain = yes

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6



# TLS parameters
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 = ip-xxxxx.ap-northeast-1.compute.internal
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# myorigin = /etc/mailname
mydestination = $myhostname, ip-10-0-0-100.ap-northeast-1.compute.internal, localhost.ap-northeast-1.compute.internal, $mydomain, 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

新規に追加しました。

home_mailbox = Maildir/

ユーザーを追加

$ sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ chmod -R 700 /etc/skel/Maildir/
$ sudo adduser mail-example
  • ユーザー mail-example を追加
  • グループ mail-example を追加
  • ホームディレクトリを追加

※ Ubuntu(やDebian)は adduseruseradd は機能が異なります。
useradd はホームディレクトリの作成などをしません。 ※ Ubuntu(やDebian)はdeluseruserdel は機能が異なります。

$ userdel ユーザー名 // ユーザーを削除
$ userdel -r ユーザー名 //ユーザーのホームディレクトリも削除
$ deluser --remove-home ユーザー名 // ↑と同じ

sudo を有効化

$ sudo gpasswd -a mail-example adm
$ sudo gpasswd -a mail-example sudo

メール送信テスト

ubuntu でログイン

echo "test mail" | sudo mail -s "test subject" -r "ubuntu@example.com" mail-example@example.com

/home/mail-example/Maildir/new にメールが届く。

sshd のパスワード認証を有効化

sshd でパスワード認証を有効化します。

sudo vim /etc/ssh/sshd_config
- PasswordAuthentication no
+ Match User mail-example
+  PasswordAuthentication yes