ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ตรวจสอบและเคลียร์ Mail Queue บน DirectAdmin
Home ตรวจสอบและเคลียร์ Mail Queue บน DirectAdmin

ตรวจสอบและเคลียร์ Mail Queue บน DirectAdmin

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

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

สิ่งที่ต้องเตรียม

  • DirectAdmin ที่ใช้ Exim เป็นเมลเซิร์ฟเวอร์
  • สิทธิ์ root บนเซิร์ฟเวอร์

ขั้นตอนที่ 1: ดูขนาดคิว

# จำนวนอีเมลในคิว
exim -bpc

# รายการพร้อมรายละเอียด
exim -bp | head -40

# สรุปตามสถานะ
exim -bp | exiqsumm | head -20

คิวปกติของเซิร์ฟเวอร์ทั่วไปควรอยู่ระดับหลักสิบ หากเห็นหลักพันขึ้นไปต้องหาสาเหตุทันที

ดูใน DirectAdmin ได้ที่ Admin Tools แล้ว Mail Queue Administration

ขั้นตอนที่ 2: หาว่าใครเป็นผู้ส่ง

นี่คือคำถามแรกที่ต้องตอบ

# จัดอันดับผู้ส่งในคิว
exim -bp | awk '/</ {print $4}' | sort | uniq -c | sort -rn | head -20

# ดูบัญชีที่ยืนยันตัวตนแล้วส่งออก จากใน Log
grep 'A=dovecot_login' /var/log/exim/mainlog \
  | awk -F'A=dovecot_login:' '{print $2}' | awk '{print $1}' \
  | sort | uniq -c | sort -rn | head -20

หากเห็นบัญชีเดียวส่งอีเมลหลายพันฉบับในเวลาสั้น นั่นคือบัญชีที่ถูกเจาะเกือบแน่นอน

ตรวจว่าส่งมาจากที่ไหน

grep '[email protected]' /var/log/exim/mainlog | grep -oE '\[[0-9.]+\]' | sort | uniq -c | sort -rn | head

หาก IP ต้นทางอยู่ต่างประเทศในขณะที่ลูกค้าอยู่ในไทย ยืนยันว่าถูกเจาะ

ขั้นตอนที่ 3: จัดการบัญชีที่ถูกเจาะทันที

# เปลี่ยนรหัสผ่านทันที ผ่านหน้า DirectAdmin หรือคำสั่ง
# แล้วดูว่ามีการตั้ง forward ไปที่แปลก ๆ หรือไม่
cat /etc/virtual/example.com/aliases
cat /etc/virtual/example.com/filter 2>/dev/null

# ตรวจว่ามีสคริปต์ส่งอีเมลในเว็บหรือไม่
grep -rl 'mail(' /home/username/domains/example.com/public_html/ 2>/dev/null | head

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

ขั้นตอนที่ 4: ดูรายละเอียดของอีเมลในคิว

# ดูส่วนหัวของอีเมลหนึ่งฉบับ
exim -Mvh 1rABCD-000XYZ-1a

# ดูเนื้อหา
exim -Mvb 1rABCD-000XYZ-1a

# ดู Log ของฉบับนั้น
exim -Mvl 1rABCD-000XYZ-1a

อ่านส่วนหัวเพื่อดูว่าเป็นอีเมลที่ถูกต้องหรือสแปม และดู Log เพื่อรู้ว่าทำไมจึงส่งไม่สำเร็จ

ขั้นตอนที่ 5: เคลียร์คิว

ทำหลังจากแก้ต้นเหตุแล้วเท่านั้น ไม่เช่นนั้นคิวจะกลับมาเต็มอีก

# ลบอีเมลของผู้ส่งรายเดียว ปลอดภัยที่สุด
exim -bp | awk '/<[email protected]>/ {print $3}' | xargs -r exim -Mrm

# ลบอีเมลที่ค้างนานกว่า 3 วัน
exiqgrep -o 259200 -i | xargs -r exim -Mrm

# ลบทั้งหมด ใช้เมื่อแน่ใจว่าทั้งคิวเป็นสแปม
exim -bp | awk '/^ *[0-9]+[mhd]/ {print $3}' | xargs -r exim -Mrm

ตรวจก่อนลบเสมอ อีเมลที่ถูกลบกู้คืนไม่ได้ และอาจมีอีเมลของลูกค้าจริงปนอยู่

# ดูก่อนว่าจะลบกี่ฉบับ
exiqgrep -o 259200 -i | wc -l

ขั้นตอนที่ 6: บังคับส่งคิวที่ค้าง

เมื่ออีเมลค้างเพราะปัญหาชั่วคราวที่แก้แล้ว

# สั่งส่งทั้งคิว
exim -qff

# สั่งส่งฉบับเดียว
exim -M 1rABCD-000XYZ-1a

# ดูผลแบบละเอียด
exim -d -M 1rABCD-000XYZ-1a 2>&1 | tail -40

ขั้นตอนที่ 7: จำกัดอัตราการส่งเพื่อป้องกันในอนาคต

DirectAdmin มีระบบจำกัดจำนวนอีเมลที่ส่งได้ต่อวันรายบัญชี ตั้งที่ Admin Settings

nano /etc/virtual/limit
# จำนวนสูงสุดต่อวันสำหรับทุกบัญชี
200
nano /etc/virtual/limit_user
# กำหนดเฉพาะบางบัญชีที่ต้องส่งมาก
[email protected]=2000

ดูจำนวนที่แต่ละบัญชีส่งไปแล้ววันนี้

cat /etc/virtual/usage/example.com 2>/dev/null

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

ขั้นตอนที่ 8: ตรวจว่า IP ติดบัญชีดำหรือไม่

IP=203.0.113.10
REV=$(echo "$IP" | awk -F. '{print $4"."$3"."$2"."$1}')

for bl in zen.spamhaus.org bl.spamcop.net b.barracudacentral.org \
          dnsbl.sorbs.net psbl.surriel.com; do
  r=$(dig +short "$REV.$bl")
  printf '%-30s %s\n' "$bl" "${r:-สะอาด}"
done

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

แต่ละรายการมีหน้าขอถอดของตัวเอง โดยทั่วไปต้องระบุว่าแก้ไขอะไรไปแล้วบ้าง

ปัญหาที่พบบ่อย

คิวโตขึ้นเรื่อย ๆ แม้ลบแล้ว

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

grep -r 'X-PHP-Originating-Script' /var/log/exim/mainlog | tail -20

บรรทัดนี้บอกว่าไฟล์ PHP ไฟล์ไหนเป็นผู้ส่ง ซึ่งชี้ตรงไปยังสคริปต์ที่ถูกฝังไว้

อีเมลของลูกค้าจริงถูกลบไปด้วย

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

อีเมลค้างเพราะปลายทางไม่รับ

ดูเหตุผลใน Log ซึ่งมักบอกรหัสข้อผิดพลาดของ SMTP ที่ชัดเจน

grep '1rABCD-000XYZ-1a' /var/log/exim/mainlog

ต้องการดูสถิติย้อนหลัง

eximstats /var/log/exim/mainlog | head -50

ต้องการเซิร์ฟเวอร์อีเมลที่มีทีมงานเฝ้าระวังให้ตลอด 24 ชั่วโมง ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security