事象
GoogleComputeEngineに立てたVMインスタンスから外部にメール送信できない。
GoogleCloudバージョン
$ gcloud --version Google Cloud SDK 289.0.0 ...
原因
公式ドキュメントに明示的に記載がありました。
以下抜粋です。
Compute Engine のデフォルトでは、ポート 25 を除くすべてのポートで送信接続が許可されます。ポート 25 は不正使用のリスクのためにブロックされます。
注: ポート 25 は常にブロックされており、G Suite を使用した SMTP リレーを介したとしても利用できません。
セキュリティリスク(不正メール送信の踏み台)を考慮してブロックしているとのこと。
解決策
上記リンクに対応策が載っていますが、例えば以下などは参考になりました。
SendGrid は毎月 12,000 件の取引メールを Compute Engine ユーザーに無料トライアルとして提供するサードパーティのメールサービスです。
以下、補足です。
補足
SMTPメールのテストをしている際にメールが不達になったためログを見ると
# tail /var/log/mail.log ... postfix/smtp[8916]: connect to gmail-smtp-in.l.google.com[2607:f8b0:400c:c15::1a]:25: Network is unreachable ...postfix/smtpd[8885]: disconnect from localhost[::1] helo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 ...postfix/smtp[8916]: connect to gmail-smtp-in.l.google.com[172.217.204.26]:25: Connection timed out ...postfix/smtp[8916]: connect to alt1.gmail-smtp-in.l.google.com[2a00:1450:400b:c00::1b]:25: Network is unreachable
外部のメールサーバーに通信できていませんでした。
試しにポート指定で疎通確認するも届かないですが
ssh -v -p 25 142.250.13.26 OpenSSH_7.4p1 Debian-10+deb9u7, OpenSSL 1.0.2u debug1: Connecting to 142.250.13.26 [142.250.13.26] port 25. ....
ICMPは通ります。
# ping 142.250.13.26 PING 142.250.13.26 (142.250.13.26) 56(84) bytes of data. 64 bytes from 142.250.13.26: icmp_seq=1 ttl=45 time=92.5 ms ...
ファイアウォールで穴は開いているにも関わらず疎通できないのは仕様ということでした。
以上、ご参考になれば幸いです。