コンテンツへスキップ

Ubuntu 20.04でGamilにメール転送(postfix) Docker環境対応

メール送信サーバー(Postfix)

以前は、自由に構築できたメールサーバー。確かに、個人サーバーが踏み台にされるケースも多く、現在、多くの人は、プロバイダーのSMTPサーバーを利用したメールサーバーを運用していると思います。

今回は、自宅LAN内の、プログラムや各種ツールからのメールを、普段利用しているメールアドアレスで受信できるように、メールの中継を行います。中継した先は、GoogleのSMTPサーバーを利用します。

(LAN内の環境)→(今回のメール送信サーバー、Postfix)→GoogleのSMTPサーバー

また、Docker内のコンテナは、通常のプライベートLANとは異なるネットワークで動いているので、Docker環境のコンテナからのメールも中継出来るように設定します。

Pstfixのインストール

sudo apt install postfix sasl2-bin bsd-mailx

postfixのインストールを行います。インストール時にメールサーバの構成方法を設定するダイアログが表示されます。

スマートホスト付きインターネットを選択します。
リレー先となるGmailのSMTPサーバーは、 [smtp.gmail.com]:587 となります。

Postfixインストール後の設定 Gmailへの転送設定(ユーザー、パスワード)

新規でsasl_passwdファイルを作成します。
この際の、Gmailアカウントのパスワードは、Goolgeのアカウント設定画面から、Google へのログインのアプリ向けのアプリパスワードを取得します。
https://myaccount.google.com/security分からない方は、「Google アプリ パスワード」で検索すると関連する情報が沢山出てくると思います。

sasl_passwdファイルに、メールの送信経路となる情報を設定します。

vi /etc/postfix/sasl_passwd
#ファイルに記載する内容
[smtp.gmail.com]:587 user@gmail.com:≪取得したGoogle アプリ パスワード≫

作成したファイルのアクセス権を変更。

chmod 0600 /etc/postfix/sasl_passwd

postmapで、メールの送信経路を有効化します。

postmap /etc/postfix/sasl_passwd

Postfix main.cfファイル更新

/etc/postfix/main.cf を用いて、環境に合わせた設定を行います。

  1. smtp_tls_security_level = may を encryptに変更します
  2. relayhost に gmailのsmtpサーバーを設定します
  3. ファイルの最後に、smtp_sasl関係の設定を追加します。
  4. 必要に応じて、mynetworksにローカルLANのIPを追加します
    例:192.168.0.0./24 など
smtp_tls_security_level = encrypt

relayhost = [smtp.gmail.com]:587

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous

main.cf変更後は、postfixを再起動します。

systemctl restart postfix

postfix main.cfにdockerコンテナのIPを追加

main.cfのmynetworksにdockerコンテナのIPを追加します。
mynetworksに、172.18.0.Xを追加しました。172.18.0.0/16などでも動作しました。

docker psでコンテナID(CONTAINER ID)を取得し、docker exec -it {コンテナID} /bin/bashで、コンテナの中に入ります。コンテナ内で、hostname -iを実行しコンテナの利用するIPアドレスが確認出来ます。

ifconfig -aでもdockerが利用しているネットワークを確認できると思います。

main.cf変更後は、postfixを再起動します。

systemctl restart postfix

relay access deniedへの対応

docker環境からのメール送信に苦戦しました。メールが送れない際は、/var/log/mail.logを確認して、エラー内容を見ると原因が分かり、対応方法が見つかります。
私は、Dockerコンテナの利用するIP(自動的に割り振られる)の記載があり、メールのリレーが拒否されていました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA