ป้ายกำกับ: WebSecurity

Cloudflare Drop Rule Configuration & Expressions (การเขียนเงื่อนไข Custom Rules กรอง IP, Country, URI Path หรือ User-Agent เพื่อสั่ง Drop)Cloudflare Drop Rule Configuration & Expressions (การเขียนเงื่อนไข Custom Rules กรอง IP, Country, URI Path หรือ User-Agent เพื่อสั่ง Drop)

# Cloudflare Drop Rule Configuration & Expressions: คู่มือขั้นสูงการเขียนเงื่อนไขเพื่อกรองและบล็อกทราฟฟิก (IP, Country, Path, User-Agent)

—

## 💡 บทนำ: ทำไมการตั้งค่า Drop Rule จึงสำคัญ?

ในโลกของการรักษาความปลอดภัยทางไซเบอร์ การรับมือกับทราฟฟิกที่ไม่พึงประสงค์ (Unwanted Traffic) เช่น Bot Attacks, DDoS Attacks, หรือสแกนเนอร์ต่างๆ ถือเป็นภารกิจหลักของ Web Security การปล่อยให้ทราฟฟิกเหล่านี้เข้าถึงระบบได้แม้เพียงเล็กน้อย ก็สามารถสร้างภาระให้กับเซิร์ฟเวอร์และทำให้เกิดช่องโหว่ได้

**Cloudflare** เป็นหนึ่งในเครื่องมือที่ทรงพลังที่สุดในการป้องกันภัยคุกคามเหล่านี้ โดยเฉพาะฟีเจอร์ **”Rules”** ที่อนุญาตให้ผู้ดูแลระบบสามารถกำหนดเงื่อนไขการทำงานที่ซับซ้อน (Expressions) เพื่อสั่งการให้ Cloudflare ทำการ **”Drop”** หรือบล็อกทราฟฟิกเหล่านั้นก่อนที่มันจะไปถึง Origin Server ของคุณ

บทความนี้คือคู่มือฉบับสมบูรณ์สำหรับผู้ที่ต้องการเรียนรู้วิธีการเขียนเงื่อนไข (Expressions) เพื่อสร้าง Drop Rule ที่แม่นยำและมีประสิทธิภาพสูงสุด

***

## 🧠 หลักการทำงานของ Drop Rule และ Expressions

### 🌐 Drop Rule คืออะไร?
**Drop Rule** คือคำสั่งที่ให้ Cloudflare ทราบว่า หากทราฟฟิกที่เข้ามามีคุณสมบัติตรงตามเงื่อนไขที่กำหนด (The Rule) ให้ทำการบล็อก (Drop) ทราฟฟิกนั้นทันที โดยไม่ส่งการตอบกลับ (Response) ใดๆ กลับไปยังผู้ใช้งาน ทำให้ผู้โจมตีไม่ทราบว่ามีการบล็อกเกิดขึ้น และยังช่วยลดภาระของระบบโดยรวม

### 📜 Expressions คืออะไร?
**Expressions** คือภาษาที่ใช้ในการเขียนเงื่อนไข (Conditional Logic) เพื่อตรวจสอบคุณสมบัติของทราฟฟิกที่เข้ามา ซึ่งสามารถตรวจสอบได้หลายระดับ เช่น:

* **Source IP:** ที่อยู่ IP ต้นทาง
* **Geolocation:** ข้อมูลประเทศที่มา
* **HTTP Headers:** เช่น User-Agent, Referer
* **URL Path:** ส่วนของ URI ที่ผู้ใช้เรียกเข้า

การผสมผสานระหว่าง Drop Rule และ Expressions ทำให้เราสามารถสร้างเกราะป้องกันที่ละเอียดอ่อนได้อย่างไม่น่าเชื่อ

***

## 🛠️ การใช้งาน Expressions ในการกรองทราฟฟิกประเภทต่างๆ

การเขียนเงื่อนไขที่ถูกต้องจำเป็นต้องรู้ Syntax และตัวแปร (Variables) ที่ Cloudflare เตรียมไว้ให้ นี่คือการใช้งานหลักๆ ที่คุณควรทราบ:

### 1. การกรองตามที่อยู่ IP (IP Address Blocking)

นี่คือวิธีที่ตรงไปตรงมาที่สุดในการบล็อกแหล่งที่มาของทราฟฟิกที่รู้จักว่าเป็นอันตราย

* **สถานการณ์:** ต้องการบล็อก IP Address ที่เป็น Bot หรือ IP ที่ใช้ในการสแกน
* **Syntax ตัวอย่าง:**
* **บล็อก IP เดียว:** `ip.src eq 192.168.1.1`
* **บล็อกช่วง IP (CIDR):** `ip.src contains 10.0.0.0/24`
* **คำแนะนำ:** ควรใช้การบล็อก IP ร่วมกับการตรวจสอบ Reputation ของ IP นั้นๆ เพื่อลด False Positives

### 2. การกรองตามประเทศ (Country/Geolocation Blocking)

เป็นวิธีที่มีประโยชน์มากในการจำกัดการเข้าถึงจากภูมิภาคที่ไม่ได้เป็นกลุ่มเป้าหมายหลัก หรือพื้นที่ที่ทราบว่ามีการโจมตีบ่อยครั้ง

