EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Security / บัญชีเมลถูกยึดจริง หรือแค่โดนเดารหัส พิสูจน์ให้ชี้ขาดก่อนแจ้ง
Security

บัญชีเมลถูกยึดจริง หรือแค่โดนเดารหัส พิสูจน์ให้ชี้ขาดก่อนแจ้ง

โดย Ton-Or ·4 ต.ค. 2026·อ่าน 11 นาที
บัญชีเมลถูกยึดจริง หรือแค่โดนเดารหัส พิสูจน์ให้ชี้ขาดก่อนแจ้ง

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

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

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

คำถามข้อเดียวที่ตัดสินทุกอย่าง

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

บทความนี้เป็นเรื่องการพิสูจน์และการตัดสินล้วนๆ ส่วนวิธีตรวจจับว่ามีเมลขาออกผิดปกติ ผมเขียนไว้แล้วใน ตรวจจับกล่องเมลที่ถูกยึดไปส่งสแปม และวิธีรับมือฝั่งไฟร์วอลล์อยู่ใน ระบบปลดบล็อกอัตโนมัติสำหรับเมล กับ ปลดบล็อกไอพีออฟฟิศที่โดนเครื่องผีในสำนักงานลากไปติดร่างแห ตอนนี้จะไม่เล่าวิธีปลดบล็อกซ้ำ

หลักฐานชี้ขาด อยู่ที่คำว่า A=login: ในเมนล็อก

Exim เขียนบรรทัดรับเมลเข้าคิวด้วยเครื่องหมาย <= แล้วต่อท้ายด้วยข้อมูลว่ารับมาจากไหนและยืนยันตัวตนแบบไหน ฟิลด์ที่สำคัญที่สุดคือ A= ถ้ามันปรากฏเป็น A=login:ชื่อบัญชี แปลว่า รหัสผ่านที่ใช้ในครั้งนั้นถูกต้อง เซิร์ฟเวอร์ตรวจแล้วผ่าน ไม่ใช่ความพยายาม ไม่ใช่การเดา

2026-07-15 16:39:43 1abcde-0000000G33P-2dT1 <= [email protected]
  H=(rcxxd) [203.0.113.218] P=esmtpsa X=TLS1.3:TLS_AES_256_GCM_SHA384:256
  A=login:[email protected] S=3549
  T="Immediate Opening - Part-Time & Flexible" for [email protected]

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

ลำดับการสอบสวนรวบบรรทัดA=login: ของบัญชีนั้น->แยกไอพีวงเล็บอันสุดท้าย->เทียบประเทศและชนิดเครือข่าย->ตัดสิน
# ทดสอบชี้ขาด: ทุก IP ที่ยืนยันตัวตนสำเร็จในนามบัญชีนี้ มีใครบ้าง
[email protected]
LOGS="mainlog.4 mainlog.3 mainlog.2 mainlog.1 mainlog"

for L in $LOGS; do grep -aE " <= .*A=[a-z_]+:$ACCT" "/var/log/exim/$L"; done \
 | while IFS= read -r l; do
     ip=$(echo "$l" | grep -oE '\[[0-9.]+\]' | tail -1 | tr -d '[]')
     cc=$(geoiplookup "$ip" 2>/dev/null | grep -oE '[A-Z]{2},' | head -1 | tr -d ',')
     echo "$cc $ip"
   done | sort | uniq -c | sort -rn
สองกับดักในสคริปต์สั้นๆ ข้างบน ที่ทำให้ผลผิดแบบเงียบ

กับดักแรกคือ ต้องใช้ tail -1 ไม่ใช่ head -1 ตอนคว้าไอพีจากวงเล็บ เพราะวงเล็บอันแรกในบรรทัดคือที่อยู่ในวงแลนที่ตัวโปรแกรมเมลฝั่งลูกข่ายประกาศตัวเองมา เช่น 192.168.10.20 ส่วนอันสุดท้ายถึงจะเป็นไอพีจริงที่วิ่งมาถึงเรา ถ้าหยิบผิดตัว จะได้ผลว่าทุกการเชื่อมต่อมาจากวงแลน ซึ่งไม่มีความหมายอะไรเลย · กับดักที่สองคือ ต้องมีเครื่องหมายจุลภาคต่อท้ายในรูปแบบที่ค้นหา เพราะเครื่องมือค้นประเทศพิมพ์ออกมาว่า GeoIP Country Edition แล้วตามด้วยรหัสประเทศ ถ้าค้นแค่ตัวอักษรใหญ่สองตัวเปล่าๆ จะได้คำว่า IP ที่มาจากคำว่า GeoIP กลับมาทุกบรรทัด แล้วการเทียบประเทศจะพังทั้งชุดโดยไม่มีข้อความผิดพลาดใดๆ ให้เห็น

เคส A ถูกยึดจริง หลักฐานสี่ชั้นที่ซ้อนกัน

บัญชีแรกที่ผมตรวจ ผลจากคำสั่งข้างบนออกมาชัดตั้งแต่บรรทัดแรก

distinct IP ที่ยืนยันตัวตนสำเร็จในนามบัญชีนี้
 201 x 203.0.113.55    US   โฮสต์คลาวด์ต่างประเทศ (ชื่อเครื่องเป็นแบบที่ผู้ให้บริการคลาวด์ตั้งอัตโนมัติ)
  11 x 198.51.100.30   TH   เน็ตบ้าน/สำนักงานของลูกค้า
   7 x 198.51.100.92   TH   เน็ตบ้าน/สำนักงานของลูกค้า
   6 x 198.51.100.71   TH   เน็ตบ้าน/สำนักงานของลูกค้า
   4 x 203.0.113.144   US   โฮสต์คลาวด์ต่างประเทศ
   ... ที่เหลือเป็นไอพีไทยของออฟฟิศทั้งหมด

หลักฐานชั้นแรกคือมีการยืนยันตัวตนสำเร็จ 201 ครั้งจากโฮสต์คลาวด์ต่างประเทศเครื่องเดียว ซึ่งไม่ใช่ที่ทำงานของลูกค้าและไม่ใช่มือถือของพนักงาน ชั้นที่สองคือชื่อเครื่องที่ประกาศตอนทักทาย เป็นชื่อเครื่องเซิร์ฟเวอร์วินโดวส์ที่ระบบคลาวด์ตั้งให้อัตโนมัติ ไม่ใช่ชื่อเครื่องพนักงาน ชั้นที่สามคือฮิสโตแกรมหัวข้อเมล ซึ่งเป็นหลักฐานที่คนอ่านไม่ใช่ช่างก็เข้าใจได้ทันที

# หัวข้อเมลที่ถูกส่งออกในนามบัญชีนี้ เรียงตามจำนวน
for L in $LOGS; do grep -aE " <= .*A=[a-z_]+:$ACCT" "/var/log/exim/$L"; done \
 | grep -oE 'T="[^"]*"' | sort | uniq -c | sort -rn | head
 190  T="Proof of payment - <ชื่อสายการบิน> NFT Penalty Invoice."
   6  T="Price list Inquiry"
   4  T="Proof of payment - <ชื่อธนาคาร>"
   1  T="SuperMailer Test email"

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

# โดเมนปลายทางที่ถูกส่งไปในนามบัญชีนี้
for L in $LOGS; do grep -aE " <= .*A=[a-z_]+:$ACCT" "/var/log/exim/$L"; done \
 | grep -oE 'for [^ ]+@[^ ]+' | awk -F@ '{print $2}' | sort | uniq -c | sort -rn | head
201ล็อกอินสำเร็จจากคลาวด์นอก
190ใบแจ้งค่าปรับปลอม
0ครั้งที่เดารหัสล้มเหลว
2 วันช่วงเวลาที่ยิงทั้งหมด

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

