入門AWS WAF傳統 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

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

入門AWS WAF傳統

注意

這是AWS WAF傳統文件中)。如果您在 2019 年 11 月 AWS WAF 之前建立 AWS WAF 資源 (例如規則和 Web ACL),而且並未將其移轉至最新版本,則應該只使用此版本。若要移轉資源,請參閱 遷移您的AWS WAF傳統資源AWS WAF

如需的最新版本AWS WAF,請參閱AWS WAF

本教學課程示範如何使用AWS WAF執行以下任務的傳統:

  • 設定AWS WAFClassic (傳統)。

  • 建立 Web 存取控制清單 (web ACL),使用AWS WAF傳統主控台,並指定您想要使用的條件來篩選 Web 請求。例如,您可以指定請求源於的 IP 地址和僅由攻擊者使用的請求數值。

  • 新增條件至規則。規則可讓您定位要封鎖或允許的 web 請求。Web 請求必須符合規則中的所有條件,之後才能滿足AWS WAF傳統會根據您指定的條件封鎖或允許請求。

  • 新增規則至您的 Web ACL。可以在此處指定您是否想要根據所新增至每個規則的條件來允許或封鎖 web 請求。

  • 指定預設動作 (封鎖或允許)。這是AWS WAF當 Web 請求不符合任何規則時,傳統採取。

  • 選擇您想要的 Amazon CloudFront 分發AWS WAF檢查 Web 請求的傳統。本教學課程涵蓋 CloudFront 的步驟,但 Application Load Balancer 和 Amazon API Gateway 的程序基本上與此相同。AWS WAFCloudFront 適用於所有AWS 區域。AWS WAF與 API Gateway 或 Application Load Balancer 搭配使用的傳統版本,可在AWS服務端點

注意

對於您在本教學課程中建立的資源,AWS 通常每天計價少於 0.25 美元。當您完成此教學課程,我們建議您刪除資源以免產生不必要的費用。

步驟 1:設定AWS WAF傳統

如果您已經註冊AWS 帳戶中所述的 IAM 使用者,並依照設定AWS WAF傳統,移至步驟 2:建立 Web ACL

如果還沒,請移至 設定AWS WAF傳統 執行至少前兩個步驟。(您可以略過下載工具步驟,因為此入門主題著重於使用AWS WAF典型主控台。)

步驟 2:建立 Web ACL

所以此AWS WAF傳統主控台會逐步引導您設定程序AWS WAF傳統可根據您指定的條件 (例如請求的來源 IP 地址或請求的值) 來封鎖或允許 Web 請求。在此步驟中,建立Web ACL。

建立 Web ACL

  1. 登入AWS Management Console,開啟AWS WAF主控台位於https://console.aws.amazon.com/wafv2/

  2. 如果您是第一次使用AWS WAF選擇移至AWS WAF傳統,然後選擇設定 Web ACL

    如果您已使用AWS WAF經典之前,選擇Web ACL,然後選擇建立 Web ACL

  3. Name web ACL (命名 Web ACL) 頁面的 Web ACL name (Web ACL 名稱) 中輸入名稱。

    注意

    建立 Web ACL 後無法修改名稱。

  4. 適用於CloudWatch 指標名稱,輸入名稱。名稱只能包含英數字元 (A-Z、a-z、0-9)。不能含有空格。

    注意

    建立 Web ACL 後無法修改名稱。

  5. 針對 Region (區域),選擇一個區域。如果您會將這個 Web ACL 與 CloudFront 分發關聯,選擇全球 (CloudFront)

  6. 對於要關聯的 AWS 資源,選擇您想要將此 Web ACL 關聯的資源,然後選擇下一步

步驟 3:建立 IP 比對條件

IP 比對條件可指定發出請求的 IP 地址或 IP 地址範圍。在此步驟中,建立 IP 比對條件。在後續步驟中,您指定是否要允許或封鎖來自指定 IP 地址的請求。

注意

