วิธีรักษาความปลอดภัย Droplet DigitalOcean: Cloud Firewall, 2FA, Backup, Snapshot และ Monitoring
เช็กลิสต์ความปลอดภัยสำหรับ Droplet และบัญชี DigitalOcean ครอบคลุม 2FA, Cloud Firewall, VPC, SSH key, Backup กับ Snapshot ต่างกันอย่างไร, การอัปเดต, Monitoring, และแผนกู้ระบบเมื่อเกิดเหตุ
ทำไมความปลอดภัยต้องมาก่อน
เซิร์ฟเวอร์ที่เปิดอินเทอร์เน็ตจะถูกสแกนจากบอตภายในไม่กี่นาทีหลังสร้าง พฤติกรรมที่พบบ่อยคือการเดารหัสผ่าน SSH, การหาช่องโหว่ใน WordPress ปลั๊กอิน, และการหาฐานข้อมูลที่เปิดพอร์ตสู่สาธารณะโดยไม่มีรหัสผ่าน ข่าวดีคือมาตรการพื้นฐานไม่กี่ข้อป้องกันการโจมตีส่วนใหญ่ได้
ภายใต้โมเดล Shared Responsibility DigitalOcean ดูแลโครงสร้างพื้นฐานจริง (ฮาร์ดแวร์ เครือข่ายส่วนกลาง hypervisor) แต่ระบบปฏิบัติการ แอป และการตั้งค่าบนเครื่อง Droplet เป็นความรับผิดชอบของคุณ
ระดับที่ 1: ปกป้องบัญชี DigitalOcean
บัญชีคือกุญแจของทุกอย่าง ถ้าบัญชีถูกแฮก ผู้โจมตีลบหรือสร้างทรัพยากร และสร้างค่าใช้จ่ายได้
- เปิด 2FA (Two-Factor Authentication) ที่เมนู Settings → Security ใช้แอป Authenticator แทน SMS ถ้าเป็นไปได้
- ใช้รหัสผ่านที่ไม่ซ้ำกับที่อื่น และจัดเก็บใน password manager
- เก็บ recovery code ไว้ในที่ปลอดภัยนอกคอมพิวเตอร์เครื่องเดียว
- ใช้ Team และบทบาท ถ้าทำงานร่วมกันหลายคน อย่าแชร์บัญชีเดียว
- ตั้ง Billing Alert ให้เตือนเมื่อค่าใช้จ่ายผิดปกติ
- สร้าง API token แบบสิทธิ์น้อยที่สุด (read-only ถ้าไม่จำเป็นต้องเขียน) และหมุนเวียนเป็นระยะ อย่าฝัง token ใน repository สาธารณะ
ระดับที่ 2: ปกป้องการเข้าถึงเซิร์ฟเวอร์
ทำตามขั้นตอนในบทความ สอนสร้าง Droplet แรก โดยสรุป
- ใช้ SSH key ปิดล็อกอินด้วยรหัสผ่าน และปิด root login
- สร้างผู้ใช้ปกติสำหรับ sudo
- จำกัดผู้ที่เข้าถึง SSH ได้ด้วย Firewall (ดูด้านล่าง)
- ถ้าจำเป็น เปลี่ยนพอร์ต SSH ได้ แต่นั่นไม่ใช่มาตรการความปลอดภัยจริง เป็นแค่ลดสแปมใน log ไม่ควรพึ่งพาแทน key
ระดับที่ 3: ไฟร์วอลล์สองชั้น
UFW บนเครื่อง
ตั้ง default deny incoming แล้วเปิดเฉพาะที่จำเป็น
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Cloud Firewall ของ DigitalOcean
Cloud Firewall ทำงานที่ระดับเครือข่ายก่อนแพ็กเก็ตถึงเครื่อง ตั้งค่าที่ Networking → Firewalls ข้อดีคือใช้กับหลาย Droplet พร้อมกัน (ใช้ tag หรือเลือกเครื่อง) และตั้งกฎครั้งเดียวใช้ทั้งกลุ่ม ตามเอกสารทางการ Cloud Firewall ไม่คิดค่าบริการเพิ่ม (ตรวจสอบเงื่อนไขปัจจุบันบนหน้าราคา)
กฎที่แนะนำสำหรับเว็บเซิร์ฟเวอร์ทั่วไป
| ประเภท | โปรโตคอล/พอร์ต | แหล่งที่มา |
|---|---|---|
| Inbound | TCP 22 (SSH) | IP ของคุณเท่านั้น (ถ้า IP คงที่) |
| Inbound | TCP 80 | ทั้งหมด |
| Inbound | TCP 443 | ทั้งหมด |
| Inbound | ICMP | ทั้งหมด (เพื่อ ping/diagnose) |
| Outbound | ทุกอย่าง | ทั้งหมด |
เคล็ดลับ: ถ้า IP ที่บ้านเปลี่ยนบ่อย อย่าจำกัด SSH ด้วย IP เดียวจนเข้าไม่ได้ ใช้ VPN ที่มี IP คงที่ หรือยอมเปิด SSH กับทุก IP แต่ใช้ key + fail2ban
ระดับที่ 4: ปิดฐานข้อมูลจากอินเทอร์เน็ต
ความผิดพลาดที่ร้ายแรงที่สุดคือเปิด MySQL (3306), PostgreSQL (5432), Redis (6379) หรือ MongoDB (27017) ให้ทุกคนเข้าถึง
- ให้ฐานข้อมูล listen เฉพาะ
127.0.0.1ถ้าอยู่เครื่องเดียวกับแอป - ถ้าแยกเครื่อง ใช้ VPC (Virtual Private Cloud) เชื่อมกันผ่าน private IP และเปิดพอร์ตเฉพาะ IP ภายใน
- ถ้าใช้ Managed Database ให้ใช้ Trusted Sources จำกัดว่า Droplet ไหนเชื่อมต่อได้ ดู คู่มือ Managed Databases
ระดับที่ 5: อัปเดตและลดพื้นผิวการโจมตี
- เปิด
unattended-upgradesเพื่อแพตช์ความปลอดภัยอัตโนมัติ - อัปเดตแอปและปลั๊กอิน (โดยเฉพาะ WordPress) สม่ำเสมอ
- ลบซอฟต์แวร์ที่ไม่ใช้ ปิดบริการที่ไม่จำเป็น (
sudo ss -tulpnดูว่ามีอะไรเปิดพอร์ตอยู่) - ใช้ HTTPS ทุกหน้า ด้วย Let's Encrypt (
certbot) - แยกสิทธิ์ผู้ใช้ที่รันแอปออกจากผู้ใช้ผู้ดูแลระบบ
ระดับที่ 6: Backup และ Snapshot ต่างกันอย่างไร
หลายคนสับสนสองอย่างนี้ ซึ่งสำคัญมากเพราะมีผลต่อแผนกู้ระบบ
| หัวข้อ | Backups อัตโนมัติ | Snapshots |
|---|---|---|
| วิธีทำงาน | ระบบถ่ายภาพ Droplet ตามตารางที่กำหนด | คุณสั่งถ่ายภาพเมื่อต้องการ |
| ราคา | 20% (รายสัปดาห์) หรือ 30% (รายวัน) ของราคา Droplet | คิดตามขนาดข้อมูลที่เก็บ |
| เหมาะกับ | การกู้คืนเมื่อเกิดปัญหา | ก่อนอัปเกรดหรือเปลี่ยนแปลงใหญ่ |
| จัดการ | อัตโนมัติ | ด้วยมือ (หรือสคริปต์/API) |
ข้อสำคัญ
- Backup และ Snapshot ระดับ Droplet เป็นภาพทั้งดิสก์ ไม่ใช่สำเนาระดับไฟล์ที่เลือกกู้ทีละไฟล์ได้สะดวก และข้อมูลฐานข้อมูลที่กำลังเขียนอาจไม่สอดคล้องกัน
- เพราะฉะนั้นควรทำ dump ฐานข้อมูล (เช่น
mysqldump,pg_dump) และส่งไปเก็บภายนอก เช่น Spaces หรือที่อื่น - ทำตามกฎ 3-2-1: ข้อมูล 3 ชุด, 2 สื่อ/ที่เก็บต่างกัน, 1 ชุดอยู่นอกผู้ให้บริการหลัก
- ทดสอบกู้คืนจริง อย่างน้อยไตรมาสละครั้ง backup ที่ไม่เคยลองกู้ ยังไม่ใช่ backup
ตัวอย่างสคริปต์ dump MySQL แล้วบีบอัด
mysqldump --single-transaction -u backup -p'รหัสผ่าน' wordpress | gzip > /var/backups/wp-$(date +%F).sql.gz
(ควรเก็บรหัสผ่านใน ~/.my.cnf สิทธิ์ 600 แทนการใส่ในคำสั่ง เพื่อไม่ให้ปรากฏใน history)
ระดับที่ 7: Monitoring และการแจ้งเตือน
- เปิด Monitoring agent ตอนสร้าง Droplet หรือติดตั้งภายหลัง
- ตั้ง Alert Policy แจ้งเตือนผ่านอีเมล/Slack เมื่อ CPU > 80% ต่อเนื่อง, RAM เกินเกณฑ์, ดิสก์เต็มเกิน 85%, และ bandwidth ผิดปกติ
- ใช้เครื่องมือภายนอกตรวจ uptime เช่น UptimeRobot หรือ Uptime Kuma เพื่อดูมุมมองจากภายนอก
- เก็บ log ในที่ที่ตรวจย้อนหลังได้ และดู
/var/log/auth.logเป็นระยะว่ามีการล็อกอินแปลก ๆ หรือไม่
ระดับที่ 8: แผนรับมือเมื่อเกิดเหตุ
- สงสัยว่าถูกแฮก: ตัดการเข้าถึงด้วยการใช้ Cloud Firewall ปิดขาเข้าชั่วคราว อย่าเพิ่งลบเครื่อง เก็บ snapshot ไว้ตรวจสอบ
- หมุนเวียนความลับทั้งหมด: รหัสผ่านฐานข้อมูล API key SSH key
- กู้จาก backup ที่สะอาด ที่ทำก่อนเกิดเหตุ ไม่ใช่แค่ "ลบมัลแวร์"
- หาสาเหตุ (ปลั๊กอินที่มีช่องโหว่ รหัสผ่านอ่อน พอร์ตที่เปิด) แล้วปิดช่องก่อนกลับมาออนไลน์
- แจ้งผู้ที่ได้รับผลกระทบ หากมีข้อมูลผู้ใช้รั่ว ให้เป็นไปตามกฎหมายคุ้มครองข้อมูลส่วนบุคคล (PDPA)
สรุป: เช็กลิสต์ความปลอดภัย 15 ข้อ
- เปิด 2FA ในบัญชี DigitalOcean
- ใช้ SSH key และปิด password login
- ปิด root login
- เปิด UFW และ Cloud Firewall
- ปิดพอร์ตฐานข้อมูลจากอินเทอร์เน็ต
- ใช้ VPC สำหรับการสื่อสารภายใน
- เปิด unattended-upgrades
- อัปเดตแอปและปลั๊กอินสม่ำเสมอ
- ใช้ HTTPS ทุกหน้า
- เปิด Backup อัตโนมัติสำหรับเครื่องสำคัญ
- ทำ dump ฐานข้อมูลส่งไปเก็บภายนอก
- ทดสอบกู้คืนเป็นระยะ
- ตั้ง Monitoring และ Alert
- ตั้ง Billing Alert
- ทบทวน API token และสมาชิกทีมเป็นระยะ
เมื่อพร้อมแล้วไปต่อกับ ติดตั้ง WordPress บน DigitalOcean หรือดูวิธีจัดงบที่ 15 วิธีลดค่าใช้จ่าย DigitalOcean
คำถามที่พบบ่อยเรื่องความปลอดภัย
ต้องใช้ทั้ง UFW และ Cloud Firewall ไหม
ไม่จำเป็นต้องใช้ทั้งคู่ แต่การมีสองชั้นเป็นแนวปฏิบัติที่ดี Cloud Firewall ป้องกันก่อนแพ็กเกตถึงเครื่อง ส่วน UFW เป็นชั้นสำรองถ้าตั้ง Cloud Firewall ผิดพลาด
DigitalOcean แบ็กอัพให้ฟรีไหม
ไม่ฟรี Backup อัตโนมัติคิด 20% หรือ 30% ของราคา Droplet ตามความถี่ แต่ Managed Database มี backup รายวันรวมอยู่ในราคา ตามหน้าราคา
ติดตั้งแอนตี้ไวรัสบน Linux ต้องไหม
ไม่จำเป็นสำหรับเว็บเซิร์ฟเวอร์ส่วนใหญ่ สิ่งที่ช่วยได้มากกว่าคือการอัปเดต การจำกัดสิทธิ์ และการเฝ้าสังเกต ถ้าให้ผู้ใช้อัปโหลดไฟล์ อาจเสริมด้วย ClamAV สำหรับสแกนไฟล์
ควรเปลี่ยน SSH port ไหม
ไม่จำเป็นและไม่ได้ช่วยความปลอดภัยจริง แต่ลดสแปมใน log ได้บ้าง สิ่งที่สำคัญกว่าคือ key-only login