อีกจุดที่ผมเขียนไว้ในรายงานเสมอคือ ชื่อโปรแกรมที่ผู้บุกรุกใช้ ในเคสนี้คือ SuperMailer ซึ่งเป็นโปรแกรมส่งเมลจำนวนมาก และมันหลุดหัวข้อเมลทดสอบของตัวเองออกมาหนึ่งฉบับตอนเริ่มงาน หลักฐานชิ้นนี้ปิดช่องอธิบายทางอื่นได้หมด เพราะไม่มีเหตุผลใดที่พนักงานบัญชีจะต้องใช้โปรแกรมส่งเมลจำนวนมากจากเครื่องเซิร์ฟเวอร์คลาวด์ต่างประเทศ

เคส B ที่ผมเกือบแจ้งผิด ตัวเลขดูน่ากลัวกว่าเคส A ด้วยซ้ำ

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

# แยกสองกอง: IP ที่เคยสำเร็จ กับ IP ที่ล้มเหลวอย่างเดียว
OK=$(mktemp); FL=$(mktemp)
for L in $LOGS; do grep -aE " <= .*A=[a-z_]+:$ACCT" "/var/log/exim/$L"; done \
 | while IFS= read -r l; do echo "$l" | grep -oE '\[[0-9.]+\]' | tail -1 | tr -d '[]'; done \
 | sort -u > "$OK"
for L in $LOGS; do grep -a 'authenticator failed' "/var/log/exim/$L" | grep "set_id=$ACCT"; done \
 | sed -nE 's/.*\[([0-9.]+)\].*/\1/p' | sort -u > "$FL"

echo "IP ที่ยืนยันตัวตนสำเร็จ : $(wc -l < "$OK")"
echo "IP ที่ล้มเหลวอย่างเดียว : $(comm -13 "$OK" "$FL" | wc -l)"
rm -f "$OK" "$FL"
IP ที่ยืนยันตัวตนสำเร็จ : 10      -> ไอพีไทยของออฟฟิศลูกค้าทั้งหมด
IP ที่ล้มเหลวอย่างเดียว : 516     -> ไม่มีสักตัวที่เคยสำเร็จ
เคส A

ถูกยึด

  • มีไอพีนอกที่สำเร็จ 201 ครั้ง
  • ไอพีนั้นไม่เคยล้มเหลวเลย
  • หัวข้อเมลเป็นใบแจ้งหนี้ปลอม 190 ฉบับ
  • ปลายทางไม่มีความสัมพันธ์ทางธุรกิจ
  • ใช้โปรแกรมส่งเมลจำนวนมาก
เคส B

ไม่ได้ถูกยึด

  • ไอพีที่สำเร็จ 10 ตัว เป็นออฟฟิศทั้งหมด
  • ไอพีต่างประเทศ 516 ตัว ล้มเหลวล้วน
  • ไม่มีเมลขาออกที่ผิดปกติเลย
  • ชื่อบัญชีอยู่ในลิสต์ที่คนโจมตีใช้กันทั่วไป
  • รหัสยังไม่ถูกเจาะ

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

รวม IP ที่ A=login: สำเร็จของบัญชีนี้มี IP ที่ไม่ควรเป็นของลูกค้า login สำเร็จไหมมีไม่มีเคส A: ถูกยึดIP คลาวด์ต่างประเทศ login สำเร็จ 201 ครั้งล้มเหลว 0 ครั้ง ใบแจ้งหนี้ปลอม 190 ฉบับเคส B: ไม่ได้ถูกยึดIP ที่สำเร็จ 10 ตัว เป็นออฟฟิศไทยทั้งหมดIP ต่างประเทศ 516 ตัว ล้มเหลวล้วนแจ้งว่าถูกยึดเปลี่ยนรหัส และสแกนเครื่องที่ใช้กล่องนั้นแจ้งว่าชื่อบัญชีตกเป็นเป้าแต่รหัสยังปลอดภัย
คำถามข้อเดียวคือมี IP ที่ไม่ควรเป็นของลูกค้า login สำเร็จหรือไม่ ถ้ามีคือเคส A ถูกยึด ถ้าไม่มี แม้จะมี IP ล้มเหลวถึง 516 ตัวก็เป็นเคส B ไม่ถูกยึด และถ้อยคำที่แจ้งลูกค้าต่างกันไปด้วย

