Toàn bộ website trên VPS của mình bị tấn công, chuyển sang các trang web ngoại. Điều này dẫn tới bị Google phạt, cấm quảng cáo,… thiệt hại rất lớn. Do đó, mình đã tìm hiểu và sử dụng Rclone để backup toàn bộ VPS lên website.
1. Tại sao website bị nhiễm mã độc?
Mình cũng đã thay đổi port SSH, không sử dụng port mặc định do hocvps script cài sẵn là 2222.
Mình cũng đã thay đổi pass root khi truy cập.
Mình cũng chỉ sử dụng theme, plugin bản quyền hoặc miễn phí mua trên chotheme. Cái này thì các bạn cũng đã biết về uy tín của chotheme. Mình có mua theme trên themeforest nhưng được vài cái thôi, không có khả năng mua hết.
Mình sử dụng VPS độc lập tại Vultr.
Nói chung là không thể biết nguyên nhân từ đâu, thời điểm đó mình bị 4 VPS, lúc đó chỉ còn cách là xuất database về rồi cài đặt lại. May quá đến giờ dữ liệu vẫn ổn, website vẫn ổn và chưa bị làm sao. Nên là ngay lập tức phải tìm cách cài backup tự động VPS lên Google Drive, Cloud miễn phí.
2. Tại sao mình sử dụng Rclone?
- Thứ nhất là mình dùng hocvps script, và mình cũng sử dụng luôn Rclone do hocvps hướng dẫn.
- Thứ 2, Rclone cho phép upload lên nhiều nền tảng. Trong đó có Google Drive là miễn phí nhé.
- Bạn có thể sử dụng các nền tảng trả phí khác, hoặc Google drive trả phí.
- Mình thì có nhiều VPS, nên mỗi VPS sẽ dùng 1 gmail để backup. 15Gb không phải dư nhưng cũng thoải mái sử dụng rồi.
Sử dụng lệnh đơn giản dễ nhớ:
rclone
3. Cài đặt Rclone lên VPS
Cài đặt bản mới nhất với hệ điều hành Linux 64bit
cd /root/
wget https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
\cp rclone-v*-linux-amd64/rclone /usr/sbin/
rm -rf rclone-*
Cài đặt bản mới nhất với hệ điều hành Linux 32bit
cd /root/
wget https://downloads.rclone.org/rclone-current-linux-386.zip
unzip rclone-current-linux-386.zip
\cp rclone-v*-linux-386/rclone /usr/sbin/
rm -rf rclone-*
4. Cài đặt backup tự động lên Google Drive
Chạy lệnh tạo kết nối:
rclone config
Tóm tắt nhanh lệnh để các bạn sử dụng khi thành thạo, các bạn chú ý vào các dòng mình bôi đỏ nhé.
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Alias for a existing remote
\ "alias"
2 / Amazon Drive
\ "amazon cloud drive"
3 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
4 / Backblaze B2
\ "b2"
5 / Box
\ "box"
6 / Cache a remote
\ "cache"
7 / Dropbox
\ "dropbox"
8 / Encrypt/Decrypt a remote
\ "crypt"
9 / FTP Connection
\ "ftp"
10 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
11 / Google Drive
\ "drive"
12 / Hubic
\ "hubic"
13 / Local Disk
\ "local"
14 / Mega
\ "mega"
15 / Microsoft Azure Blob Storage
\ "azureblob"
16 / Microsoft OneDrive
\ "onedrive"
17 / OpenDrive
\ "opendrive"
18 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
19 / Pcloud
\ "pcloud"
20 / QingCloud Object Storage
\ "qingstor"
21 / SSH/SFTP Connection
\ "sftp"
22 / Webdav
\ "webdav"
23 / Yandex Disk
\ "yandex"
24 / http Connection
\ "http"
Storage> 11
Google Application Client Id - leave blank normally.
client_id> (enter bỏ qua)
Google Application Client Secret - leave blank normally.
client_secret> (enter bỏ qua)
Scope that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
\ "drive.file"
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
\ "drive.appfolder"
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
scope> 1
ID of the root folder - leave blank normally. Fill in to access "Computers" folders. (see docs).
root_folder_id> (enter bỏ qua)
Service Account Credentials JSON file path - leave blank normally.
Needed only if you want use SA instead of interactive login.
service_account_file> (enter bỏ qua)
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> n
If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offlinexxxx
Log in and authorize rclone for access
Enter verification code> 4/AABw8gMKPxxxxxxxxxx
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[remote]
type = drive
client_id =
client_secret =
scope = drive
root_folder_id =
service_account_file =
token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"1/xxx","expiry":"2018-05-16T10:55:03.488381196+07:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:
Name Type
==== ====
remote drive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
Dưới đây là hướng dẫn chi tiết nếu các bạn chưa rõ sau khi chạy lệnh Rclone Config
Bạn sẽ nhận được thông báo: No remotes found – make a new one
Ấn n để tạo kết nối mới.
n
Dòng name, nhập remote để đặt tên kết nối.
remote
Một danh sách các lệnh kết nối xuất hiện, bạn cần gõ số là dòng tương ứng với Google Drive. Lưu ý, danh sách có thể thay đổi theo thời gian. Hiện tại đang là số 13.
xx - số kết nối, các bạn tự xem dòng số tương ứng với Google Drive. Hiện tại là số 13
Bạn Enter bỏ qua khi gặp 2 dòng sau:
Client ID
Client Secret
Mục “Scope that rclone should use when requesting access from drive” các bạn chọn 1. Tức là backup toàn bộ.
1
Tiếp tục Enter bỏ qua khi gặp 2 dòng:
ID of the root folder
Service Account Credentials JSON file path
Khi được hỏi Use auto config? thì chọn n
n
Kết quả sẽ trả về link như hình dưới, các bạn bôi đen (tức là copy) rồi ra trình duyệt paste vào rồi enter.
Sau đó chọn tài khoản Google, rồi ấn đồng ý cấp quyền.
Kết quả bạn sẽ nhận được API, rồi copy API paste vào lệnh rồi Enter.
5. Tạo backup VPS lên Google Drive
Các bạn xong bước vừa nãy mới là tạo kết nối thôi, bây giờ các bạn cần tạo 1 thiết lập để backup lên google drive sau đó backup tự động bằng cron theo lịch của mình.
Tạo file backup.sh ở thư mục root bằng lệnh:
nano /root/backup.sh
Copy toàn bộ nội dung dưới đây vào file:
# HocVPS Script Plugin - Backup Server and Upload to Cloud
#!/bin/bash
SERVER_NAME=HOCVPS_BACKUP
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0
mkdir -p "$BACKUP_DIR/mysql"
echo "Starting Backup Database";
databases=`$MYSQL -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
for db in $databases; do
$MYSQLDUMP --force --opt $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';
echo "Starting Backup Website";
# Loop through /home directory
for D in /home/*; do
if [ -d "${D}" ]; then #If a directory
domain=${D##*/} # Domain name
echo "- "$domain;
zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache
fi
done
echo "Finished";
echo '';
echo "Starting Backup Nginx Configuration";
cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
echo "Finished";
echo '';
size=$(du -sh $BACKUP_DIR | awk '{ print $1}')
echo "Starting Uploading Backup";
/usr/sbin/rclone move $BACKUP_DIR "remote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Xoa tat ca ban cu hon 2 tuan
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Xoa tat ca thu muc trong cu hon 2 tuan
/usr/sbin/rclone cleanup "remote:" #Cleanup Trash
echo "Finished";
echo '';
duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
Chú ý 2 chữ mình bôi đỏ nhé, là 2w. Ý nghĩa là xóa tất cả bản backup cũ hơn 2 tuần và các thư mục trống cũ hơn 2 tuần. (Tất nhiên là thư mục tài liệu sẽ vẫn còn nhé)
Các bạn có thể thay số 2w bằng 3M (3 tháng) để thời gian lưu trữ lâu hơn. Tức là bạn sẽ có những bản cũ hơn.
Ấn tiếp tổ hợp phím Ctrl + O và Ctrl + X để thoát.
Phân quyền cho script
chmod +x /root/backup.sh
Vậy là xong rồi đó, giờ bạn có thể test lại bằng cách chạy lệnh:
/root/backup.sh
Thử kiểm tra trên Cloud xem có thư mục mới với dữ liệu backup chưa nhé, hoặc test với lệnh:
rclone lsl remote:HOCVPS_BACKUP
Nếu không có vấn đề gì sẽ thấy kết quả trả về có một thư mục là ngày hiện tại, bên trong có chứa file nén website (.zip), cấu hình Nginx (.conf) và database (.gz).
6. Tạo cronjob tự động backup VPS lên Google Drive
Mở file Cron:
EDITOR=nano crontab -e
Tạo file backup tự động hằng ngày lúc 2h sáng:
0 2 * * * /root/backup.sh > /dev/null 2>&1
Tạo file backup tự động vào thứ 2 và thứ 6 lúc 2h sáng:
0 2 * * 0,5 /root/backup.sh > /dev/null 2>&1
Bạn có thể thay đổi thứ 2, thứ 6 bằng cách thay đổi số 0 và 5. Tuần có 7 ngày từ thứ 2 đến chủ nhật, thì backup sẽ có 7 số từ 0 đến 7.
7. Lưu ý khi sử dụng Rclone backup
- Script trên sẽ back up toàn bộ database, mỗi database nén thành một file .gz, lưu trong thư mục
mysql
- Mỗi thư mục chứa website được nén lại thành 1 file .zip
- Toàn bộ cấu hình Nginx của các website được lưu trong thư mục
nginx
- SERVER_NAME mặc định là HOCVPS_BACKUP, nếu muốn thay đổi folder trên Cloud bạn hãy thay đổi tham số này.
- Muốn điều chỉnh thời gian xóa file backup, bạn sửa thông số ở dòng
delete
vàrmdirs
. Hiện tại, tự động xóa file/folder cũ hơn 2 tuần.
8.Tải file backup từ Cloud xuống VPS
Cách đơn giản nhất để bạn khôi phục lại dữ liệu đó là tải file backup từ Cloud xuống máy tính, rồi tùy theo nhu cầu mà up trở lại lên VPS. Tuy nhiên, nếu muốn tải trực tiếp file backup về VPS, bạn có thể sử dụng luôn Rclone với câu lệnh:
rclone copy "remote:/HOCVPS_BACKUP/2017-11-01" /root/
Lệnh trên sẽ copy folder 2017-11-01
trong thư mục HOCVPS_BACKUP
trên Cloud về thư mục /root/
của VPS. Tốc độ upload và download từ Cloud đều rất nhanh.
Sau khi copy dữ liệu backup về VPS, bạn tiến hành giải nén file zip, copy thư mục web và nginx về đúng vị trí đồng thời tiến hành import database.
Bài viết có sử dụng dữ liệu trên hocvps