หน้าแรก › คู่มือ

การตรวจติดตามบัญชีดำ: สคริปต์ API และการแจ้งเตือนผ่าน Webhook

เผยแพร่ 2026-11-03 / อัปเดต 2026-11-03 / โดย Yuki Nakazawa

การตรวจติดตามบัญชีดำ (blacklist monitoring) หมายถึงการสอบถามบัญชีดำแบบ DNS (DNSBL) หลายรายการสำหรับ IP และโดเมนที่ใช้ส่งอีเมลตามกำหนดเวลา และแจ้งเตือนเฉพาะเมื่อผลลัพธ์เปลี่ยนไป การพบการขึ้นบัญชีทันทีที่เกิดขึ้น แทนที่จะรู้เมื่อลูกค้าแจ้งว่าอีเมลตีกลับ ทำให้คุณมีเวลาหาสาเหตุและขอถอดรายชื่อก่อนที่ความเสียหายจะลุกลาม

ในทางปฏิบัติมีสองวิธี คือรันสคริปต์ dig และ cron ขนาดเล็กด้วยตนเอง หรือให้บริการภายนอกตรวจแทนผ่าน API และ webhook ไม่ว่าจะเลือกวิธีใด มีรายละเอียดสองข้อที่ตัดสินว่าระบบตรวจติดตามจะให้ผลที่ถูกต้องหรือไม่ คือ การสอบถามผ่าน resolver สาธารณะจะถูกปฏิเสธโดยรายชื่ออย่าง Spamhaus และให้คำตอบที่ทำให้เข้าใจผิด และต้องไม่นับรหัสข้อผิดพลาดเป็นการขึ้นบัญชีเด็ดขาด

กฎของผู้ดูแลรายชื่อที่อ้างถึงในที่นี้อิงตามหน้าทางการ ณ เดือนพฤศจิกายน 2026 นโยบายอาจเปลี่ยนแปลงได้ จึงควรยืนยันก่อนพึ่งพาการตั้งค่าใด ๆ สำหรับพื้นฐานการทำงานของ DNSBL ดู DNSBL (RBL) คืออะไร

ตรวจสอบฟรีว่าโดเมนหรือ IP address ของคุณอยู่ในบัญชีดำราว 345 รายการหรือไม่

กำหนดสิ่งที่ต้องติดตามและรายชื่อที่จะสอบถาม

เริ่มจากจดรายการสิ่งที่คุณต้องติดตามจริง ๆ

รูปแบบการสอบถามกำหนดไว้ใน RFC 5782 สำหรับ IPv4 ให้กลับลำดับออกเท็ตแล้วต่อท้ายด้วยโซนของรายชื่อ ดังนั้น 192.0.2.99 บนรายชื่อหนึ่งจะกลายเป็น 99.2.0.192 ตามด้วยชื่อโซน สำหรับ IPv6 ที่อยู่จะเขียนเป็น nibble ฐานสิบหก 32 ตัวในลำดับกลับกัน ส่วนโดเมนเพียงนำไปต่อหน้าโซน รายการที่ถูกขึ้นบัญชีจะตอบกลับ A record ซึ่งตามธรรมเนียมอยู่ในช่วง 127.0.0.0/8 ส่วนรายการที่ไม่ถูกขึ้นบัญชีจะตอบกลับ NXDOMAIN RFC ยังระบุว่ารายชื่อควรเผยแพร่ TXT record ที่อธิบายเหตุผลของการขึ้นบัญชี

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

ทำไม resolver สาธารณะจึงให้คำตอบที่ผิด

ข้อผิดพลาดที่พบบ่อยในระบบตรวจติดตามที่สร้างเองคือการส่งคำสอบถามผ่าน resolver สาธารณะ เช่น Google Public DNS (8.8.8.8) หรือ Cloudflare (1.1.1.1) คำถามที่พบบ่อยเรื่องการใช้ DNSBL อย่างเป็นทางการของ Spamhaus อธิบายสิ่งที่เกิดขึ้นไว้ดังนี้

คำแนะนำอันดับแรกของคำถามที่พบบ่อยนี้คือใช้ DNS resolver ของคุณเอง สำหรับผู้ใช้ที่จำเป็นต้องใช้ resolver สาธารณะ Spamhaus แนะนำ Data Query Service (DQS) ของตน ให้ตรวจเงื่อนไขว่าส่วนใดใช้ได้ฟรี คำถามที่พบบ่อยยังแนะนำ dig txt whoami.fastly.net เพื่อดูว่าคุณใช้ resolver ใดอยู่จริง