如需 IP 比對條件的詳細資訊,請參閱使用 IP 比對條件

建立 IP 比對條件

  1. 建立條件頁面,於IP 符合條件,選擇建立條件

  2. Create IP match condition (建立 IP 比對條件) 對話方塊中,於 Name (名稱),輸入名稱。名稱僅能含有英數字元 (A-Z、a-z、0-9) 或以下特殊字元:_-!"#`+*},./。

  3. 針對 Address (地址),輸入 192.0.2.0/24。指定於 CIDR 符號的此 IP 地址範圍,包含 IP 地址,從 192.0.2.0 192.0.2.255。(例如,預留 192.0.2.0/24 IP 地址範圍,則沒有任何 web 請求會來自這些 IP 地址)。

    AWS WAF典型支援 IPv4 地址範圍:/8 和 /16 到 /32 之間的範圍。AWS WAF傳統支援 IPv6 地址範圍:/24、/32、/48、/56、/64 及 /128。(若要指定單一 IP 地址,例如 192.0.2.44,請輸入 192.0.2.44/32)。不支援其他範圍。

    如需 CIDR 符號表示法的詳細資訊,請參閱 Wikipedia 文章 無類別網域間路由

  4. 選擇 Create (建立)。

步驟 4:建立地理比對條件

地理比對條件指定國家/地區為請求的發源地。在此步驟中,建立地理比對條件。在後續步驟中,您指定是否要允許或封鎖來自指定國家/地區的請求。

注意

如需地理比對條件的詳細資訊,請參閱使用地理比對條件

建立地理比對條件

  1. 建立條件頁面,於地理符合條件,選擇建立條件

  2. Create geo match condition (建立地理比對條件) 對話方塊中,於 Name (名稱),輸入名稱。名稱僅能含有英數字元 (A-Z、a-z、0-9) 或以下特殊字元:_-!"#`+*},./。

  3. 選擇位置類型和國家/地區。目前, Location type (位置類型) 只能是 Country (國家/地區)

  4. 選擇新增位置

  5. 選擇 Create (建立)。

步驟 5:建立字串比對條件

字符串匹配條件標識您想要的字符串AWS WAF要在請求中搜尋的典型,例如,在標頭或查詢字串中指定的值。通常,字串包含可列印 ASCII 字元,但您可以指定十六字元範圍 0x00 到 0xFF 的任何字元 (小數點 0 到 255)。在此步驟中,建立字串比對條件。在後續步驟中,您指定是否要允許或封鎖含有指定字串的請求。

注意

如需字串比對條件的詳細資訊,請參閱使用字串比對條件

