EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Security / audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง
Security

audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง

โดย Ton-Or ·16 ก.ค. 2026·อ่าน 9 นาที
audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง

การ audit ที่ดีต้องไม่ทำให้ระบบพังหรือล็อกตัวเองออก — ก่อนสแกนเซิร์ฟเวอร์ที่มี CSF/LFD ต้อง whitelist IP ตัวเองไว้ก่อน ไม่งั้นทราฟฟิกสแกนจะไปเข้าเงื่อนไข brute-force แล้วแบนตัวเองกลางคัน

พอดีผมต้องไล่ตรวจความปลอดภัยเซิร์ฟเวอร์ Debian ที่รัน DirectAdmin เป็นระยะ — ทั้งรอบตรวจประจำและตอนหลัง restore/migrate เสร็จเพื่อกันไม่ให้เอาช่องเก่ากลับมา หลักที่ผมยึดคือ read-only ก่อนเสมอ ดูให้ครบก่อน ค่อยตัดสินใจแก้เป็นขั้นตอนแยกที่ต้องอนุมัติอีกที ไม่รีบไปรื้ออะไรระหว่างสแกน เลยเอาลำดับที่ใช้มาเล่าไว้

กับดักแรก: whitelist ตัวเองก่อน ไม่งั้นแบนตัวเอง

เซิร์ฟเวอร์ที่มี CSF/LFD จะมีเงื่อนไขจับ brute-force และ port scan อยู่ พอเราเริ่มสแกน (ยิงหลาย port, ลอง endpoint หลายตัว) ทราฟฟิกของเราเองนั่นแหละเข้าเงื่อนไข แล้ว LFD แบน IP เรากลางคัน — งาน audit ค้าง แถมงงว่าเน็ตหลุดตอนไหน

ทำก่อนอย่างอื่นเสมอ

whitelist IP ตัวเองแบบชั่วคราว 24 ชม. ก่อนเริ่มสแกน แล้วค่อยถอดออกหลังเสร็จ — ไม่ใช่ whitelist ถาวร

MY_IP=$(curl -s ifconfig.me)
csf -ta "$MY_IP" 86400 "audit window $(date +%F)"   # temp allow 24 ชม.
# ... ทำ audit ...
# เสร็จแล้วถอด: csf -tr "$MY_IP"

จุดที่ผมไล่ดู (read-only)

ทั้งหมดเป็นคำสั่ง "ดู" ไม่แก้อะไร:

# 1) ใครฟัง port อะไรอยู่บ้าง — มี service แปลกปลอมไหม
ss -ltnp | sort -k4

# 2) process ที่รันด้วย root แต่มาจาก path แปลก (webshell/miner)
ps aux | awk '$1=="root"' | grep -iE '/tmp/|/dev/shm/|\.\/'

# 3) cron ของทุก user (backdoor ชอบซ่อนตรงนี้)
for u in $(cut -d: -f1 /etc/passwd); do
  crontab -l -u "$u" 2>/dev/null | grep -v '^#' | sed "s/^/[$u] /"
done

# 4) ไฟล์ที่เพิ่งถูกแก้ในที่ที่ไม่ควรมีของใหม่
find /etc /usr/local/bin -mtime -7 -type f 2>/dev/null

# 5) SSH: key ที่ authorized + การตั้งค่าที่หลวม
grep -rE 'PermitRootLogin|PasswordAuthentication' /etc/ssh/sshd_config
อย่าเขียน output ลง /tmp ที่ others อ่านได้

ผล audit มีข้อมูลอ่อนไหว (port, path, config) — เก็บใน dir 0700 ที่สร้างด้วย mktemp -d ไม่ใช่ /tmp/scan.txt ธรรมดาที่ user อื่นบนเครื่องอ่านได้

เทียบกับภูมิทัศน์ช่องโหว่ยุคนี้

ระหว่างดู อย่าลืมเทียบกับ CVE ที่ยัง active ในช่วง 2024-2026 โดยเฉพาะฝั่ง kernel และ mail stack ที่ shared host โดนบ่อย

พื้นที่เสี่ยงหลักบน shared hostkernelnf_tables LPE·mail stackExim/Dovecot/Roundcube·tenant WP/PHPปลั๊กอินเก่า·container escape
# kernel + แพ็กเกจที่ค้างอัปเดต
uname -r
apt list --upgradable 2>/dev/null | grep -iE 'linux-image|exim|dovecot|roundcube|openssl'
# ไฟล์ตั้งค่า DA ที่ควรจำกัดสิทธิ์
ls -la /usr/local/directadmin/conf/ 2>/dev/null | grep -vE 'rw-r-----|rw-------'

จุดที่ผมให้น้ำหนักคือ kernel nf_tables local privilege escalation (มี exploit สาธารณะและอยู่ใน KEV) กับช่องฝั่ง mail ที่เปิดสู่โลกตลอด — สองอย่างนี้เป็นทางที่คนบุกจริงชอบใช้บน shared host มากกว่าช่องหวือหวาอื่น

สรุปลำดับ audit ที่ปลอดภัย

  1. whitelist IP ตัวเองชั่วคราวก่อน (กันแบนตัวเอง)
  2. ไล่ read-only: port, process, cron, ไฟล์เพิ่งแก้, ssh config
  3. เขียน output ลง dir 0700 เท่านั้น
  4. เทียบ kernel/mail/tenant กับ CVE ที่ยัง active
  5. สรุปเป็น P0-P2 แล้วค่อยแก้เป็นขั้นตอนแยก (อนุมัติก่อนแตะ)

หัวใจของการ audit ที่ดีคือ "ดูให้ครบก่อนแตะ" และ "อย่าทำให้ระบบพังเพราะการตรวจเอง" — whitelist ตัวเองก่อนสแกนเป็นเรื่องเล็กที่คนลืมบ่อยจนงานค้างกลางคัน ใครดูแลเซิร์ฟเวอร์ shared-host เอาลำดับนี้ไปทำเป็นรอบตรวจประจำได้ตามสะดวกครับ ตรงไหนผมอธิบายตกหล่นหรือพิมพ์ผิด เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

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

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

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

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

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

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

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

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