AWSのネットワークACL
ちょっとハマったのでメモ。
AWSのネットワークACLは、セキュリティグループとは異なり、ステートレスな記述である。そのため、サブネット内のインスタンスからのアウトバウンドな通信を許可する場合は、戻りの通信、つまりインバウンドな通信もきちんと許可しなければならない。具体的には、Linuxのインスタンスである場合は、32768-61000
に対するインバウンドなトラフィックを許可する必要がある。
Linuxでは32768-61000
はエフェメラルポートと呼ばれ、クライアントの送信元ポート(サーバーからの受信用ポート)として一時的に使われるものである。だから、これらに対するインバウンドなトラフィックを許可しないとサーバーからの戻り値を受け取れない。
Linuxの場合、エフェメラルポートの範囲は/proc/sys/net/ipv4/ip_local_port_range
に記述されている。なお他のOSではやや範囲が異なるので注意。
一般的なソケットライブラリを扱う限り、エフェメラルポートは通常は意識しなくてよい(はず)。そのためか少しハマってしまったのでした。