自分のウェブサイトを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストしています。ユーザーがこのウェブサイトに、HTTP (ポート 80) または HTTPS (ポート 443) 経由で接続できるように設定したいと考えています。
解決策
ポート 80 または 443 でのトラフィックを許可するには、関連するセキュリティグループとネットワークアクセスコントロールリスト (ACL) を設定する必要があります。
セキュリティグループのルールを設定する
HTTP トラフィックに対し、送信元アドレス 0.0.0.0/0 からのポート 80 でのインバウンドルールを追加します。
HTTPS トラフィックに対し、送信元アドレス 0.0.0.0/0 からのポート 443 でのインバウンドルールを追加します。
上記のインバウンドルールでは、IPv4 アドレスからのトラフィックが許可されます。IPv6 トラフィックを許可するには、送信元アドレス ::/0 からの、同じポートでのインバウンドルールを追加します。
セキュリティグループのアウトバウンドルールを変更する必要はありません。セキュリティグループはステートフルなので、インスタンスから返されるトラフィックは自動的に許可されます。
次の設定例には、TCP ポート 80 と 443 で IPv4 および IPv6 トラフィックを許可するルールが含まれています。
インバウンドルール
| タイプ | プロトコル | ポート範囲 | ソース |
|---|
| HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 |
| HTTP (80 | TCP (6) | 80 | :: /0 |
| HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 |
| HTTPS (443) | TCP (6) | 443 | :: /0 |
注: SSH、Remote Desktop Protocol (RDP) などの、他のトラフィックソースにインスタンスへのログインを許可する必要があるかどうかを確認してください。その場合、セキュリティグループには、必須のトラフィックを許可するインバウンドルールが必要です。
ネットワーク ACL を構成する
デフォルトのネットワーク ACL では、すべてのインバウンドとアウトバウンドの IPv4 トラフィックが許可されます。Amazon Virtual Private Cloud (Amazon VPC) に IPv6 CIDR ブロックが関連付けられている場合、デフォルトのネットワーク ACL は、インバウンドおよびアウトバウンドの IPv6 トラフィックを許可するルールを自動的に追加します。ただし、制限が厳しいルールを含むカスタムネットワーク ACL を使用する場合は、ポート 80 と 443 でのトラフィックを明示的に許可する必要があります。
ネットワーク ACL はステートレスなので、ウェブサイトへの接続を許可するには、インバウンドルールとアウトバウンドルールの両方を追加する必要があります。
次の設定は、TCP ポート 80 と 443 でトラフィックを許可するカスタムネットワーク ACL の例です。ネットワーク ACL は、単一の Amazon EC2 インスタンスのみではなく、サブネット内のすべてのリソースに使用します。次の構成では、サブネット内のリソースに出入りするすべてのトラフィックを、送信先ポート 80 および 443 以外ではブロックします。
インバウンドルール
| ルール # | タイプ | プロトコル | ポート範囲 | ソース | Allow/Deny |
|---|
| 100 | HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 | ALLOW |
| 101 | HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 | ALLOW |
| 102 | HTTP (80) | TCP (6) | 80 | :: /0 | ALLOW |
| 103 | HTTPS (443) | TCP (6) | 443 | :: /0 | ALLOW |
| \ * | すべてのトラフィック | すべて | すべて | :: /0 | DENY |
| \ * | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 | DENY |
アウトバウンドルール
| ルール # | タイプ | プロトコル | ポート範囲 | 送信先 | Allow/Deny |
|---|
| 100 | カスタム TCP ルール | TCP (6) | 1024~65535 | 0.0.0.0/0 | ALLOW |
| 101 | カスタム TCP ルール | TCP (6) | 1024~65535 | :: /0 | ALLOW |
| \ * | すべてのトラフィック | すべて | すべて | :: /0 | DENY |
| \ * | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 | DENY |
注: SSH、RDP などの、他のトラフィックソースにインスタンスへのログインを許可する必要があるかどうかを確認してください。その場合、ネットワーク ACL には、必須のトラフィックを許可するインバウンドルールが必要です。
"connection refused" エラーのトラブルシューティング
セキュリティグループまたはネットワーク ACL ルールで指定していないポートに接続がルーティングされた場合、"connection refused" エラーが発生します。例として、ホスト A がホスト B への TCP 接続を開始した場合を挙げます。最初に、ホスト A はホスト B に TCP SYN パケットを送信します。次に、ホスト B はホスト A への応答で TCP RST パケットを送信します。これらの接続リクエストが、指定されたポートで行われなかった場合は、ホスト A に "connection refused" エラーが返されます。
この問題を解決するには、ポート 80 または 443 でのウェブサーバーサービスが、インスタンスで Running 状態であるかどうかを確認します。
"connection timeout" エラーのトラブルシューティング
TCP ポート 80 と 443 を明示的に許可した後も "connection timeout" エラーが発生する場合は、オペレーティングシステム (OS) のファイアウォールを確認してください。ファイアウォールが、必須ポートでのインバウンド TCP トラフィックをブロックしていないかを確認します。