* **สถานการณ์:** เว็บไซต์ของคุณให้บริการเฉพาะลูกค้าในประเทศไทยเท่านั้น และต้องการบล็อกทราฟฟิกจากประเทศที่มีความเสี่ยงสูง
* **Syntax ตัวอย่าง:** `ip.geoip.country eq “CN”` (บล็อกจากประเทศจีน)
* **ข้อควรระวัง:** การบล็อกตามประเทศควรทำอย่างระมัดระวัง เนื่องจากอาจบล็อกผู้ใช้งานที่ถูกต้องโดยไม่ได้ตั้งใจ

### 3. การกรองตามพาธของ URI (URI Path Matching)

เป็นการกำหนดให้ระบบบล็อกทราฟฟิกที่พยายามเข้าถึงส่วนใดส่วนหนึ่งของเว็บไซต์โดยเฉพาะ

* **สถานการณ์:** ต้องการปกป้องหน้า Admin Panel หรือ API Endpoint ที่อ่อนไหว
* **Syntax ตัวอย่าง:**
* **บล็อกทุกอย่างที่เข้า `/api/v1/`:** `http.request.uri contains “/api/v1/”`
* **บล็อกเฉพาะ Path ที่มีคำว่า `admin`:** `http.request.uri contains “admin”`
* **เทคนิคเสริม:** หากต้องการให้เงื่อนไขทำงานก็ต่อเมื่อ Path นั้นเป็น **POST** request เท่านั้น สามารถรวมกับ `http.request.method eq “POST”` ได้

### 4. การกรองตาม User-Agent (User-Agent Filtering)

User-Agent คือข้อมูลที่เบราว์เซอร์หรือโปรแกรมที่ส่งคำขอเข้ามาแจ้งตัวตน ซึ่งเป็นวิธีที่มีประสิทธิภาพในการบล็อก Bot หรือ Crawler ที่ใช้ User-Agent ที่แปลกประหลาด

* **สถานการณ์:** ตรวจพบ Bot ที่ใช้ User-Agent ที่ไม่มีมาตรฐาน หรือ Bot ที่ใช้ User-Agent ปลอม
* **Syntax ตัวอย่าง:**
* **บล็อก Bot ที่ใช้ User-Agent เก่า:** `http.user_agent contains “curl/7.64.1″`
* **บล็อก User-Agent ที่ว่างเปล่า:** `empty(http.user_agent)`
* **ข้อควรระวัง:** Bot ที่ซับซ้อนอาจมีการปลอมแปลง User-Agent ได้ ดังนั้นการใช้ User-Agent เพียงอย่างเดียวจึงไม่ควรเป็นมาตรการป้องกันหลัก

***

## 🚀 แนวทางการสร้าง Drop Rule ที่มีประสิทธิภาพ (Best Practices)

การเขียนกฎที่ซับซ้อนต้องคำนึงถึงความสมดุลระหว่าง “การป้องกัน” และ “การใช้งานปกติ” (Functionality)

1. **หลักการ “Fail Open” (หรือ “Fail Safe”):** เมื่อคุณเพิ่มกฎความปลอดภัยใหม่ ควรทดสอบในโหมด **”Log”** ก่อนเสมอ อย่าเพิ่งเปลี่ยนเป็น **”Block/Drop”** ทันที การ Log จะช่วยให้คุณเห็นว่ากฎนี้กำลังบล็อกทราฟฟิกไหนบ้าง โดยไม่กระทบต่อการใช้งานจริง
2. **ใช้ Logic `AND` และ `OR` อย่างถูกต้อง:**
* **`AND` (และ):** ต้องตรงตามเงื่อนไข A *และ* เงื่อนไข B เท่านั้น (เช่น IP เป็น 1.1.1.1 **AND** Path คือ `/login`)
* **`OR` (หรือ):** ตรงตามเงื่อนไข A *หรือ* เงื่อนไข B ก็พอ (เช่น IP เป็น 1.1.1.1 **OR** IP เป็น 2.2.2.2)
3. **ลำดับความสำคัญของ Rule:** Cloudflare ประมวลผลกฎตามลำดับที่กำหนด (Top to Bottom) ดังนั้น กฎที่สำคัญที่สุดและครอบคลุมที่สุดควรอยู่ด้านบนสุด

***

## 📝 สรุปใจความสำคัญ

Cloudflare Drop Rules คือเครื่องมือความปลอดภัยระดับสูงที่ช่วยให้ผู้ดูแลระบบสามารถควบคุมและกรองทราฟฟิกได้อย่างแม่นยำผ่านการเขียน Expressions การทำความเข้าใจตัวแปรพื้นฐาน เช่น `ip.src`, `http.request.uri`, `http.user_agent` และการฝึกฝนการใช้ Logic `AND`/`OR` จะช่วยให้คุณสามารถสร้างเกราะป้องกันที่แข็งแกร่งเพื่อลดความเสี่ยงจากการโจมตี Bot และการสแกนได้อย่างมีประสิทธิภาพสูงสุด

***