

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EC2 安全群組連線追蹤
<a name="security-group-connection-tracking"></a>

您的安全群組使用連線追蹤來追蹤流入和流出執行個體流量的資訊。規則會根據流量的連線狀態套用，以判斷該允許或拒絕該流量。使用這種方法，安全群組是可設定狀態的。這表示傳入流量的回應可從執行個體傳出，與對外安全群組規則無關，反之亦然。

舉例來說，假設您從家用電腦中對執行個體啟動一個命令 (例如 netcat 或類似的命令)，並且您的傳入安全群組規則允許 ICMP 流量。會追蹤連線的相關資訊 (包括連接埠資訊)。來自執行個體對命令的回應流量不會作為新的請求追蹤，而是作為已建立的連線，並且將允許流出執行個體，即使您的傳出安全群組規則限制傳出 ICMP 流量。

針對 TCP、UDP 或 ICMP 之外的通訊協定，只會追蹤 IP 地址和通訊協定號碼。若您的執行個體傳送流量到另一個主機，且該主機也在 600 秒內將相同類型的流量傳送至您的執行個體，無論傳入安全群組規則為何，執行個體的安全群組都會接受該流量。安全群組會接受該流量，因為將其視為原始流量的回應流量。

變更安全群組規則時，其跟蹤的連線不會立即中斷。安全群組將繼續允許封包，直到現有連線逾時為止。若要確保無論追蹤狀態為何，流量皆會立即中斷，或所有流量都受到防火牆規則的限制，您可以為子網使用網路 ACL。網路 ACL 為無狀態，因此不會自動允許回應流量。新增阻止任一方向流量的網路 ACL 會破壞現有連線。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

**注意**  
安全群組對 Route 53 Resolver 接收或發出的 DNS 流量沒有影響，有時稱為「VPC\$12 IP 地址」 (請參閱「Amazon Route 53 開發人員指南」**中的 [Amazon Route 53 Resolver 是什麼？](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html))，或稱為 「AmazonProvidedDNS」 (請參閱「Amazon Virtual Private Cloud 使用者指南」**中的[使用 DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/DHCPOptionSet.html))。如果您想要透過 Route 53 Resolver 篩選 DNS 請求，則可以啟用 Route 53 Resolver DNS Firewall (請參閱「Amazon Route 53 開發人員指南」**中的 [Route 53 Resolver DNS Firewall](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html))。

## 未追蹤的連線
<a name="untracked-connections"></a>

