Backup Strategy 3-2-1 Rule ทำจริงยังไง
ปี 2022 ลูกค้าผมโดน ransomware เข้ารหัสข้อมูลทั้ง server ไฟล์บัญชี 5 ปี ข้อมูลลูกค้า 30,000 records หายหมด hacker เรียกค่าไถ่ 2 BTC (ตอนนั้นประมาณ 1.2 ล้านบาท) โชคดีที่ผมตั้ง backup ตามกฎ 3-2-1 ไว้ กู้ข้อมูลกลับมาได้ภายใน 4 ชั่วโมง ไม่ต้องจ่ายค่าไถ่แม้แต่บาทเดียว ถ้าไม่มี backup วันนั้นบริษัทอาจต้องปิดกิจการ
กฎ 3-2-1 คืออะไร
กฎ 3-2-1 เป็นมาตรฐาน backup ที่ US-CERT และ CISA แนะนำ หลักการง่ายมาก:
- 3 copies — เก็บข้อมูลอย่างน้อย 3 ชุด (ต้นฉบับ + backup 2 ชุด)
- 2 media types — เก็บบน storage อย่างน้อย 2 ประเภท (เช่น SSD + NAS หรือ HDD + Cloud)
- 1 offsite — อย่างน้อย 1 ชุดต้องอยู่นอกสถานที่ (cloud หรือ datacenter อื่น)
ทำไมต้อง 3 ชุด? เพราะโอกาสที่ storage 2 ตัวจะพังพร้อมกันต่ำมาก แต่ถ้ามีแค่ 2 ชุด (ต้นฉบับ + backup 1) โอกาสเสียทั้งคู่ยังสูงอยู่ เช่น ransomware เข้ารหัสทั้ง server และ NAS ที่ต่อ network เดียวกัน
ตัวอย่างการจัด backup ตามกฎ 3-2-1
| ชุดที่ | ที่เก็บ | ประเภท | ตำแหน่ง | ความถี่ |
|---|---|---|---|---|
| ชุดที่ 1 | Server หลัก (Production) | SSD/HDD | On-site | Real-time |
| ชุดที่ 2 | NAS Synology | HDD RAID | On-site (ห้องอื่น) | ทุก 6 ชม. |
| ชุดที่ 3 | Backblaze B2 / AWS S3 | Cloud | Off-site | ทุกวัน |
เครื่องมือ Backup ที่ผมใช้จริง
1. rsync — backup ไฟล์แบบ incremental
rsync เป็นเครื่องมือ backup บน Linux ที่ผมใช้มากที่สุด มันส่งเฉพาะไฟล์ที่เปลี่ยนแปลง ไม่ต้อง copy ทั้งหมดทุกครั้ง ประหยัดเวลาและ bandwidth มาก
#!/bin/bash # backup-daily.sh DATE=$(date +%Y%m%d) SRC="/var/www/" DEST="/backup/daily/$DATE/" LOG="/var/log/backup-$DATE.log" rsync -avz --delete \ --exclude='*.tmp' \ --exclude='cache/' \ $SRC $DEST >> $LOG 2>&1 echo "Backup completed: $(du -sh $DEST)" >> $LOG
ตั้ง crontab รันทุกวันตอนตี 3: 0 3 * * * /root/backup-daily.sh
2. BorgBackup — backup แบบ deduplicated + encrypted
BorgBackup เป็นเครื่องมือที่ผมแนะนำมากที่สุดสำหรับ server backup เพราะมี deduplication (ไม่เก็บข้อมูลซ้ำ) และ encryption (เข้ารหัส) ในตัว
# สร้าง repository
borg init --encryption=repokey /backup/borg-repo
# backup
borg create /backup/borg-repo::daily-{now} /var/www /etc /home
# ลบ backup เก่า (เก็บ 7 วัน, 4 สัปดาห์, 6 เดือน)
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /backup/borg-repo
ข้อดีของ Borg คือ backup ครั้งแรกอาจใช้เวลา 30 นาที แต่ครั้งต่อๆไปใช้แค่ 2-3 นาที เพราะมันเก็บเฉพาะ block ที่เปลี่ยนแปลง ผม backup server ที่มีข้อมูล 500GB ใช้เวลาแค่ 5 นาทีต่อครั้ง
3. Rclone — sync ไป cloud storage
Rclone เป็นเครื่องมือ sync ไฟล์ไป cloud storage ได้เกือบทุกเจ้า ทั้ง AWS S3, Google Cloud Storage, Backblaze B2, Cloudflare R2 ผมใช้ sync backup จาก NAS ไป Backblaze B2 ทุกคืน
# config rclone (ครั้งแรก) rclone config # sync ไป Backblaze B2 rclone sync /backup/borg-repo b2:my-backup-bucket/borg/ \ --transfers=4 --fast-list
เทียบค่าใช้จ่าย Cloud Backup
| Provider | ราคา/GB/เดือน | ค่า Download | ข้อดี |
|---|---|---|---|
| Backblaze B2 | $0.005 | $0.01/GB | ถูกที่สุด ใช้ง่าย |
| AWS S3 Glacier | $0.004 | $0.09/GB | ถูกมาก แต่ restore ช้า |
| Cloudflare R2 | $0.015 | ฟรี | ไม่มีค่า egress |
| Google Cloud Storage | $0.020 | $0.12/GB | Ecosystem ดี |
| Wasabi | $0.007 | ฟรี | ไม่มีค่า egress |
สำหรับ backup 1TB ค่าใช้จ่ายต่อเดือน: Backblaze B2 ≈ $5, Wasabi ≈ $7, Cloudflare R2 ≈ $15 ผมใช้ Backblaze B2 เป็นหลักเพราะถูกที่สุดและ rclone รองรับดีมาก
🎬 วิดีโอแนะนำ
ดูวิดีโอเพิ่มเติมเกี่ยวกับBackup Strategy 3-2-1 Rule ทำจริงยังไง:
Backup Database — MySQL PostgreSQL
MySQL / MariaDB
# backup ทุก database mysqldump --all-databases --single-transaction \ --routines --triggers > /backup/mysql-all-$(date +%Y%m%d).sql # backup เฉพาะ database mysqldump --single-transaction mydb > /backup/mydb-$(date +%Y%m%d).sql # compress gzip /backup/mysql-all-$(date +%Y%m%d).sql
PostgreSQL
# backup ทุก database pg_dumpall > /backup/pg-all-$(date +%Y%m%d).sql # backup เฉพาะ database (custom format — restore เร็วกว่า) pg_dump -Fc mydb > /backup/mydb-$(date +%Y%m%d).dump
สิ่งที่คนมักลืมคือ ต้อง test restore เป็นประจำ backup ที่ restore ไม่ได้ก็เหมือนไม่มี backup ผมตั้ง schedule test restore ทุกเดือน โดย restore ลง test server แล้วตรวจว่าข้อมูลครบถ้วน
Backup Automation Script ตัวอย่างจริง
นี่คือ script ที่ผมใช้จริงกับ server ลูกค้า ทำงานทุกวันตอนตี 2:
#!/bin/bash
# full-backup.sh — 3-2-1 backup automation
set -e
DATE=$(date +%Y%m%d-%H%M)
BACKUP_DIR="/backup/$DATE"
REMOTE="b2:company-backup"
LOG="/var/log/backup.log"
echo "[$DATE] Starting backup..." >> $LOG
# 1. Backup MySQL
mkdir -p $BACKUP_DIR/mysql
mysqldump --all-databases --single-transaction | gzip > $BACKUP_DIR/mysql/all.sql.gz
echo " MySQL: done" >> $LOG
# 2. Backup files with Borg
borg create --compression zstd /backup/borg::$DATE \
/var/www /etc /home --exclude '*/cache/*'
echo " Borg: done" >> $LOG
# 3. Sync to cloud (offsite)
rclone sync /backup/borg $REMOTE/borg/ --transfers=4
rclone copy $BACKUP_DIR/mysql $REMOTE/mysql/$DATE/
echo " Cloud sync: done" >> $LOG
# 4. Cleanup old backups (keep 30 days local, 90 days cloud)
find /backup -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /backup/borg
echo " Cleanup: done" >> $LOG
echo "[$DATE] Backup completed successfully" >> $LOG
กรณีศึกษา: กู้ข้อมูลจาก Ransomware
กลับมาที่เรื่องลูกค้าที่โดน ransomware ตอนต้นบทความ สิ่งที่เกิดขึ้นคือ:
- 08:00 — พนักงานเปิดไฟล์แนบใน email ที่เป็น malware
- 08:15 — Ransomware เริ่มเข้ารหัสไฟล์บน server
- 09:30 — IT team สังเกตว่าไฟล์ถูกเปลี่ยนนามสกุลเป็น .locked
- 09:35 — ตัด network ทันที ป้องกันการแพร่กระจาย
- 09:45 — ตรวจสอบ backup — Borg backup ล่าสุดเมื่อตี 3 (6 ชม.ก่อน)
- 10:00 — เริ่ม restore จาก Borg backup
- 13:30 — ข้อมูลกลับมาครบ สูญเสียแค่ข้อมูล 6 ชม.ล่าสุด
ถ้าไม่มี backup ตามกฎ 3-2-1 ลูกค้าจะต้องจ่ายค่าไถ่ 1.2 ล้านบาท และยังไม่รับประกันว่าจะได้ข้อมูลคืน (สถิติจาก Sophos พบว่า 46% ของเหยื่อที่จ่ายค่าไถ่ได้ข้อมูลคืนไม่ครบ)
สรุป
กฎ 3-2-1 ไม่ใช่เรื่องยาก แต่คนส่วนใหญ่ไม่ทำจนกว่าจะสูญเสียข้อมูลไปแล้ว ผมเห็นมากับตาตัวเอง ลูกค้าที่ไม่มี backup ต้องปิดกิจการ ลูกค้าที่มี backup กู้ข้อมูลกลับมาได้ภายในไม่กี่ชั่วโมง ค่าใช้จ่ายในการทำ backup ตามกฎ 3-2-1 อยู่ที่ประมาณ 500-2,000 บาท/เดือน (ค่า cloud storage) แต่ถ้าไม่มี backup ค่าเสียหายอาจเป็นล้าน เริ่มวันนี้ อย่ารอจนสาย
แหล่งอ้างอิง | CVE Database