ต้นเหตุจริงของอาการ ออฟฟิศส่งเมลไม่ได้ อยู่ในออฟฟิศเอง

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

# ในบรรดาการยืนยันตัวตนที่ล้มเหลว ซึ่งมาจากไอพีของออฟฟิศเอง เป็นของบัญชีไหน
DOM=example.com
for L in $LOGS; do grep -a 'authenticator failed' "/var/log/exim/$L" | grep "set_id=[^ ]*@$DOM"; done \
 | sed -nE 's/.*\[([0-9.]+)\].*set_id=([^ )]+).*/\1|\2/p' \
 | grep -E '^(198\.51\.100\.)' \
 | awk -F'|' '{print $2}' | sort | uniq -c | sort -rn
1336  [email protected]
   2  [email protected]

ตัวเลข 1,336 จากทั้งหมด 1,338 ครั้ง คือ 99.85 เปอร์เซ็นต์ มาจากบัญชีเดียว และเป็นบัญชีเดียวกับเคส B ที่รหัสยังดีอยู่ ภาพรวมเลยกลายเป็นแบบนี้ มี เครื่องอัตโนมัติสักตัวในออฟฟิศที่ถือรหัสเก่าไว้ อาจเป็นเครื่องสแกนเอกสารที่ส่งเมล เครื่องพิมพ์ ระบบหลังบ้าน หรือฟอร์มบนเว็บ มันพยายามส่งเมลซ้ำๆ ด้วยรหัสที่ผิด ชั่วโมงละสิบกว่าครั้ง

ลูกโซ่ของอาการเครื่องถือรหัสเก่าในออฟฟิศ->ล้มเหลวถี่จากไอพีออฟฟิศ->ไฟร์วอลล์แบน1800 วินาที->ทั้งออฟฟิศส่งไม่ได้->ปลดแล้ววนใหม่

กฎที่นับความล้มเหลวของการยืนยันตัวตนเพื่อแบนไอพี มันไม่รู้จักคำว่าลูกค้าหรือคนร้าย มันเห็นแค่ไอพีเดียวล้มเหลวเกินเกณฑ์ในเวลาสั้น แล้วแบน 1,800 วินาที ผลคือทั้งออฟฟิศทุกคนทุกกล่องเมลส่งไม่ออกพร้อมกัน แล้วก็หายเองเมื่อครบเวลา วนแบบนี้ทุกหนึ่งถึงสองชั่วโมง ตรงกับที่ลูกค้าบอกว่าเดี๋ยวได้เดี๋ยวไม่ได้เป๊ะ นี่คือความผิดพลาดของการตั้งค่าฝั่งลูกค้า ไม่ใช่การถูกโจมตี และสำคัญมากที่ต้องแยกให้ออก เพราะสองอย่างนี้แก้คนละที่กันคนละแบบ

ทำไมการใส่ไอพีออฟฟิศเข้ารายการยกเว้นทีละตัว แก้ไม่ได้

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

16ไอพีออฟฟิศใน 4 สัปดาห์
15วง /24 ที่กระจายอยู่
10วง /16 ที่กระจายอยู่
~655,000ที่อยู่ ถ้ายกเว้นทั้ง /16

ตัวเลขชุดนี้ปิดทางเลือกทีละข้อ การใส่ไอพีทีละตัวใช้ไม่ได้เพราะสี่สัปดาห์เปลี่ยนไปสิบหกครั้ง และเราไม่รู้ว่าเดือนหน้าจะเป็นเลขอะไร การรวบเป็นวง /24 ก็ไม่ช่วย เพราะสิบหกไอพีนั้นกระจายอยู่คนละ /24 เกือบทั้งหมด มีแค่วงเดียวที่บังเอิญมีสองตัว ส่วนการยกเว้นทั้ง /16 นั้นเป็นทางที่ต้องปฏิเสธตั้งแต่แรก

