はじめに
あるVPC内のPrivateサブネットにあるEC2インスタンスから同VPC内のPublicサブネットにあるNATゲートウェイを経由して外部FTPサーバへパッシブモードで通信させる際に行った、セキュリティグループやネットワークACLの設定を備忘として残しておきます。
FTPについて
FTPでは2つのTCPコネクション「コントロールコネクション(制御用)」と、「データコネクション(データ転送用)」を使ってファイル転送を行っています。
また、FTPの通信には、サーバからクライアントに対して接続要求を行う「アクティブモード」と、クライアントからサーバに対して接続要求を行う「パッシブモード」の2パターンがあります。
FTPがアクティブモードの場合、 以下のポートが使用されます。(今回の設定では対象外)
・コントロールコネクション(制御用):21番ポート
・データコネクション(データ転送用):20番ポート
FTPがパッシブモードの場合、 以下のポートが使用されます。
・コントロールコネクション(制御用):21番ポート
・データコネクション(データ転送用):エフェメラルポート(ダイナミックポート)
パッシブモードでの通信の流れ
【コントロールコネクション】
EC2はFTPサーバの21番ポートに接続し、戻りの通信はEC2のエフェメラルポートに返ってきます。
【データコネクション】
EC2はFTPサーバのエフェメラルポートに接続し、戻りの通信もEC2のエフェメラルポートに返ってきます。
セキュリティグループとネットワークACLの設定
今回行う設定は以下になります。(VPC内の構成によって変わります。)
EC2(FTPクライアント)のセキュリティグループ
【アウトバウンド】
FTPサーバの21番ポートへの通信許可
FTPサーバのエフェメラルポート(1024 - 65535)への通信許可
セキュリティグループはステートフルです。インスタンスからリクエストを送信する場合、そのリクエストのレスポンストラフィックは、インバウンドセキュリティグループのルールにかかわらず、流れることができます。許可されたインバウンドトラフィックに対する応答(戻りのトラフィック)は、アウトバウンドルールにかかわらずアウト側に対し通過することができます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html
EC2(FTPクライアント)があるPrivateサブネットのネットワークACL
【インバウンド】
FTPサーバからエフェメラルポート(1024 - 65535)への通信許可
【アウトバウンド】
FTPサーバの21番ポートへの通信許可
FTPサーバのエフェメラルポート(1024 - 65535)への通信許可
NATゲートウェイがあるPublicサブネットのネットワークACL
【インバウンド】
EC2(FTPクライアント)から21番ポートへの通信許可
EC2(FTPクライアント)からエフェメラルポート(1024 - 65535)への通信許可
FTPサーバからエフェメラルポート(1024 - 65535)への通信許可
【アウトバウンド】
FTPサーバの21番ポートへの通信許可
FTPサーバのエフェメラルポート(1024 - 65535)への通信許可
EC2(FTPクライアント)のエフェメラルポート(1024 - 65535)への通信許可
さいごに
エフェメラルポートの範囲は狭めておくのがベター