DDNSを使って自宅サーバからメールを送信する Postfix設定編

最近タイトルのようなことをしたくなり、いろいろ調べて解決したので方法を書きます。
参考になれば幸いです。

CAUTION
セキュリティなどには一応気を使っていますが、すべて自己責任で行ってください。

環境

  • サーバ -> Raspberry Pi3
  • DDNS -> MyDNS

関連

DDNSを使って自宅サーバからメールを送信する Postfix設定編 DDNSを使って自宅サーバからメールを送信する SPF設定編 DDNSを使って自宅サーバからメールを送信する DKIM設定編

サーバ側の設定

Postfixをインストール

ターミナル上で下記を実行。

sudo apt-get upgrade
sudo apt-get update
sudo apt-get install postfix
MEMO
インストール後にpostfixの動作モードの設定画面が出てくると思いますが、今回はRaspberryPiで送受信を行うため「internet」にします。
その後のmail nameは使用したいドメインを入力してください。
例:「[email protected]」であれば「example.com」

postfixのインストール確認後。

設定ファイルの書き換え

CAUTION
設定にはroot権限が必要なためsudoをつけるかrootになって編集してください。

ターミナル上でディレクトリに移動しmain.cfを編集

cd /etc/postfix
cp main.cf main.cf.tmp
nano main.cf
myhostname = サーバーのホスト名(xxx.com)
compatibility_level = 2

myhostname = ドメイン(example.com)
mydomain = ドメイン(example.com)
myorigin = $mydomain
mydestination = $myhostname, localhost.ドメイン(example.com), localhost
mynetworks = 127.0.0.0/8

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

append_dot_mydomain = no

readme_directory = no

#Only localhost
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, reject
#Only localhost and authenticated
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
#Only localhost
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = localhost
inet_protocols = ipv4

relayhost = [リレーサーバのアドレス]:587

#Letsencryptでドメインの証明書を取得している場合
smtpd_tls_cert_file=/etc/letsencrypt/live/ドメイン(example.com)/cert.pem
smtpd_tls_key_file=/etc/letsencrypt/live/ドメイン(example.com)/privkey.pem
#してない場合はオレオレ証明書のパス

smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtp_sasl_auth_enable = yes
#リレーサーバの認証IDとパスワードを保存するファイル。あとで作る。
smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = cram-md5, plain, login
smtp_tls_security_level = may
smtp_use_tls = yes
smtp_tls_CApath = smtpd_tls_cert_fileと同じ
MEMO
smtp_sasl_tls_security_optionsで指定できる値
noplaintext : 平文パスワードを使う認証を許可しない
noactive : non-dictionary active 攻撃に脆弱な認証方法を許可しない
nodictionary : passive dictionary 攻撃に脆弱な認証方法を許可しない
noanonymous : 匿名ログインを許可しない

リレーサーバの認証IDとパスワードを保存するファイルを作る

nano relay_passwd
#ユーザID・パスワード等はリレーするサーバによって異なるため確認してください。
[リレーホストのアドレス]:587 ユーザID:パスワード
CAUTION
[]は消さずにつけてください。必要です。

設定したリレーサーバのパスワード等をハッシュ化する

postmap relay_passwd

設定を反映させる

Postfixを再起動させます。

sudo systemctl restart postfix

送信テスト

sendmailコマンドを使って送信テストをします。
#最後の”.”で送信になります。

sendmail 相手先のメールアドレス
From: 別名を書いてもいい<送信側のメールアドレス>
To: 相手先のメールアドレス
Subject: Hello!

本文
.
MEMO
. まで入力してください。必要です。

失敗

失敗した場合は、ログの確認をしてください。
私が確認したエラーコマンド

  • warning: SASL authentication failure: No worthy mechs found
    パッケージ不足の可能性(必要パッケージ:libsasl2-2,libsasl2-modules,libsasl2-modules-db)
  • delivery temporarily suspended: SASL authentication failed
    単純にリレーのアドレスや書き方が間違ってる可能性
MEMO
リレーすらされない場合は使用するsendmailが違う可能性が高いです。
sendmail(パッケージ)のMTAが存在する場合、切り替えたりしないとうまくいきません。
削除してから試してみてください。

成功

ここで送信テストが成功して指定したメールアドレス先にしっかりとメールが届いていれば成功です。
この時まだ迷惑メール対策を行っていないためスパムメールボックスに入ってる可能性があります。
もし、通常のメールボックスに届いていない場合は、そちらのボックスもチェックしてみてください。

Gmail宛に送った場合は、送られてきたメールの返信ボタン横の下三角を押して「メッセージのソースを表示」を押すとSPFがFAILになっていることがわかると思います。

というわけで次からは迷惑メール対策をしていきます。

DDNSを使って自宅サーバからメールを送信する SPF設定編
DDNSを使って自宅サーバからメールを送信する Postfix設定編 DDNSを使って自宅サーバからメールを送信する SPF設定編 DDNSを使って自宅サーバからメールを送信する DKIM設定編

コメントを残す