建立字串比對條件

  1. Create conditions (建立條件) 頁面,於 String and regex match conditions (字串和 regex 符合條件) 選擇 Create condition (建立條件)

  2. Create string match condition (建立字串比對條件) 對話方塊中,輸入以下的值:

    名稱

    輸入名稱。名稱僅能含有英數字元 (A-Z、a-z、0-9) 或以下特殊字元:_-!"#`+*},./。

    類型

    選擇 String match (字串比對)

    要篩選的請求部分是

    選擇您想要的 Web 請求部分AWS WAF傳統檢查是否含有指定字串。

    在此範例中,請選擇 Header (標頭)

    注意

    如果選擇Body (本文)的值要篩選的請求部分是、AWS WAF傳統只會檢查第一個 8192 位元組 (8 KB),因為 CloudFront 只會轉送第一個 8192 位元組進行檢查。若要為超過 8192 位元組的內文允許或封鎖請求,您可以建立大小限制條件。(AWS WAF經典從請求標題中獲取主體的長度。) 如需詳細資訊,請參閱使用容量限制條件

    標頭 (必要,如果「部分請求的篩選條件」為「標頭」時)

    因為你選擇標頭for要篩選的請求部分是,您必須指定您想要的標題AWS WAF經典的檢查。輸入 User-Agent (使用者代理程式)。(此值不區分大小寫)。

    符合類型

    選擇指定字串必須顯示在 User-Agent (使用者代理程式) 標頭中的位置,例如,在開始時或在字串中。

    在此範例中,請選擇完全符合,這表示AWS WAFClassic 會檢查 Web 請求的標頭值,是否含有與您指定的值相同的標頭值。

    轉換

    為了繞過AWS WAF傳統攻擊者使用不常見的格式化 Web 請求,例如,新增空格、使用 URL 編碼部分或全部請求。轉換藉由移除空格、URL 解碼、或執行其他操作可以降低攻擊常使用的不常見格式,將 web 請求轉換成更標準的格式。

    您只能指定一種文字轉換類型。

    在此範例中,請選擇 None (無)

    base64 編碼值

    如果您於 Value to match (符合值) 輸入的值是 base64 編碼,請選取此核取方塊。

    在此範例中,不需選取核取方塊。

    符合值

    指定您希望的值AWS WAF在您於中指定的 Web 請求部分搜尋的經典項目要篩選的請求部分是

    在此範例中,請輸入BadBot。AWS WAF經典將檢查User-Agent在 Web 請求中的值BadBot

    符合值 的長度上限為 50 個字元。如果您想要指定 base64 編碼值,可在編碼前提供最多 50 個字元。

  3. 如果您想要AWS WAF經典可檢查 Web 請求的多個值,例如User-Agent標頭,包含BadBot和包含的查詢字串BadParameter,您有兩種選擇:

    • 如果您想要當它們含有兩者得的值時 (AND) 才允許或封鎖 web 請求,您可以為每個值建立一個字串比對條件。

    • 如果您想要當它們含有其中一個值或兩者的值時 (OR) 才允許或封鎖 web 請求,您可以新增兩者的值至相同的字串比對條件中。

    在本範例中,請選擇 Create (建立)

步驟 5A:建立 Regex 條件 (選用)

規則運算式條件是一種字串比對條件,而類似點在於它會識別您想要的字串AWS WAF要在請求中搜尋的典型,例如,在標頭或查詢字串中指定的值。主要差別是您可以使用規則運算式 (regex) 來指定您想要的字串模式AWS WAF要搜尋的典型。在此步驟中,建立 regex 比對條件。在後續步驟中,您指定是否要允許或封鎖含有指定字串的請求。

注意

如需規則運算式比對條件的詳細資訊,請參閱使用 Regex 比對條件

建立 regex 比對條件

  1. Create conditions (建立條件) 頁面,於 String match and regex conditions (字串符合和 regex 條件) 選擇 Create condition (建立條件)

  2. Create string match condition (建立字串比對條件) 對話方塊中,輸入以下的值:

    名稱

    輸入名稱。名稱僅能含有英數字元 (A-Z、a-z、0-9) 或以下特殊字元:_-!"#`+*},./。

    類型

    選擇 Regex match (Regex 比對)

    要篩選的請求部分是

    選擇您想要的 Web 請求部分AWS WAF傳統檢查是否含有指定字串。

    在此範例中,請選擇 Body (內容主體)

    注意

    如果選擇Body (本文)的值要篩選的請求部分是、AWS WAF傳統只會檢查第一個 8192 位元組 (8 KB),因為 CloudFront 只會轉送第一個 8192 位元組進行檢查。若要為超過 8192 位元組的內文允許或封鎖請求,您可以建立大小限制條件。(AWS WAF經典從請求標題中獲取主體的長度。) 如需詳細資訊,請參閱使用容量限制條件

    轉換

    為了繞過AWS WAF傳統攻擊者使用不常見的格式化 Web 請求,例如,新增空格、使用 URL 編碼部分或全部請求。轉換藉由移除空格、URL 解碼、或執行其他操作可以降低攻擊常使用的不常見格式,將 web 請求轉換成更標準的格式。

    您只能指定一種文字轉換類型。

    在此範例中,請選擇 None (無)

    比對請求的 Regex 模式

    選擇 Create regex pattern set (建立 Regex 模式集)

    新模式集的名稱

    輸入名稱,然後指定您想要的規則運算式模式AWS WAF要搜尋的典型。

    接下來,輸入規則運算式我 [一個 @] MaB [一個 @] 請求。AWS WAF經典將檢查User-Agent標頭中的值:

    • IamABadRequest

    • IamAB@dRequest

    • I@mABadRequest

    • I@mAB@dRequest

  3. 選擇 Create pattern set and add filter (建立模式集並新增篩選條件)

  4. 選擇 Create (建立)。

步驟 6:建立 SQL Infection 比對條件

SQL Inkection 比對條件會識別您想要的 Web 請求部分,例如,標頭或查詢字串。AWS WAF可檢查惡意 SQL 程式碼的傳統。攻擊者使用 SQL 查詢來擷取您資料庫的資料。在此步驟中,建立 SQL injection 比對條件。在後續步驟中,您指定是否要允許或封鎖貌似含有惡意 SQL 程式碼的請求。

注意

如需字串比對條件的詳細資訊,請參閱使用 SQL Injection 比對條件

建立 SQL Injection 比對條件

  1. Create conditions (建立條件) 頁面,於 SQL injection match conditions (SQL injection 符合條件),選擇 Create condition (建立條件)

  2. Create SQL injection match condition (建立 SQL injection 比對條件) 對話方塊中,輸入以下的值:

    名稱

    輸入名稱。

    要篩選的請求部分是

    選擇您希望的 Web 請求部分AWS WAF可檢查惡意 SQL 程式碼的傳統。

    在此範例中,選擇 Query string (查詢字串)

    注意

    如果選擇Body (本文)的值要篩選的請求部分是、AWS WAF傳統只會檢查第一個 8192 位元組 (8 KB),因為 CloudFront 只會轉送第一個 8192 位元組進行檢查。若要為超過 8192 位元組的內文允許或封鎖請求,您可以建立大小限制條件。(AWS WAF經典從請求標題中獲取主體的長度。) 如需詳細資訊,請參閱使用容量限制條件

    轉換

    在此範例中,請選擇 URL decode (URL 解碼)

    攻擊者使用不常見的格式,例如 URL 編碼,為了略過AWS WAFClassic (傳統)。所以此URL 解碼選項可在 Web 請求中減少部分格式化,之後AWS WAF經典檢查請求。

    您只能指定一種文字轉換類型。

  3. 選擇 Create (建立)。

  4. 選擇 Next (下一步)。

步驟 7:(選用) 建立其他條件

AWS WAF經典包含其他條件,包括下列項目:

  • 大小約束條件— 識別您想要的 Web 請求部分,例如,標頭或查詢字串。AWS WAF經典檢查長度。如需詳細資訊,請參閱使用容量限制條件

  • 跨網站指令碼比對條件— 識別您想要的 Web 請求部分,例如,標頭或查詢字串。AWS WAF檢查惡意指令碼。如需詳細資訊,請參閱使用跨網站指令碼比對條件

您可以現在選擇性地建立這些條件,或者您可以略過此步驟,前往 步驟 8:建立規則並新增條件

步驟 8:建立規則並新增條件

您可以建立規則指定您想要的條件AWS WAF在 Web 請求中搜尋的傳統。如果您將一個以上的條件新增至規則,Web 請求必須符合AWS WAF傳統可根據該規則允許或封鎖請求。

注意

如需規則的詳細資訊,請參閱使用規則