RFC 5782 มีการตรวจความถูกต้องในตัว คือรายชื่อ IPv4 ต้องมีรายการสำหรับ 127.0.0.2 และต้องไม่มี 127.0.0.1 และไคลเอนต์ควรตรวจรายการทดสอบเหล่านี้เป็นระยะเพื่อยืนยันว่ารายชื่อทำงานอยู่ ในตัวอย่างของ Spamhaus 2.0.0.127.zen.spamhaus.org ตอบกลับ 127.0.0.10, 127.0.0.4 และ 127.0.0.2 ขณะที่ 1.0.0.127.zen.spamhaus.org ตอบกลับ NXDOMAIN ระบบตรวจติดตามควรทดสอบสิ่งนี้ก่อน และทิ้งผลของรอบนั้นหากไม่ผ่าน

ทางเลือกที่ 1: สคริปต์ dig และ cron

ต่อไปนี้คือสคริปต์ขั้นต่ำที่ตรวจที่อยู่ IPv4 หนึ่งรายการกับ Spamhaus ZEN และ SpamCop (bl.spamcop.net ซึ่ง SpamCop ระบุในเอกสารว่าตอบ 127.0.0.2 สำหรับ IP ที่ถูกขึ้นบัญชี) ให้แทนที่ที่อยู่และโซนด้วยของคุณเอง

#!/bin/sh
# สอบถามผ่าน recursive resolver ของคุณเอง (เช่น unbound บนโฮสต์เดียวกัน) ห้ามใช้ resolver สาธารณะ
RESOLVER=127.0.0.1
IP=192.0.2.10
ZONES="zen.spamhaus.org bl.spamcop.net"
REV=$(echo "$IP" | awk -F. '{print $4"."$3"."$2"."$1}')

q() {
  out=$(dig +time=3 +tries=1 @"$RESOLVER" "$1" A) || { echo ERR; return; }
  case "$out" in
    *"status: NOERROR"*) a=$(printf '%s\n' "$out" | awk '$4=="A"{print $5}'); echo "${a:-NX}" ;;
    *"status: NXDOMAIN"*) echo NX ;;
    *) echo ERR ;;
  esac
}

for Z in $ZONES; do
  # หากรายการทดสอบ 127.0.0.2 ไม่ได้ตอบเป็นรหัสการขึ้นบัญชี อย่าเชื่อถือผลของรอบนี้
  case "$(q "2.0.0.127.$Z")" in
    127.255.255.*|NX|ERR) echo "$Z ERROR test-entry"; continue ;;
    127.*) ;;
    *) echo "$Z ERROR test-entry"; continue ;;
  esac
  A=$(q "$REV.$Z")
  case "$A" in
    NX)            echo "$Z CLEAN" ;;
    ERR)           echo "$Z ERROR no-answer" ;;
    127.255.255.*) echo "$Z ERROR $A" ;;
    127.*)         echo "$Z LISTED $A" ;;
    *)             echo "$Z ERROR unexpected $A" ;;
  esac
done

สิ่งที่สคริปต์ทำ

จากนั้นให้ cron เปรียบเทียบผลแต่ละรอบกับรอบก่อนหน้า และส่งอีเมลเฉพาะเมื่อมีการเปลี่ยนแปลง

# ตัวอย่าง: รันทุกชั่วโมง และส่งอีเมลเฉพาะเมื่อผลลัพธ์ต่างจากรอบก่อน
0 * * * * /usr/local/bin/dnsbl-watch.sh > /var/tmp/dnsbl.now 2>&1; cmp -s /var/tmp/dnsbl.now /var/tmp/dnsbl.prev || mail -s "DNSBL status changed" you@example.com < /var/tmp/dnsbl.now; mv /var/tmp/dnsbl.now /var/tmp/dnsbl.prev

รอบทุกชั่วโมงเป็นเพียงตัวอย่าง Spamhaus ให้เข้าถึงฟรีสำหรับการใช้งานปริมาณต่ำที่ไม่ใช่เชิงพาณิชย์ และไคลเอนต์ที่สอบถามเกินเกณฑ์ปริมาณจะต้องใช้ทางเลือกแบบเสียเงิน ให้ตรวจเงื่อนไขของแต่ละรายชื่อเมื่อจำนวน IP ที่ติดตามเพิ่มขึ้น คำถามที่พบบ่อยยังแนะนำให้ลองรันคำสั่งหลายครั้งเพื่อยืนยันว่าผลลัพธ์คงเดิม

ทางเลือกที่ 2: batch API และ webhook ของ DNSBL Checker

