Cloudflare API จัดการ DNS และ Firewall Rules ด้วย Script อย่างมืออาชีพ

การจัดการ DNS และ Firewall Rules ของเว็บไซต์ด้วยตนเองผ่าน Dashboard ของ Cloudflare นั้นมีประสิทธิภาพจำกัด โดยเฉพาะเมื่อต้องจัดการหลายโดเมนพร้อมกัน Cloudflare API เป็นเครื่องมือที่ช่วยให้คุณสามารถอัตโนมัติงานเหล่านี้ได้ ผ่านทาง Script หรือ Program ต่างๆ ในบทความนี้ เราจะมาเรียนรู้วิธีการใช้ Cloudflare API อย่างเป็นมืออาชีพเพื่อจัดการ DNS Records และ Firewall Rules ได้อย่างมีประสิทธิภาพ

Cloudflare API คืออะไร และทำไมต้องใช้

Cloudflare API (Application Programming Interface) เป็นบริการที่ให้คุณสามารถเข้าถึงฟีเจอร์ต่างๆ ของ Cloudflare ผ่านทาง Programmatic Interface แทนการใช้ Web Dashboard

ประโยชน์หลักของการใช้ Cloudflare API:

  • Automation: อัตโนมัติการบริหาร DNS Records ทำให้ประหยัดเวลาและลดข้อผิดพลาด
  • CI/CD Integration: สามารถรวม Cloudflare API เข้าไปในขั้นตอน Deployment อัตโนมัติของคุณได้
  • Multi-domain Management: จัดการหลายโดเมนและหลาย Firewall Rules อย่างต่อเนื่องจากที่เดียว
  • Real-time Updates: อัปเดต DNS และ Firewall Rules ได้ทันที โดยไม่ต้องเข้า Dashboard
  • Dynamic DNS: ประโยชน์โดยเฉพาะสำหรับ VPS ที่มี Dynamic IP Address

ขั้นตอนเตรียมการ: รับ API Token และ Zone ID

ก่อนใช้ Cloudflare API คุณต้องเตรียมข้อมูลสำคัญสองอย่าง:

1. รับ API Token

ขั้นตอนการรับ API Token:

  • เข้า Cloudflare Dashboard ที่ https://dash.cloudflare.com
  • ไปที่ Account Settings > API Tokens
  • คลิก “Create Token” และเลือก “Create Custom Token”
  • ตั้งค่า Permissions: เลือก “Zone” > “DNS” > “Edit” สำหรับ DNS Management
  • สำหรับ Firewall Rules เลือก “Zone” > “Firewall Rules” > “Edit”
  • คลิด “Continue to summary” และ “Create Token”

2. รับ Zone ID

Zone ID คือ ID ของโดเมนของคุณใน Cloudflare ดูได้ที่ Domain Overview หรือ API ของ Cloudflare

curl -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

เครื่องมือที่ใช้งาน Cloudflare API

คุณสามารถใช้เครื่องมือต่างๆ ในการเข้าถึง Cloudflare API:

  • curl: เครื่องมือบรรทัดคำสั่ง สำหรับทำ HTTP Requests โดยตรง
  • Python requests: Library Python สำหรับทำ HTTP Requests ง่ายๆ
  • cloudflare-python SDK: Official SDK ของ Cloudflare สำหรับ Python
  • Bash Scripts: เขียน Script ใน Bash เพื่อ Automation

ตัวอย่างที่ 1: List DNS Records ด้วย curl

เพื่อดูรายชื่อ DNS Records ของโดเมนของคุณ:

curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" | jq

ผลลัพธ์จะแสดง DNS Records ทั้งหมด รวมถึง Type (A, MX, CNAME), Name, Content, และอื่นๆ

ตัวอย่างที่ 2: สร้าง A Record ใหม่

curl -X POST "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "A",
    "name": "www",
    "content": "192.0.2.1",
    "ttl": 1,
    "priority": 10,
    "proxied": true
  }' | jq

ตัวอย่างที่ 3: อัปเดต DNS Record

curl -X PUT "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records/RECORD_ID" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "A",
    "name": "www",
    "content": "192.0.2.2",
    "ttl": 1
  }' | jq

ตัวอย่างที่ 4: ลบ DNS Record

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records/RECORD_ID" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

จัดการ Firewall Rules ด้วย API

Cloudflare Firewall Rules ให้คุณควบคุมการเข้าถึงเว็บไซต์ของคุณ สามารถสร้างหรือแก้ไข Rule ด้วย API ได้

