はじめに
みなさん、SMTP接続してますか?メールを受信、送信するために利用されている方が多いかと思います。
SMTP接続といえば25番ポートですが、この25番ポートはユーザー認証といったセキュリティ面で必要な機能がなく過去にスパムメール配信などで悪用されたポートのため、現在殆どのサービスでは利用できないポートとして扱われています。
しかし今現在もメールリレー用のポートとして利用されていることもあり、どうしても接続しないといけないケースもあると思います。
今回、Fargateから25番ポートで外部メールサーバーに接続するために対応した内容をご紹介します。
2021年10月ごろに検討・対応した内容となります。最新の情報ではない可能性がありますのであらかじめご了承ください。
システム構成
- アプリはSpringBootを用いたJavaアプリ
- コンパイルしたjarをDocker Image化してECRに保存
- ECS on Fargate上でアプリコンテナを起動
- メール配信する際にNAT Gatewayを経由して外部のメールサーバーに25番ポートでリレーする
Fargateから25番ポートで接続してみる
まずは何もせずFargateから直接外部のメールサーバーに接続してみます。しかし接続できずタイムアウトとなってしまいます。
VPCフローログを確認したところ、セキュリティグループやネットワークALCでは許可済みなのに該当外部メールサーバーへの接続が別の理由でREJECTされていることがわかりました。
なぜ接続できなかったのか
AWSではスパムメールの配信を抑制するべく、EC2やLambdaといったサービスではデフォルトで25番ポートのアウトバウンドトラフィックがブロックされており、解除申請を出すことで利用可能となるようです。1
では、EC2やLambdaのように解除申請を出せばいいのかと思ったのですが、AWSサポートに詳細を確認したところFargateからの25番ポートでの接続は2021年10月時点では解除できないとの回答をいただきました。
回避策
現時点ではFargateからの25番ポートでの接続はできないことがわかりました。そのため、回避案として以下のものが考えられました。
- FargateではなくEC2上でアプリを動くように変更する
- 外部メールサーバーの接続を25番ではないポートでの接続に変更する
- 内部にメールリレー用のEC2インスタンスを準備し、Fargateからメールリレー用EC2サーバーに25番以外でのポート接続→メールリレー用EC2から外部メールサーバーに25番ポートでの接続に変更する
それぞれメリット・デメリットがありますが、今回はメールリレー用EC2サーバーを準備することでFargateからの25番ポート接続を実現するようにしました。
また、前述の通りEC2サーバーを準備してもデフォルトでは接続できないため、解除申請も合わせて提出しました。
まとめ
以上、Fargateから25番ポートで外部メールサーバーに接続する方法についてご紹介いたしました。
Fargateから25番ポートで接続したい方に参考になれば幸いです。