Dockerのゲストコンテナ内からホストのsendmailを使ってメールを送信する
※※※開発環境用の設定なので公開サーバでこの設定は行わない。※※※
■やりたいこと
ホストのCentOS7のsendmailを使ってコンテナ内からメールを送りたい
そのままの状態だと接続に失敗している
■ホストの構成
VagrantにCentOS7をインストールしてそこにDockerを入れている
■ゲスト側からホストのIPを把握する
# ip route default via 172.18.0.1 dev eth0 172.18.0.0/16 dev eth0 proto kernel scope link src 172.18.0.2
この場合ホストのIPは「172.18.0.1」
■ホスト側の最初の状態
# netstat -an | grep 25 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
ローカル127.0.0.1からのSMTPだけ受け付けている状態
ホスト側のsendmailでローカル以外からもSMTPを受け付けるようにする必要がある
■設定ファイルをコピーして、ローカルだけに制限している行を無効化する
# cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc.org # vim /etc/mail/sendmail.mc # diff /etc/mail/sendmail.mc.org /etc/mail/sendmail.mc 118c118 < DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl --- > dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
■「sendmail.mc」を「sendmail.cf」へ変換する
# m4 sendmail.mc > sendmail.cf -bash: m4: command not found
入ってなかった。。
■ツールが入っていないのでインストール
# yum -y install sendmail-cf
これで「m4」が入る
■もう一度変換
# cd /etc/mail/ # m4 sendmail.mc > sendmail.cf
■リレーを許可するIPを指定する
# cp /etc/mail/access /etc/mail/access_org # vim /etc/mail/access # cat /etc/mail/access Connect:localhost.localdomain RELAY Connect:localhost RELAY Connect:127.0.0.1 RELAY Connect:XXX.XXX.XXX.XXX RELAY <- ゲストIP追加 172.17.0.0など
■再起動
# systemctl restart sendmail.service
■確認
# netstat -an | grep 25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
あとはfirewallなど適切に設定すればOK