CI部の古川(智)です。最近は赤い食べ物(トマト系か辛い系)にハマっています。
EC2からNATゲートウェイを経由してFTPサーバーへパッシブモードで通信させようとした際、セキュリティグループやNACLの設定で頭がごちゃついたので「こうすればOKだよ~」というのをブログとして残しておこうと思います。
- 今回の構成
- FTPのパッシブモードで使用するポート
- セキュリティグループとNACLの設定
- EC2(FTPクライアント)があるサブネットのNACL
- NATゲートウェイがあるサブネットのNACL
- おわりに
今回の構成
今回作成した構成は、こちらです。 AWS環境内のプライベートサブネットにあるEC2(FTPクライアント)から、パブリックサブネットにあるNATゲートウェイを経由して、外部のFTPサーバーとパッシブモードで通信するという構成です。
FTPのパッシブモードで使用するポート
まずFTPの仕組みをざっくり説明します。
FTPでは2つのTCP接続「 制御用コネクション」「データ転送用コネクション」を使ってファイルの転送を行っています。
それぞれ使用するポートが異なります。
FTPのパッシブモードの場合、 以下のポートが使用されます。
- 制御用コネクション:21番ポート
- データ転送用コネクション:エフェメラルポート
構成図に通信の流れを記載するとこんな感じです。
制御用コネクション
EC2(FTPクライアント)はFTPサーバーの21番ポート宛てに接続し、戻りの通信はEC2(FTPクライアント)のエフェメラルポート宛てで返ってきます。
データ転送用コネクション
EC2(FTPクライアント)はFTPサーバーのエフェメラルポート宛てに接続し、戻りの通信もEC2(FTPクライアント)のエフェメラルポート宛てで返ってきます。
セキュリティグループとNACLの設定
今回の構成の場合、AWS環境内で確認すべき箇所は大きく分けて以下の3点です。
- EC2(FTPクライアント)のセキュリティグループ
- EC2(FTPクライアント)があるサブネットのNACL
- NATゲートウェイがあるサブネットのNACL
(NATゲートウェイがない構成の場合は確認不要)
それぞれで確認すべきポイントを書いていきます!
EC2(FTPクライアント)のセキュリティグループ
アウトバウンド
- FTPサーバーの21番ポート宛てへの通信が許可されているか?
- FTPサーバーのエフェメラルポート(1024 - 65535)宛てへの通信が許可されているか?
セキュリティグループはステートフルなので、許可されたアウトバウンド通信に対する応答(戻りの通信)は、インバウンドルールにかかわらず通過することができます!
参照:
VPC のセキュリティグループ - Amazon Virtual Private Cloud
EC2(FTPクライアント)があるサブネットのNACL
インバウンド
- FTPサーバーからエフェメラルポート(1024 - 65535)宛ての通信が許可されているか?
アウトバウンド
- FTPサーバーの21番ポート宛てへの通信が許可されているか?
- FTPサーバーのエフェメラルポート(1024 - 65535)宛てへの通信が許可されているか?
NATゲートウェイがあるサブネットのNACL
インバウンド
- EC2(FTPクライアント)から21番ポート宛ての通信が許可されているか?
- EC2(FTPクライアント)からエフェメラルポート(1024 - 65535)宛ての通信が許可されているか?
- FTPサーバーからエフェメラルポート(1024 - 65535)宛ての通信が許可されているか?
アウトバウンド
- FTPサーバーの21番ポート宛てへの通信が許可されているか?
- FTPサーバーのエフェメラルポート(1024 - 65535)宛てへの通信が許可されているか?
- EC2(FTPクライアント)のエフェメラルポート(1024 - 65535)宛てへの通信が許可されているか?
おわりに
これでAWS環境内で確認すべきポートは以上です!
外部FTPサーバー側の設定は別途確認してくださいね◎
エフェメラルポートのポート番号に関しては以下RFC6056に基づいています。
https://www.rfc-editor.org/rfc/rfc6056.txt
古川智絵 (執筆記事の一覧)
2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