หากคุณไม่ต้องการดูแล resolver และกฎการแยกวิเคราะห์ของแต่ละรายชื่อเอง ก็สามารถให้บริการภายนอกตรวจแทนได้ ด้านล่างคือ API v1 ของเว็บไซต์นี้ โดยจำกัดเฉพาะสิ่งที่การทำงานฝั่งเซิร์ฟเวอร์ทำจริง เอกสารอ้างอิงอยู่ที่ /en/api-docs และคีย์ออกให้ในหน้าสมาชิกที่ /account การสมัครใช้เพียงที่อยู่อีเมล และเข้าสู่ระบบด้วยลิงก์ที่ส่งทางอีเมล

การยืนยันตัวตนและขีดจำกัด

การตรวจแบบ batch

ส่งอาร์เรย์ targets ที่เป็นชื่อโดเมนหรือที่อยู่ IP ไปยัง POST /api/v1/batch

curl -X POST https://dnsblchecker.com/api/v1/batch \
  -H "X-API-Key: $DNSBL_API_KEY" -H "Content-Type: application/json" \
  -d '{"targets":["example.com"]}'

หากยังมีเป้าหมายที่ต้องตรวจ การตอบกลับจะเป็น 202 พร้อม batch_id ให้เรียก GET /api/v1/batch/{batch_id} ทุกไม่กี่วินาทีจนกว่า status จะเป็น done (ตัวอย่างแบบย่อ ตัวเลขและชื่อรายชื่อเป็นเพียงตัวอย่าง ไม่ใช่ผลจริง)

{
  "batch_id": 1, "status": "done", "created": "2026-11-03 09:10:41", "count": 1, "pending": 0,
  "results": [
    {
      "target": "example.com", "type": "domain",
      "status": "done", "verdict": "listed",
      "checked_at": "2026-11-03 09:12",
      "lists_checked": 80, "listed_count": 1, "error_count": 4,
      "listed_on": [
        { "list": "ZapBL RHSBL", "zone": "rhsbl.zapbl.net", "response": "127.0.0.2" }
      ]
    }
  ]
}

การตรวจติดตามผ่าน webhook

ลงทะเบียน target และ callback_url ด้วย POST /api/v1/monitors จากนั้นแต่ละเป้าหมายที่ลงทะเบียนจะถูกตรวจวันละครั้งโดยไม่ใช้แคช (การตรวจครั้งแรกจะเกิดขึ้นภายในประมาณหนึ่งวันหลังลงทะเบียน) และจะส่ง POST แบบ JSON ไปยัง URL ของคุณเฉพาะในการตรวจครั้งแรก (monitor.initial) และเมื่อผลตัดสินเปลี่ยนระหว่าง listed กับ clean (monitor.status_changed)

curl -X POST https://dnsblchecker.com/api/v1/monitors \
  -H "X-API-Key: $DNSBL_API_KEY" -H "Content-Type: application/json" \
  -d '{"target":"example.com","callback_url":"https://your-app.example/hooks/dnsbl"}'
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers.get("X-DNSBL-Signature", ""))

การออกแบบการแจ้งเตือน: ความถี่ หลายรายชื่อ และการเตือนผิดพลาด

ระบบตรวจติดตามจะมีประโยชน์ก็ต่อเมื่อผู้คนยังอ่านการแจ้งเตือนหลังผ่านไปหลายเดือน ระบบที่แจ้งเตือนตลอดเวลาจะถูกเพิกเฉยในไม่ช้า

ความถี่

หลายรายชื่อ

ผลบวกลวงและคำตอบชั่วคราว

สิ่งที่ควรทำเมื่อพบการขึ้นบัญชี

  1. ยืนยันผล ตรวจในหน้าตรวจสอบของผู้ดูแลรายชื่อเอง และจดชื่อรายชื่อ เวลา และเหตุผลที่แสดง
  2. แก้ไขสาเหตุก่อน ตรวจหาบัญชีที่ถูกเจาะ เว็บฟอร์มที่ถูกนำไปใช้ในทางที่ผิด เครื่องที่ติดเชื้อ การดูแลรายชื่อผู้รับที่ไม่ดี และ reverse DNS (PTR) หรือชื่อ HELO ที่ไม่ตรงกัน การขอถอดรายชื่อขณะที่สาเหตุยังอยู่มักนำไปสู่การถูกขึ้นบัญชีใหม่
  3. ทำตามขั้นตอนการถอดรายชื่อของรายชื่อนั้น การตัดสินใจถอดรายชื่อเป็นของผู้ดูแลแต่ละรายชื่อ และการยื่นคำขอไม่ได้รับประกันว่าจะถูกถอดรายชื่อ หากคุณไม่ได้ควบคุม IP เอง เช่น กรณี shared hosting ให้ติดต่อผู้ให้บริการโฮสติ้งหรือ ISP
  4. ให้ระบบตรวจติดตามยืนยันผล ฝั่งผู้รับยังใช้ตัวกรองของตนเองด้วย จึงควรติดตามการส่งอีเมลต่อไปหลังผลตัดสินกลับมาเป็น clean

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