ตัวอย่างที่ 5: สร้าง Firewall Rule – Block IP Address

curl -X POST "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/firewall/rules" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {
      "expression": "ip.src eq 192.0.2.100"
    },
    "action": "block"
  }' | jq

ตัวอย่างที่ 6: สร้าง Firewall Rule – Challenge Country

curl -X POST "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/firewall/rules" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {
      "expression": "cf.threat_score > 50"
    },
    "action": "challenge"
  }' | jq

ตัวอย่าง Python Script: Auto-update DNS เมื่อ IP เปลี่ยน (Dynamic DNS)

สำหรับ VPS ที่มี Dynamic IP Address สามารถใช้ Python Script นี้เพื่ออัปเดต DNS Record อัตโนมัติ:

#!/usr/bin/env python3
import requests
import json
from datetime import datetime

# ตั้งค่า
CLOUDFLARE_API_TOKEN = "your_api_token"
ZONE_ID = "your_zone_id"
RECORD_ID = "your_record_id"
API_URL = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}"

def get_public_ip():
    """ดึง Public IP ของเซิร์ฟเวอร์"""
    response = requests.get('https://api.ipify.org?format=json')
    return response.json()['ip']

def update_dns_record(new_ip):
    """อัปเดต DNS Record ด้วย IP ใหม่"""
    headers = {
        "Authorization": f"Bearer {CLOUDFLARE_API_TOKEN}",
        "Content-Type": "application/json"
    }
    
    payload = {
        "type": "A",
        "name": "example.com",
        "content": new_ip,
        "ttl": 120
    }
    
    response = requests.put(API_URL, headers=headers, json=payload)
    
    if response.status_code == 200:
        print(f"[{datetime.now()}] DNS Record updated to {new_ip}")
        return True
    else:
        print(f"[{datetime.now()}] Error: {response.text}")
        return False

if __name__ == "__main__":
    current_ip = get_public_ip()
    print(f"Current IP: {current_ip}")
    update_dns_record(current_ip)

สามารถใช้ crontab เพื่อให้ Script นี้ทำงานทุกๆ 5 นาที:

*/5 * * * * /usr/bin/python3 /home/user/cloudflare_ddns.py >> /var/log/ddns.log 2>&1

ตัวอย่าง Bash Script: Sync Cloudflare Firewall Rules

#!/bin/bash

API_TOKEN="your_api_token"
ZONE_ID="your_zone_id"
BLOCK_IPS_FILE="/etc/blocklist.txt"

echo "Syncing Firewall Rules to Cloudflare..."

while IFS= read -r ip; do
    # ข้ามบรรทัดว่างและ comment
    [[ -z "$ip" || "$ip" =~ ^# ]] && continue
    
    curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall/rules" \
        -H "Authorization: Bearer $API_TOKEN" \
        -H "Content-Type: application/json" \
        -d "{\"filter\": {\"expression\": \"ip.src eq $ip\"}, \"action\": \"block\"}" \
        > /dev/null 2>&1
    
    echo "Blocked IP: $ip"
done < "$BLOCK_IPS_FILE"

echo "Firewall Rules sync completed!"

Security: เก็บ API Token ที่ปลอดภัย

API Token เป็นข้อมูลที่มีความเสี่ยง ต้องเก็บให้ปลอดภัย:

  • Environment Variables: เก็บ Token ใน Environment Variables แทนการเขียนใน Script
  • .env File: ใช้ไฟล์ .env ที่ถูก Git ignore
  • Secrets Management: ใช้ Tools เช่น HashiCorp Vault, AWS Secrets Manager
  • Limit Permissions: สร้าง Token ที่มี Minimal Permissions เท่าที่จำเป็น
  • Rotate Tokens: เปลี่ยน Token เป็นระยะๆ

สรุป

Cloudflare API เป็นเครื่องมือที่ทรงพลังสำหรับ Automation ของ DNS และ Firewall Management ด้วยการเรียนรู้ API นี้ คุณสามารถ:

  • อัตโนมัติการจัดการ DNS Records หลายโดเมน
  • สร้าง Dynamic DNS Solution สำหรับ VPS ที่มี Changing IP
  • บริหาร Firewall Rules เป็นระบบ
  • รวม Cloudflare เข้าไปใน CI/CD Pipeline
  • ลดเวลาและจำนวนข้อผิดพลาดในการบริหารเว็บไซต์