Tag

, ,

Backup adalah suatu hal yang sangat krusial dalam rangka mengamankan aset yang kita miliki. Akan tetapi terkadang backup harus dilakukan pada beberapa bagian yang selama ini hanya bisa diakses oleh user root, sehingga bagi mesin yang tidak bisa diakses langsung oleh root butuh proses tambahan untuk memastikan berjalannya backup dan pengamanannya. Pada tulisan ini dibahas bagaimana caranya backup menggunakan rsnapshot dapat dilaksanakan melalui cron, sehingga agar proses ini dapat berjalan membutuhkan sesi remote tanpa memerlukan interaksi user untuk mengetikkan password.

ASUMSI

Terdapat dua buah mesin di mana mesin yang akan menjadi tempat backup adalah mesin backup dan mesin yang dijadikan sumber adalah mesin server. Kita namakan saja mesin backup dengan MB dan mesin server dengan MS. MB memiliki IP 10.10.4.2 sedangkan MS memiliki IP 10.10.4.1.

Selain itu pada kedua mesin telah dilakukan instalasi ssh server dan rsync, serta MB bisa melakukan koneksi ke MS ditandai dengan bisa dibuat koneksi melalui ssh. Untuk membedakan di mana perintah dijalankan, pada masing-masing baris perintah ada ditambahkan tag MB ataupun MS untuk menunjukkan lokasi mesinnya.

Pada implementasi ini yang mengakses dan melaksanakan rsnapshot ada pada MB. Hal ini dilatari pada aspek keamanan, bahwa Mesin Production adalah mesin yang pertama kali akan diserang, sehingga apabila akses berhasil didapatkan maka satu-satunya kesempatan bagi kita untuk melakukan recovery adalah dengan melakukan instalasi ulang pada Mesin Production. Tentu saja, apabila Mesin Production berhasil diambil aksesnya dan terdapat informasi yang mendukung akses ke Mesin Backup maka hal ini berarti kiamat bagi kita. Oleh karena itu, proses backup dilaksanakan dari Mesin Backup dengan mengakses ke Mesin Production, tidak sebaliknya.

Langkah #1 SSH Tanpa Password

Untuk melakukan ini, login tanpa perlu melakukan penginputan password maka kita harus mengenerate kunci RSA di MB. Tentu saja hal ini dibutuhkan apabila sebelumnya belum dilaksanakan. Untuk melakukan pengecekan apakah sudah pernah digenerate (asumsi private dan public key ada di /root/.ssh/):

MB# cat /root/.ssh/id_rsa.pub

Apabila tidak ada file tersebut maka lakukan generate. Bila diminta untuk memasukkan password, abaikan saja.

MB# ssh-keygen -t rsa
MB# chmod og-rwx /root/.ssh/id_rsa
MB# chmod og-wx /root/.ssh/id_rsa.pub

Kemudian lakukan copy kunci publik MB ke MS.

MB# ssh-copy-id -p 22 root@10.10.4.1

WARNING: SAMPAI DI SINI KITA HARUS PAHAM BAHWA siapapun tidak diperbolehkan untuk dapat mengakses kunci private (file tanpa akhiran pub) tersebut, terkecuali si pemilik.

Langkah selanjutnya adalah silahkan check pada file /root/.ssh/authorized_keys di MS dan pastikan bahwa terdapat kunci publik dari MB dimasukkan di sana. Pada mesin MS perintah dijalankan dengan hasil kurang lebih seperti berikut (cat: semestinya berada pada satu baris, di sini dipisah untuk memudahkan):

MS# cat /root/.ssh/authorized_keys
ssh-rsa MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDPfsjvKCWkkbT+inF/bTX7eT5
UL+8H8Q03cCT+95SWfTf365I+c08ogPBb2GemxH3ng3q1gphLHomBLGqMakMmxfL
DR+UHMLqQqJKiGdBE86Xz9qcnp50DNKrn1XMFysoRq9OcOAFV5qUiaeQs8D8IccZ
3pVDqTnV36Z853xN5wIDAQAB root@MB

Setelah itu silahkan untuk melakukan login ke MS dari MB melalui ssh dan semestinya tidak ada proses permintaan password. Bila masih terdapat permintaan password, silahkan ulangi lagi proses di atas dan pastikan tidak ada yang terlewat.

Langkah #2 Test rsync dan Pengamanan Tambahan

rsnapshot merupakan sebuah utility yang berdiri di atas rsync, jadi harus dipastikan bahwa perintah rsync dapat berjalan dengan sempurna, tanpa kita harus memasukkan password.

Misalnya pada MS terdapat sebuah folder yang ingin kita dapatkan semua isinya.