建立規則並新增條件

  1. Create rules (建立規則) 頁面上,選擇 Create rules (建立規則)

  2. Create rules (建立規則) 對話方塊中,輸入以下的值:

    名稱

    輸入名稱。

    CloudWatch 指標名稱

    輸入 CloudWatch 指標的名稱,AWS WAF典型會建立此規則並將其與規則關聯。名稱只能包含英數字元 (A-Z、a-z、0-9)。不能含有空格。

    Rule type (規則類型)

    選擇 Regular rule (一般規則)Rate-based rule (以速率為基礎的規則)。以速率為基礎的規則與一般規則相同,但還會考慮每五分鐘,從已識別的 IP 地址所發出的請求數量。如需這些規則類型的詳細資訊,請參閱操作說明AWS WAF傳統作品。在此範例中,選擇 Regular rule

    速率限制

    對於以速率為基礎的規則,輸入五分鐘期間內允許來自符合規則條件之 IP 地址的最大請求數量。

  3. 對於您希望新增到規則的第一個條件,請指定以下設定:

    • 選擇是否要AWS WAF傳統可根據 Web 請求是否符合設定的條件來允許或封鎖請求。

      在此範例中,請選擇 does (有符合)

    • 選擇您想新增至規則的條件類型:IP 比對設定條件、字串比對設定條件、或是 SQL injection 比對設定條件。

      在此範例中,選擇 originate from IP addresses in (源於的 IP 地址)

    • 選擇要新增到規則的條件。

      在此範例中,選擇您在前一任務中所建立的 IP 比對條件。

  4. 選擇新增條件

  5. 新增您之前建立的地理比對條件。指定下列值:

    • When a request does (當請求有)

    • 源於的地理位置

    • 選擇您的地裡比對條件。

  6. 選擇 Add another condition (新增其他條件)

  7. 新增您之前建立的字串比對條件。指定下列值:

    • When a request does (當請求有)

    • 至少符合字串比對條件裡的一項篩選條件

    • 選擇您的字串比對條件。

  8. 選擇新增條件

  9. 新增您之前建立的 SQL injection 比對條件。指定下列值:

    • When a request does (當請求有)

    • 至少符合 SQL injection 比對條件裡的一項篩選條件

    • 選擇您的 SQL injection 比對條件。

  10. 選擇新增條件

  11. 新增您之前建立的容量限制條件。指定下列值:

    • When a request does (當請求有)

    • 至少符合容量限制條件裡的一項篩選條件

    • 選擇您的容量限制條件。

  12. 如果您建立任何其他的條件,例如 regex 條件,以相同方式新增。

  13. 選擇 Create (建立)。

  14. 對於 Default action (預設動作),選擇 Allow all requests that don't match any rules (允許不符合任何規則的請求)

  15. 選擇 Review and create (檢閱和建立)

步驟 9:新增規則至 Web ACL

當您新增規則至 Web ACL,您可以指定以下設定:

  • 您想要的動作AWS WAF傳統可在 Web 請求符合規則中的所有條件時採取:允許、封鎖或計數請求。

  • Web ACL 的預設動作。這是您希望的動作AWS WAF經典的 Web 請求不要符合規則中的所有條件:允許或封鎖請求。

AWS WAF傳統會開始封鎖 CloudFront Web 請求,這些請求符合所有下列條件 (以及您可能已新增的其他條件):

  • User-Agent 標頭的值為 BadBot

  • (如果您建立並新增 regex 條件) Body 的值為任何符合 I[a@]mAB[a@]dRequest 模式的四個字串 (four strings)。

  • 發出請求的 IP 地址範圍為 192.0.2.0-192.0.2.255

  • 您在地理比對條件中選取發出請求的國家/地區

  • 請求貌似有包含惡意 SQL 的查詢字串。

AWS WAFCloudFront 可讓回應任何不滿足這三個條件的請求。

步驟 10:清除您的資源

現在,您已成功完成教學課程。為了防止您的帳戶累積額外AWS WAF傳統收取費用,您應該清除AWS WAF您建立的傳統物件。或者,您可以變更設定,以確實比對要允許、封鎖和計數的 web 請求。

注意

對於您在本教學課程中建立的資源,AWS 通常每天計價少於 0.25 美元。當您完成時,我們建議您刪除資源以免產生不必要的費用。