並非所有的流量流程都會追蹤。若安全群組規則允許所有流量的 TCP 或 UDP 流 (0.0.0.0/0 或 ::/0)，且另一個方向也有對應的規則，它允許所有連接埠 (0-65535) 的所有回應流量 (0.0.0.0/0 或 ::/0)，則不會追蹤流量，除非其為[自動追蹤連線](#automatic-tracking)的一部分。接著會依據允許回應流量的傳入或傳出規則允許未追蹤流的回應流量，而非依據追蹤資訊。

若啟用未受追蹤之流量流程的規則遭到移除或修改，則該流程會立即中斷。例如，如果您有一個開啟的 (0.0.0.0/0) 輸出規則，並移除允許所有 (0.0.0.0/0) 輸入 SSH (TCP 連接埠 22) 流量至執行個體的規則 (或進行修改以不再允許連線)，則您現有的 SSH 連線會立即中斷與執行個體的連線。該連線之前未被追蹤，因此該變更會中斷連線。另一方面，如果您的輸入規則範圍較窄，最初允許 SSH 連線 (表示連線已被追蹤)，但會將規則變更為不再允許來自目前 SSH 用戶端地址的新連線，則現有的 SSH 連線將不會因為其遭到追蹤而中斷。

## 自動追蹤連線
<a name="automatic-tracking"></a>

即使安全群組組態未以其他方式要求追蹤，也會自動追蹤透過以下方式所建立的連線。
+ 輸出限定網際網路閘道
+ Global Accelerator 加速器
+ NAT 閘道
+ Network Firewall 防火墻端點
+ Network Load Balancer
+ AWS PrivateLink （介面 VPC 端點）
+ AWS Lambda （超平面彈性網路介面）
+ DynamoDB 閘道端點 – 每個 DynamoDB 連線皆會取用 2 個 Conntrack 項目。

## 連線追蹤額度
<a name="connection-tracking-throttling"></a>

Amazon EC2 會定義每個執行個體可追蹤的連線數目上限。達到最大值之後，任何傳送或接收的封包都會捨棄，因為無法建立新的連線。發生這種情況時，傳送及接收封包的應用程式無法正確通訊。使用 `conntrack_allowance_available` 網路效能指標來判斷該執行個體類型仍可使用的追蹤連線數目。

若要判斷是否因為執行個體的網路流量超過可追蹤的連線數目上限而捨棄封包，請使用 `conntrack_allowance_exceeded` 網路效能指標。如需詳細資訊，請參閱[監控 EC2 執行個體的 ENA 設定網路效能](monitoring-network-performance-ena.md)。

使用 Elastic Load Balancing 時，如果超過每個執行個體可追蹤的連線數目上限，建議您使用負載平衡器調整執行個體數目，或使用負載平衡器調整執行個體大小。

## 連線追蹤最佳實務
<a name="connection-tracking-performance"></a>

非對稱路由，也就是當流量透過一個網路介面進入執行個體，並透過不同的網路介面離開，可能導致執行個體在追蹤流程時，可達的峰值效能降低。

若要在為您的安全群組啟用連線追蹤時維持尖峰效能並最佳化連線管理，我們建議您使用下列組態：
+ 如果可能，請避免非對稱路由拓撲。
+ 使用網路 ACLs 而不是使用安全群組進行篩選。
+ 如果您必須使用安全群組進行連線追蹤，請設定最短的閒置連線追蹤逾時。如需閒置連線追蹤逾時的詳細資訊，請參閱下一節。
+ 隨著 Nitrov6 執行個體的預設逾時較短，具有長期連線 （例如資料庫連線集區、持久性 HTTP 連線或串流工作負載） 的應用程式應在執行個體啟動時設定適當的`TcpEstablishedTimeout`值。
+ 對於長期連線，請將 TCP 保持運作狀態設定為以少於 5 分鐘的間隔傳送，以確保連線保持開啟並維持其追蹤狀態。這有助於防止因閒置逾時而捨棄連線，並減少連線重新建立的額外負荷。

如需開啟績效詳情的詳細資訊，請參閱[Nitro 系統效能調校的考量因素](ena-nitro-perf.md)。

## 閒置連線追蹤逾時
<a name="connection-tracking-timeouts"></a>

安全群組會追蹤每個建立的連線，以確保傳回封包如預期交付。每個執行個體可追蹤的連線數目上限。處於閒置狀態的連線可能會導致連線追蹤耗盡，並造成不追蹤連線及捨棄封包。您可以在彈性網路介面上設定閒置連線追蹤的逾時。

**注意**  
此功能僅適用於 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。在部署到生產環境之前，您應該在 Nitrov6 世代執行個體上測試應用程式，減少`350`第二個預設連線追蹤逾時。

可設定的逾時有三種：
+ **已建立的 TCP 逾時**：處於已建立狀態的閒置 TCP 連線逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`432000` 秒
  + 預設：[Nitrov6](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) 執行個體類型為 `350` 秒，P6e-GB200 除外。其他執行個體類型為 `432000` 秒，包括 P6e-GB200。
  + 建議：`432000` 秒以下。
+ **UDP 逾時**：只出現單一方向或單一請求回應交易流量的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`30` 秒
  + 最大值：`60` 秒
  + 預設：`30` 秒
+ **UDP 串流逾時**：分類為出現多個請求回應交易串流的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`180` 秒
  + 預設：`180` 秒

您可修改下列任何情況的預設逾時：
+  如果您[使用 Amazon EC2 網路效能指標監控追蹤的連線](monitoring-network-performance-ena.md)，*conntrack\$1allowance\$1exceeded* 和 *conntrack\$1allowance\$1available* 可用指標可讓您監控丟棄的封包和追蹤連線使用率，以透過縱向擴展或橫向擴展動作來主動管理 EC2 執行個體容量，以協助在丟棄封包之前滿足網路連線需求。如果您在 EC2 執行個體上觀察到 *conntrack\$1allowance\$1exceeded*，將已建立的 TCP 逾時設定得較低可能對您有所幫助，可解決因不正確的用戶端或網路中間盒造成的過時 TCP/UDP 工作階段。
+ 一般而言，負載平衡器或防火牆已建立的 TCP 閒置逾時範圍為 60 到 90 分鐘。如果您執行的工作負載預期會處理來自網路防火牆等設備的大量連線 (10 萬以上)，建議您在 EC2 網路介面上設定相似的逾時。
+ 如果您執行的工作負載使用非對稱路由拓撲，建議您設定 TCP 建立的閒置逾時為 60秒。
+ 如果您執行的工作負載具有大量連線 (例如 DNS、SIP、SNMP、Syslog、Radius 和其他主要使用 UDP 來處理請求的服務)，則將「UDP 串流」逾時設為 60 秒，可為現有容量提供更高的規模/效能，並防止發生灰色故障。
+ 系統會追蹤所有經過 Network Load Balancer 的 TCP/UDP 連線。TCP 流量的閒置逾時值為 350 秒，UDP 流量為 120 秒，且會隨介面層級逾時值而異。您可在網路介面層級設定逾時，讓逾時的彈性大於負載平衡器的預設值。

執行下列操作時，您可以選擇設定連線追蹤逾時：
+ [建立網路介面](create-network-interface.md)
+ [修改網路介面屬性](modify-network-interface-attributes.md)
+ [啟動 EC2 執行個體](ec2-instance-launch-parameters.md#liw-network-settings)
+ [建立 EC2 執行個體啟動範本](ec2-instance-launch-parameters.md#liw-network-settings)

## 範例
<a name="connection-tracking-example"></a>

在下列範例中，安全群組具備允許 TCP 和 ICMP 流量的傳入規則，以及允許所有傳出流量的對外規則。


**傳入**  

| 通訊協定類型 | 連接埠號碼 | 來源 | 
| --- | --- | --- | 
| TCP  | 22 (SSH) | 203.0.113.1/32 | 
| TCP  | 80 (HTTP) | 0.0.0.0/0 | 
| TCP  | 80 (HTTP) | ::/0 | 
| ICMP | 全部 | 0.0.0.0/0 | 


**傳出**  

| 通訊協定類型 | 連接埠號碼 | 目的地 | 
| --- | --- | --- | 
| 全部 | 全部 | 0.0.0.0/0 | 
| 全部 | 全部 | ::/0 | 

對於執行個體或網路介面的直接網路連線，追蹤行為如下：
+ 會追蹤連接埠 22 (SSH) 上傳入和傳出的 TCP 流量，因為傳入規則僅允許來自 203.0.113.1/32 的流量，而非所有 IP 地址 (0.0.0.0/0)。
+ 連接埠 80 (HTTP) 上傳入和傳出的 TCP 流量則不會受到追蹤，因為傳入和傳出規則允許來自所有 IP 地址的流量。
+ ICMP 流量一律會受到追蹤。

若您移除 IPv4 流量的傳出規則，則所有傳入和傳出的 IPv4 流量都會受到追蹤，包括位於連接埠 80 (HTTP) 上的流量。如果您移除 IPv6 流量的傳出規則，IPv6 流量也會受到相同影響。