MS# file /disk2/file/file_prod/
/disk2/file/file_prod/: directory

Maka kita coba lakukan proses untuk melakukan synchronized file diantara keduanya.

MB# rsync -avh -e "ssh -i /root/.ssh/id_rsa -p 22" root@10.10.4.1:/disk2/file/file_prod /home/backup-production/

Perintah di atas menjalankan rsync menggunakan ssh dan perintah “-i” menginformasikan private key di MB pasangan dari public key MB di MS, di mana public key nya telah dikirimkan ke MS sebelumnya. Seharusnya proses bisa berjalan tanpa ada permintaan password root.

Akan tetapi, pada setting kali ini kita ingin memastikan bahwa yang dilakukan oleh mesin backup hanyalah perintah dari rsync serta dilaksanakan dari satu buah mesin saja, yaitu mesin MB di 10.10.4.2. Untuk itu kita akan menambahkan setting filter IP dan script yang harus dijalankan saat sebuah koneksi melalui ssh dilakukan. Pada mesin MS di file /root/.ssh/authorized_keys tambahkan pada bagian depan setting filter from berisikan IP milik MB, serta setting script sehingga kurang lebih menjadi seperti ini.

MS# cat /root/.ssh/authorized_keys
from="10.10.4.2",command="/root/validate-remote-rsync" ssh-rsa MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDPfsjvKCWkkbT+inF/bTX7eT5
UL+8H8Q03cCT+95SWfTf365I+c08ogPBb2GemxH3ng3q1gphLHomBLGqMakMmxfL
DR+UHMLqQqJKiGdBE86Xz9qcnp50DNKrn1XMFysoRq9OcOAFV5qUiaeQs8D8IccZ
3pVDqTnV36Z853xN5wIDAQAB root@MB

Pada kode setting ssh di atas kita memastikan bahwa pengguna kunci publik tersebut berasal dari 10.10.4.2 yaitu MB dan saat sesi SSH dijalankan perintah yang dikirimkan secara remote akan diperiksa oleh script di /root/validate-remote-rsync.

Pastikan kode setting pada authorized_keys tersebut berada pada satu baris saja!

Berikut ini adalah kode script untuk /root/validate-remote-script di MS tersebut.

#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\>*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac

Tentu saja ada setting hak akses yang juga perlu dilakukan.

MS# chmod u+rw,og-rwx /root/.ssh
MS# chmod gu+r,o-rwx /root/.ssh/authorized_keys
MS# chmod gu+rx,o+x,o-rw /root/validate-remote-script

Untuk melakukan testing silahkan akses melalui ssh dari MB ke MS, semestinya akan keluar pesan rejected dan sesi berhenti.

MB# ssh root@10.10.4.1 -p 22
Rejected
Connection to 10.10.4.2 closed.

Namun apabila yang dijalankan adalah perintah remote rsync dari MB ke MS, proses bisa berjalan dengan baik.

Langkah #3: Setting rsnapshot

Untuk setting di rsnapshot, selain yang standar maka terdapat beberapa tambahan diantaranya:

# setting untuk cmd_ssh diaktifkan 
cmd_ssh /usr/bin/ssh
# setting ssh argumen, apalagi bila port bukan default
ssh_args -p 1428 -o BatchMode=yes -i /root/.ssh/id_rsa
# log dan pid
logfile /var/log/rsnapshot-spse-prod.log
lockfile /var/run/rsnapshot-spse-prod.pid
# saya menyukai untuk sync dahulu untuk memastikan bahwa proses
# sync berjalan sempurna baru rotating dilaksanakan
sync_first 1

Setelah itu untuk melakukan proses backup dari MB tinggal menambahkan perintah backup. Sebagai contoh di sini rsnapshot akan melakukan backup untuk folder di MS yang akan disimpan ke MB.

backup root@10.10.4.1:/data/file-prod/2018 file_prod/

Lalu di test untuk memastikan bahwa sudah berjalan.

MB# rsnapshot -t sync && rsnapshot -t hourly

Apabila testing berhasil, dilanjutkan dengan perintah backupnya.

MB# rsnapshot sync && rsnapshot hourly

Tentu saja kita bisa melihat lognya berdasarkan setting di atas.

MB# tail -f /var/log/rsnapshot-spse-prod.log

Untuk setting rsnapshot di cron bisa check pada tulisan ini.

Sumber:

  1. https://www.ullright.org/ullWiki/show/secure-rsync-via-ssh-as-root
  2. http://positon.org/rsync-command-restriction-over-ssh
  3. http://troy.jdmz.net/rsync/
  4. http://troy.jdmz.net/rsnapshot/
Iklan