私は自分のウェブサイトを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストしています。ユーザーには、HTTP (ポート 80) または HTTPS (ポート 443) で自分のウェブサイトに接続してもらえるよう希望しています。
解決策
ポート 80 と 443 でトラフィックを許可するには、関連するセキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) を設定する必要があります。
セキュリティグループルール
HTTP トラフィックの場合、ポート 80 で、送信元アドレス 0.0.0.0/0 からのインバウンドルールを追加します。
HTTPS トラフィックの場合、ポート 443 で、送信元アドレス 0.0.0.0/0 からのインバウンドルールを追加します。
これらのインバウンドルールでは、IPv4 アドレスからのトラフィックが許可されます。IPv6 トラフィックを許可するには、同じポートで、送信元アドレス :: /0 からのインバウンドルールを追加します。セキュリティグループの作成または変更の詳細については、「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。
セキュリティグループはステートフルなので、インスタンスからユーザーへのリターントラフィックは自動的に許可されます。セキュリティグループのアウトバウンドルールは変更する必要はありません。
注: 次の例は、TCP ポート 80 (HTTP) および 443 (HTTPS) で IPv4 および IPv6 トラフィックを許可するセキュリティグループルールを示しています。インスタンスにログインするための SSH や RDP など、他のトラフィックソースを現在のユースケースで許可する必要があるかどうかを判断してください。次に、必要なトラフィックの許可に関するインバウンドルールが SG に存在することを確認します。
インバウンドルール
| | | |
---|
タイプ | プロトコル | ポートの範囲 | ソース |
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 |
ネットワーク ACL
デフォルトのネットワーク ACL では、すべてのインバウンドとアウトバウンドの IPv4 トラフィックが許可されます。ユーザーが IPv6 経由で接続していて、Amazon 仮想プライベートクラウド (Amazon VPC) に IPv6 CIDR ブロックが関連付けられている場合、デフォルトのネットワーク ACL では、すべてのインバウンドおよびアウトバウンドの IPv6 トラフィックを許可するルールも自動的に追加されます。ただし、より制限の厳しいルールを記載したカスタムネットワーク ACL を使用する場合は、ポート 80 と 443 のトラフィックを明示的に許可する必要があります。
ネットワーク ACL はステートレスなので、Web サイトへの接続を許可するには、インバウンドルールとアウトバウンドルールの両方を追加する必要があります。ネットワーク ACL ルールの変更の詳細については、「ネットワーク ACLを使用してサブネットへのトラフィックを制御する」を参照してください。
注: 次の例は、TCP ポート 80 (HTTP) と 443 (HTTPS) のトラフィックを許可するカスタムネットワーク ACL を示しています。ネットワーク ACL は、単一の EC2 インスタンスだけでなく、サブネット全体のすべてのリソースに適用されます。設定例では、宛先ポート 80 と 443 を除き、同じサブネット内のリソースに出入りするすべてのトラフィックがブロックされます。インスタンスにログインするための SSH や RDP など、他のトラフィックソースを現在のユースケースで許可する必要があるかどうかを判断してください。次に、必要なトラフィックを許可するための適切なインバウンドルールがあることを確認します。
インバウンドルール
| | | | | |
---|
ルール# | タイプ | プロトコル | ポートの範囲 | ソース | 許可/拒否 |
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 |
アウトバウンドルール
| | | | | |
---|
ルール# | タイプ | プロトコル | ポートの範囲 | 宛先 | 許可/拒否 |
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 |
接続拒否エラーのトラブルシューティング
接続拒否エラーとは、接続リクエストがインスタンスにルーティングされても、指定したポートのサービスから受信がない状態を表すエラーです。ホスト A がホスト B への TCP 接続を開始し、接続拒否エラーを受け取った場合、以下の状況になっています。
- まず、ホスト A はホスト B に TCP SYN パケットを送信しました。
- 次に、ホスト B はホスト A に応答して TCP RST パケットを送信しました。
セキュリティグループとネットワーク ACL で TCP ポート 80 と 443 を許可した後でも、このエラーが発生した場合は、次のトラブルシューティングを行います。
- httpd (Apache) などのサービスデーモンが実行されていないか、停止状態です。
トラブルシューティングを行うには、サービスが EC2 インスタンスで実行中の状態にあるかどうかを確認します。
トラブルシューティングを行うには、EC2 インスタンスが必要な TCP ポート (80/443) でリッスンしているかどうかを確認します。
- ポートはファイアウォールによってブロックされています。
トラブルシューティングを行うには、EC2 インスタンスの OS レベルのファイアウォールが、必要なポートで受信する TCP トラフィックをブロックしていないかを確認してください。