1.事象の背景
FTPのセキュリティグループで詰まったという話。
セキュリティグループの設定がアバウトだったため、整備した後にFTP通信できないという事象が起きた。
EC2インスタンスからEC2インスタンスへFTPでファイルを送ろうとしていたら、送れないというエラー。最初は単純にFTPサーバー側となる20番ポートのインバウンド通信を許可を忘れていただけだと思っていた。しかし、それでも該当のエラーが消えることはなかった。
一先ず、プログラムではアクティブモードを使用していることを確認。
※アウトバウンドについては、すべての通信を許可しているため、特に記載しない。
2.原因
FTPのパッシブモードでは、2つの通信経路から成り立っている。1つ目はクライアント→サーバーの通信で制御コネクションで、サーバーのインバウンドはポート21を使用している。
そして、その通信と並行してデータコネクションのための通信を行っている。このデータコネクションはサーバー→クライアントで通信を行っており、クライアント側のインバウンドを許可する必要があるというのが原因。
因みにクライアントがこの時使用しているポートは1024-65535の任意のポート。
HTTPだとリクエスト後のレスポンスは自動的に許可されたり、SSHやRDPなんかはクライアント側のポートを意識しない。そのノリでFTP思ったら、少し異なる通信方法だった。
3.対処法
一連の対応で、下記のセキュリティグループに設定を追加
サーバ側のセキュリティグループ
プロトコル:カスタムTCP
ポート:21
通信ソース:VPCのアドレス
クライアント側のセキュリティグループ
プロトコル:カスタムTCP
ポート:1024-65535
通信ソース:VPCのアドレス
4.あとがき
一旦通信ソースのIPで受け付ける通信を制限しているものの、許可しているポートの範囲が広すぎるのが気になるのでOS側でポートの指定ができるかを試す必要がある。
また、コネクション確立の際サーバーは20番ポートを使用している。しかし、先にも記載した通り、アウトバウンドはすべての通信を許可してるため特に設定の変更はなかった。