刪除AWS WAF傳統收取費用

  1. 將 web ACL 和 CloudFront 分發取消關聯:

    1. 登入AWS Management Console,開啟AWS WAF主控台位於https://console.aws.amazon.com/wafv2/

    2. 選擇您要刪除的 Web ACL。

    3. 在右窗格中,在規則索引標籤上,移至AWS使用此網頁 ACL 的資源」區段。對於您與 Web ACL 建立關聯的 CloudFront 分發,請選擇x中的類型column。

  2. 從您的規則移除條件:

    1. 在導覽窗格中,選擇 Rules (規則)

    2. 選擇在本教學課程中建立的規則。

    3. 選擇編輯規則

    4. 選擇每個條件標題右邊的 x

    5. 選擇 Update (更新)。

  3. 從您的 Web ACL 移除規則,以及刪除 Web ACL:

    1. 在導覽窗格中,選擇 Web ACL

    2. 選擇在本教學課程中建立的 Web ACL。

    3. 規則標籤上,選擇 Edit web ACL (編輯 Web ACL)

    4. 選擇每個規則標題右邊的 x

    5. 選擇 Actions (動作),然後選擇 Delete web ACL (刪除 Web ACL)

  4. 刪除您的規則:

    1. 在導覽窗格中,選擇 Rules (規則)

    2. 選擇在本教學課程中建立的規則。

    3. 選擇 Delete (刪除)。

    4. 刪除對話方塊中,再次選擇刪除確認。

AWS WAFClassic 不會為條件收取費用,但如果您想要完成清除,請執行以下步驟,從條件移除篩選條件並刪除條件。

刪除篩選條件和條件

  1. 刪除您的 IP 比對條件的 IP 地址範圍,以及刪除 IP 比對條件:

    1. 在導覽窗格中AWS WAF經典主控台,選擇IP 地址

    2. 選擇在本教學課程中建立的 IP 比對條件。

    3. 選取您新增的 IP 地址範圍的核取方塊。

    4. 選擇刪除 IP 地址或範圍

    5. IP match conditions (IP 比對條件) 窗格中,選擇刪除

    6. 刪除對話方塊中,再次選擇刪除確認。

  2. 刪除您的 SQL injection 比對條件的篩選條件,以及刪除 SQL injection 比對條件:

    1. 在導覽窗格中,選擇 SQL injection

    2. 選擇在本教學課程中建立的 SQL injection 比對條件。

    3. 選取您新增篩的選條件的核取方塊。

    4. 選擇刪除篩選條件

    5. SQL injection match conditions (SQL injection 比對條件) 窗格中,選擇刪除

    6. 刪除對話方塊中,再次選擇刪除確認。

  3. 刪除您的字串比對條件的篩選條件,以及刪除字串比對條件:

    1. 在導覽窗格中選擇字串和 regex 比對

    2. 選擇在本教學課程中建立的字串比對條件。

    3. 選取您新增篩的選條件的核取方塊。

    4. 選擇刪除篩選條件

    5. String match conditions (字串比對條件) 窗格中,選擇刪除

    6. 刪除對話方塊中,再次選擇刪除確認。

  4. 如果您有建立的話,請刪除您的 regex 比對條件的篩選條件,以及刪除 regex 比對條件:

    1. 在導覽窗格中選擇字串和 regex 比對

    2. 選擇在本教學課程中建立的 regex 比對條件。

    3. 選取您新增篩的選條件的核取方塊。

    4. 選擇刪除篩選條件

    5. Regex match conditions (Regex 比對條件)窗格中,選擇刪除

    6. 刪除對話方塊中,再次選擇刪除確認。

  5. 刪除您的容量限制條件的篩選條件,以及刪除容量限制條件:

    1. 在導覽窗格中,選擇容量限制

    2. 選擇在本教學課程中建立的容量限制條件。

    3. 選取您新增篩的選條件的核取方塊。

    4. 選擇刪除篩選條件

    5. Size constraint conditions (容量限制條件) 窗格中,選擇刪除

    6. 刪除對話方塊中,再次選擇刪除確認。