ยกเว้นทั้ง /16 เท่ากับปิดการป้องกันให้คนทั้งย่านเครือข่าย

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

เมื่อสรุปว่าถูกยึดจริง ลำดับงานหลังจากนั้น

ถ้าหลักฐานครบและตัดสินว่าถูกยึดจริง ผมทำตามลำดับนี้เสมอ และจุดที่คนพลาดมากที่สุดคือข้อสองกับข้อสี่

  1. ตัดทางเข้าก่อน บล็อกไอพีต้นทางที่ยืนยันตัวตนสำเร็จ พร้อมเขียนเหตุผลกำกับไว้ในคำสั่ง เพื่อให้คนที่มาอ่านทีหลังรู้ว่าบล็อกเพราะอะไร
  2. เปลี่ยนรหัสโดยค้นหาเจ้าของบัญชีจากรายการโดเมน อย่าเดาชื่อผู้ใช้ เพราะชื่อผู้ใช้ในระบบกับชื่อโดเมนมักไม่ตรงกัน เดาผิดแล้วไปแก้รหัสของคนอื่นคือสร้างเหตุการณ์ที่สอง
  3. ตรวจคิวเมลก่อนลบ ดูรายการที่ค้างในคิวด้วยตาก่อน แล้วค่อยลบเฉพาะที่มาจากบัญชีนั้น อย่าล้างคิวทั้งกอง เพราะเมลของลูกค้ารายอื่นก็อยู่ในคิวเดียวกัน
  4. ส่งรหัสใหม่ทางช่องทางอื่นที่ไม่ใช่อีเมล เพราะเหตุที่รหัสเดิมรั่วโดยไม่มีการเดาเลย แปลว่ามีเครื่องที่อ่านกล่องเมลนี้ติดโปรแกรมขโมยรหัสอยู่ ถ้าเมลรหัสใหม่เข้าไปในกล่องเดิม ก็รั่วซ้ำทันที
  5. เตือนลูกค้าเรื่องเครื่องที่ตั้งค่าไว้ทุกเครื่อง ให้ตามแก้พร้อมกันในคราวเดียว ไม่งั้นเครื่องที่ยังถือรหัสเก่าจะกลายเป็นเครื่องผีตัวใหม่ แล้วลากไอพีออฟฟิศไปโดนแบนแบบเคส B
# หาเจ้าของบัญชีจากรายการโดเมน ปลอดภัยกว่าเดาชื่อผู้ใช้จากชื่อโดเมน
OWNER=$(grep -rl '^example\.com$' /usr/local/directadmin/data/users/*/domains.list \
        | sed -E 's#.*/users/([^/]+)/.*#\1#')

URL=$(/usr/local/directadmin/directadmin api-url --user="$OWNER")
curl -sk "${URL}/CMD_API_POP" \
  --data-urlencode action=modify \
  --data-urlencode domain=example.com \
  --data-urlencode user=service \
  --data-urlencode passwd="<รหัสใหม่>" --data-urlencode passwd2="<รหัสใหม่>"
# ที่ควรได้กลับมา: error=0&text=Account%20password%20changed
# ตรวจก่อน แล้วค่อยลบเฉพาะของบัญชีนั้น
exim -bpc                                   # จำนวนที่ค้างในคิวตอนนี้
exiqgrep -i -f 'service@example\.com'       # ดูรายการก่อน
exiqgrep -i -f 'service@example\.com' | xargs -r exim -Mrm

เขียนรายงานให้แยกคำว่า พบ ออกจาก น่าจะ

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

รูปประโยคที่ผมใช้ในรายงานทุกครั้ง

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

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

อยากให้เราทำให้ไหม?

ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า

คุยเรื่องงานกับเรา

เคยเจองานแบบนี้ไหม? ติดตรงไหน?

มาแลกวิธีกันต่อในบอร์ด LinuxThai

→ คุยต่อในบอร์ด

ความคิดเห็น 0

ยังไม่มีความคิดเห็น — เป็นคนแรกเลย