หากไม่ต้องการดำเนินการด้วยตนเอง

เราแนะนำผู้ให้บริการที่รับดำเนินการขอนำชื่อออกจากบัญชีดำ ให้คำปรึกษา และคำแนะนำ (เริ่มต้น JPY 50,000) การนำชื่อออกขึ้นอยู่กับการพิจารณาของผู้ดูแลแต่ละรายการ จึงไม่สามารถรับประกันได้

ขอความช่วยเหลือ

เว็บไซต์นี้อาจได้รับค่าแนะนำจากผู้ให้บริการที่ระบุไว้ About

คำถามที่พบบ่อย

ฉันตรวจผ่าน 8.8.8.8 แล้วไม่พบการขึ้นบัญชี แปลว่าสะอาดหรือไม่

ไม่จำเป็นเสมอไป คำถามที่พบบ่อยของ Spamhaus ระบุว่าการสอบถามผ่าน open resolver แบบฟรี เช่น Google Public DNS ในกรณีส่วนใหญ่จะได้คำตอบว่าไม่อยู่ในรายชื่อ (NXDOMAIN) IP ที่ถูกขึ้นบัญชีจึงอาจดูเหมือนสะอาด ให้สอบถามจาก resolver ของคุณเอง หรือใช้หน้าตรวจสอบของผู้ดูแลรายชื่อ

ฉันได้ 127.255.255.254 แปลว่าถูกขึ้นบัญชีหรือไม่

ไม่ใช่ นี่คือรหัสข้อผิดพลาดที่ตอบกลับสำหรับการสอบถามผ่าน resolver สาธารณะหรือ open resolver และ Spamhaus ระบุว่ารหัสนี้ไม่ได้หมายความว่าสิ่งที่สอบถามถูกขึ้นบัญชี ให้บันทึกเป็นข้อผิดพลาดและอย่าส่งการแจ้งเตือนการขึ้นบัญชี

ใช้การเรียก batch API ทุกวันเป็นระบบตรวจติดตามได้หรือไม่

batch อาจคืนผลที่เก็บไว้ซึ่งมีอายุได้ถึง 30 วัน จึงไม่ใช่สถานะของวันนี้เสมอไป ให้ตรวจ checked_at หรือใช้การตรวจติดตามผ่าน webhook (POST /api/v1/monitors) ซึ่งตรวจใหม่ทุกวัน

ควรขอถอดรายชื่อทันทีที่ได้รับการแจ้งเตือนหรือไม่

ให้แก้ไขสาเหตุก่อน คำขอที่ยื่นขณะที่ปัญหายังอยู่มักจบลงด้วยการถูกขึ้นบัญชีใหม่ การตัดสินใจเป็นของผู้ดูแลรายชื่อเสมอ

หน้าทางการที่ใช้อ้างอิง

ข้อเท็จจริงในบทความนี้ได้ตรวจสอบกับหน้าทางการด้านล่าง ณ เวลาที่เผยแพร่ นโยบายและการทำงานอาจเปลี่ยนแปลงได้โดยไม่แจ้งล่วงหน้า โปรดตรวจสอบหน้าทางการก่อนนำไปใช้ในเรื่องสำคัญ

คู่มือที่เกี่ยวข้อง

อธิบายรหัสตอบกลับ DNSBL: 127.0.0.2, 127.255.255.x และ NXDOMAIN

วิธีอ่านรหัสตอบกลับ DNSBL: 127.0.0.2 หมายถึงอะไรตาม RFC 5782 รหัสของ Spamhaus, SpamCop และ UCEPROTECT รหัสข้อผิดพลาด และ NXDOMAIN กับ SERVFAIL

นำชื่อออกจาก Spamhaus: วิธีขอ delist IP หรือโดเมน

ติดรายการ Spamhaus? ดูว่าติดรายการใด (ZEN, PBL, XBL, CSS, SBL, DBL) รหัสตอบกลับหมายถึงอะไร และวิธีขอนำชื่อออกที่ถูกต้องของแต่ละรายการ

อีเมลติดบัญชีดำ? วิธีอ่าน bounce และนำชื่อออกจากบัญชีดำ

อีเมลถูกบล็อกเพราะติดบัญชีดำ? อ่านรหัส bounce ตรวจสาเหตุตามลำดับที่ถูกต้อง ดูว่ารายการใดสำคัญ และขอนำชื่อออกอย่างถูกวิธี

คู่มือทั้งหมด →