最近タイトルのようなことをしたくなり、いろいろ調べて解決したので方法を書きます。
参考になれば幸いです。
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設定編
コメントを残す