SiamCafe.net IT Blog
Backup Strategy 3-2-1 Rule ทำจริงยังไง - SiamCafe Blog

Backup Strategy 3-2-1 Rule ทำจริงยังไง

✍️ อ.บอม | 📅 7 กุมภาพันธ์ 2569 | 🏷️ Cybersecurity | ⏱️ อ่าน 8 นาที

ปี 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 ชุด? เพราะโอกาสที่ storage 2 ตัวจะพังพร้อมกันต่ำมาก แต่ถ้ามีแค่ 2 ชุด (ต้นฉบับ + backup 1) โอกาสเสียทั้งคู่ยังสูงอยู่ เช่น ransomware เข้ารหัสทั้ง server และ NAS ที่ต่อ network เดียวกัน

ตัวอย่างการจัด backup ตามกฎ 3-2-1

ชุดที่ที่เก็บประเภทตำแหน่งความถี่
ชุดที่ 1Server หลัก (Production)SSD/HDDOn-siteReal-time
ชุดที่ 2NAS SynologyHDD RAIDOn-site (ห้องอื่น)ทุก 6 ชม.
ชุดที่ 3Backblaze B2 / AWS S3CloudOff-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/GBEcosystem ดี
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
เคล็ดลับ: ตั้ง monitoring alert ถ้า backup ไม่ทำงาน ผมใช้ healthchecks.io (ฟรี) — ถ้า script ไม่ ping กลับภายใน 1 ชม. จะส่ง alert มาที่ LINE

กรณีศึกษา: กู้ข้อมูลจาก Ransomware

กลับมาที่เรื่องลูกค้าที่โดน ransomware ตอนต้นบทความ สิ่งที่เกิดขึ้นคือ:

  1. 08:00 — พนักงานเปิดไฟล์แนบใน email ที่เป็น malware
  2. 08:15 — Ransomware เริ่มเข้ารหัสไฟล์บน server
  3. 09:30 — IT team สังเกตว่าไฟล์ถูกเปลี่ยนนามสกุลเป็น .locked
  4. 09:35 — ตัด network ทันที ป้องกันการแพร่กระจาย
  5. 09:45 — ตรวจสอบ backup — Borg backup ล่าสุดเมื่อตี 3 (6 ชม.ก่อน)
  6. 10:00 — เริ่ม restore จาก Borg backup
  7. 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 ค่าเสียหายอาจเป็นล้าน เริ่มวันนี้ อย่ารอจนสาย

icafeforex.com

แหล่งอ้างอิง | CVE Database