メール送信サーバー(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 を用いて、環境に合わせた設定を行います。
- smtp_tls_security_level = may を encryptに変更します
- relayhost に gmailのsmtpサーバーを設定します
- ファイルの最後に、smtp_sasl関係の設定を追加します。
- 必要に応じて、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(自動的に割り振られる)の記載があり、メールのリレーが拒否されていました。