Mengakses Komputer Lokal Dari Internet Tanpa IP Publik

Tag

Pada laptop yang saya gunakan terdapat integrated webcam, namun tidak pernah digunakan. Hingga saat saya memutuskan untuk membeli paket Internet yang ditawarkan oleh Indihome. Ide pun muncul, bagaimana bila saya memberdayakan saja laptop yang lebih sering ditinggal di rumah ini untuk untuk memonitor isi rumah? Karena webcam nya ada, saya pikir jaringan internet di rumah kalau saya tinggal harus ada gunanya. Untuk itu, muncul kebutuhan untuk melakukan remote dari Internet ke komputer laptop di rumah.

Apabila IP Publik merupakan fasilitas yang didapatkan dari paket indihome, maka tentu saja semuanya akan lebih mudah. Namun, saat mengakses ke router saya kecewa karena yang saya dapatkan bukan merupakan IP Public.

Bila saja ada IP Public tentu saja saya tinggal melakukan setting IP Forwarding di router, agar mem-forward request dari WAN ke service laptop saya. Tidak kekurangan akal, hasil dari pencarian di internet menggunakan google, saya dapatkan informasi menggunakan layanan milik ngrok.com.

Secara sederhana Ngrok membuat tunneling diantara komputer dan saya yang mengaksesnya dari luar jaringan lokal rumah. Karena Ngrok , saya tidak perlu lagi melakukan setting tambahan di router Indihome, selama terdapat akses internet maka saya dapat mengakses komputer di rumah.

Di Ubuntu instalasinya sangat mudah, tinggal melakukan download terhadap binary client ke laptop, dilanjutkan inisiasi otentifikasi token yang didapatkan setelah mendaftar di web ngrok.com, saya dapat langsung menggunakan layanannya yang gratis.  Untuk detailnya silahkan diakses pada web ngrok.com.

Langkah selanjutnya pada laptop dengan webcam tadi saya tinggal menjalankan perintah:

$ ./ngrok http 8081

di mana webcam server yang saya install nanti menggunakan port 8081 dan melayani request menggunakan protokol http.

 

 

Iklan

Reload nginx Setelah Letsencrypt Berhasil Terupdate

Tag

, ,

Pada salah satu server web yang menggunakan Letsencrypt untuk sertifikat SSL-nya, untuk proses pembaharuan kami menggunakan crontab sebagaimana yang biasanya dilakukan.

0    0,12    *    *    *   certbot renew  >/dev/null 2>&1

Akan tetapi pada aplikasi server yang digunakan, di mana kami menggunakan nginx, ternyata tidak secara otomatis melakukan pembaharuan pula terhadap sertifikat yang digunakan oleh salah satu domain. Akibatnya, Letsencrypt telah melakukan pembaharuan, nginx tidak melakukannya.

Sebagai solusi sebenarnya sangat sederhana, yaitu dengan menjalankan perintah reload untuk server nginx-nya menggunakan perintah service nginx reload.

Agar proses reload server nginx dapat dilaksanakan secara otomatis setelah pembaharuan berhasil, maka pada salah satu konfigurasi milik Letsencrypt di /etc/letsencrypt/renewal/domain.com.conf tinggal ditambahkan perintah nginx untuk reload.

# Options used in the renewal process
[renewalparams]
renew_hook = service nginx reload

Setelah itu semestinya nginx akan di reload pada saat Letsencrypt berhasil melakukan pembaharuan.

rsnapshot Menyebabkan Hardisk Full Karena Hardisk Eksternal Gagal Di Mount Oleh autofs

Tag

,

Pada kasus sebelumnya terjadi hardisk full pada saat melakukan backup ke hardisk eksternal menggunakan rsnapshot, diakibatkan oleh automatic mounting hardisk eksternal yang dilakukan oleh autofs tidak berjalan sempurna. Hal ini bisa terjadi karena terdapat corrupt pada struktur file di hardisk eksternal tersebut atau hal lainnya.

Misalnya dalam kasus ini menggunakan autofs hardisk eksternal akan di-mount ke path /backuper/usbhd. Hal ini bisa dijelaskan bahwa lazimnya penggunaan autofs, maka pada mesin akan dibuat dahulu folder /backuper dan berdasarkan setting autofs hardisk eksternal yang kita pilih, di mounting ke path /backuper/usbhd.

Namun seperti yang disampaikan, pada saat rsnapshot melakukan pekerjaannya dan hardisk gagal di mounting, rsnapshot tetap melakukan proses backup dengan membuat folder /backuper/usbhd; akan tetapi alih-alih dibuat di hardisk eksternal ternyata folder ini dibuat di hardisk mesin. Akibatnya, data sebesar ratusan Giga memenuhi root yang hanya memiliki ukuran kurang lebih 10GB sehingga mengakibatkan salah satu mesin server production berhenti bekerja dan harus di reset.

Seharusnya: apabila hardisk eksternal gagal di mounting maka demikian pula proses backup harus dihentikan!

Untunglah solusinya sangat mudah, kita tinggal mengaktifkan salah satu setting yang memang dibuat untuk permasalahan ini pada bagian no_create_root. Berikut setting yang harus dibuat pada file konfigurasi rsnapshot yang digunakan.

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
no_create_root 1

Pelajaran dari ini adalah: hidup dan cintai komentar dan manual yang ada!

 

 

Remote Backup Menggunakan rsnapshot dengan Login Root

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/

Recovery Password Root Menggunakan SystemRescueCD

Tag

, , ,

Salah satu partisi pada hardisk full hingga 100%, mengakibatkan tidak dapat login ke dalam sistem. Hal ini menyebabkan akses tidak dapat dilakukan dan harus menggunakan mode recovery.

Mimpi buruk terjadi, saat untuk login pun tidak bisa dilaksanakan.

Percobaan pertama adalah melakukan dari recovery, tidak dapat login karena password ditolak.

Percobaan kedua mencoba untuk melakukan proses reset password root dengan menggunakan langkah yang dijabarkan oleh https://www.itzgeek.com/how-tos/linux/debian/how-to-reset-root-password-on-debian-9-stretch.html, namun ternyata sistem tidak dapat mendeteksi keyboard yang digunakan. Langkah terakhir adalah mengakses dari live usb.

SystemRescueCd saya download, kemudian menggunakan tool Rufus (https://rufus.akeo.ie/) saya memindahkannya agar bisa diload menggunakan USB karena ketiadaan CD Drive di server.

USB di colok ke port dan sistem di restart!

Sukses masuk dan kemudian menggunakan perintah fdisk mencoba mencari dev yang bisa diakses. Di sini folder root ada pada /dev/sda2 maka langkah berikutnya adalah untuk melakukan persiapan menjalankan chroot.

# mkdir /mnt/sys
# mount /dev/sda2 /mnt/sys
# mount -o bind /proc /mnt/sys/proc
# mount -o bind /dev /mnt/sys/dev
# mount -o bind /sys /mnt/sys/sys
# chroot /dev/sda2

Bila tidak ada permasalahan akan muncul tampilan shell untuk root dan tinggal lakukan proses perubahan password dengan perintah passwd.

Langkah lainnya adalah melakukan pencarian terhadap partisi yang penuh serta melakukan pembersihan yang dibutuhkan.

Sumber:

  1. http://www.system-rescue-cd.org/disk-partitioning/Repairing-a-damaged-Grub/
  2. https://rufus.akeo.ie/
  3. https://www.howtogeek.com/howto/linux/reset-your-ubuntu-password-easily-from-the-live-cd/
  4. https://techtalk.gfi.com/top-5-free-rescue-discs-for-your-sys-admin-toolkit/
  5. https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#5

Menggunakan Rsnapshot Untuk Melakukan Backup Db PostgreSQL

Tag

,

Setelah melaksanakan proses backup menggunakan rsnapshot, terdapat database PostgreSQL yang juga  harus di backup.

Untuk itu agar lebih ringkas digunakan perintah backup_script yang terdapat di rsnapshot, sehingga proses backup PostgreSQL dapat dilaksanakan. Akan tetapi dibutuhkan beberapa setting tambahan di server.

Membuat file password di /root/.pgpass

localhost:*:db:user:pass

Kemudian tidak lupa untuk melakukan setting hak akses pada file password tersebut agar root saja yang dapat membacanya.

# chmod go-rwx /root/.pgpass

Langkah selanjutnya adalah membuat script untuk melakukan backup yang disimpan di /usr/local/bin/postgresql-backup.sh.

# nano /usr/local/bin/postgresql-backup.sh

Untuk isi script tersebut adalah:

#!/bin/bash
export PGPASS=/root/.pgpass
pg_dump -w -h localhost -U user db > postgresql-dump.sql
gzip -f postgresql-dump.sql

Jangan lupa untuk memastikan bahwa hanya root yang bisa melakukan eksekusi terhadap script ini.

# chmod u+x,o-rwx /usr/local/bin/postgresql-backup.sh

Kemudian pastikan dapat dieksekusi dengan baik.

# /usr/local/bin/postgresql-backup.sh

Langkah selanjutnya adalah menambahkan perintah pada file konfigurasi rsnapshot untuk menjalankan script ini.

# di tempat saya ditambahkan pada bagian terakhir perintah setelah
# backup file/folder yang lain
backup_script /usr/local/bin/postgresql-backup.sh data-db/

Selesai!

Sumber:

 

Cloning Partisi GPT

Tag

,

Ada kebutuhan untuk melakukan cloning terhadap partisi device dengan GPT partition structure di situ, menggunakan sfdisk bukan pilihan sehingga menggunakan sgdisk adalah jawabannya.

# sgdisk /dev/sumber -R /dev/target
# sgdisk -G /dev/target

Perintah terakhir agar GUID masing-masing struktur bisa di randomize.

Sumber:

 

Instalasi Manual mod-security Di Debian 8

Tag

,

Saat menggunakan debian 8 dan ingin menggunakan mod-security di apache2 kami mendapatkan adanya kesalahan terhadap kode rule manual yang diakibatkan versi yang tidak kompatibel di salah satu server, sehingga penggunaan paket default milik mod-security bukanlah pilihan. Oleh karena hal tersebut maka harus dilakukan proses intalasi manual terhadap mod-security yang kompatibel, di mana versi yang bisa digunakan adalah modsecurity-apache_2.6.5.

Singkat cerita setelah melakukan download terhadap source code modsecurity-apache_2.6.5 dilakukan terlebih dahulu instalasi terhadap module yang dibutuhkan.

# apt-get install apache2-dev libxml2-dev libpcre3 libpcre3-dev libcurl4-openssl-dev

Kemudian source code modsecurity di ekstrak dan mulailah dilakukan proses instalasi secara manual.

# tar -xvzf modsecurity-apache_2.6.5
# cd modsecurity-apache_2.6.5
# ./configure --with-apxs2=/usr/bin/apxs2 && make && make install

Proses sangat panjang dan apabila tidak ada pesan error maka semestinya hasil compile secara default akan ditempatkan di /usr/local/modsecurity/lib/mod_security2.so.

Agar dapat digunakan oleh apache2 terdapat beberapa proses yang harus dilakukan, yaitu membuat setting module yang kita beri nama security2 serta meloadnya di apache2.

# nano /etc/apache2/mods-available/security2.load

Isi dari file tersebut adalah seperti berikut:

LoadModule security2_module /usr/local/modsecurity/lib/mod_security2.so

Setelah itu tidak lupa proses pengaktifkan module yang baru di install ini yang dilanjutkan dengan melakukan restart pada service apache2.

# ap2enmod security2
# service apache2 restart

Referensi:

Insiasi PostgresREST

Tag

,

Setelah mendapatkan kebutuhan untuk membuat reporting sederhana terhadap data yang telah terkumpul menggunakan PostgreSQL, maka terdapat beberapa pilihan apabila aplikasi yang ingin dikembangkan berbasis Web. Salah satunya adalah penggunaan Javascript Framework yang mengakses ke PostgreSQL melalui REST API. Untuk pengembangan REST API selain menggunakan beberapa pilihan framework pengembangan, ternyata ada satu pilihan menarik menggunakan PostgresREST.

Salah satu impresi yang saya dapatkan dari ujicoba sederhana kali ini, penggunaan PostgresREST membuat pengembangan REST API lebih cepat karena kita tidak perlu lagi menuliskan kode yang repetitive untuk backend-nya. Alih-alih mengembangkan sendiri proses otorisasi dan autentifikasi, kita bisa langsung menggunakan schema dan role serta privilege yang ada di PostgreSQL.

Agar bisa menggunakan PostgresREST dibutuhkanPostgreSQL minimal versi 9.3, sehingga untuk percobaan ini saya harus melakukan proses upgrade untuk versi PostgreSQL yang digunakan di salah satu mesin server.

Sebagai informasi bawah saya memiliki sebuah database bernama mydb dengan user mydbuser dan password mydbpass serta schema yang digunakan adalah default yaitu public.

Pada kebutuhan saya nantinya user tidak perlu melakukan proses login, dengan beberapa table yang bisa diakses pada schema public tanpa melakukan login. Untuk itu saya buat role di PostgreSQL bernama web_public yang nantinya memiliki hak akses ke salah satu table bernama informasi_publik. Agar kebutuhan ini terpenuhi maka saya harus login sebagai super user ke PostgreSQL, di mana prosesnya bisa dijabarkan berikut ini:

# su - postgres
postgres $ psql
psql > \c mydb
You are now connected to database "mydb" as user "postgres".
psql > create role web_public nologin;
CREATE ROLE
epns=# grant web_public to mydb;
GRANT ROLE
epns=# grant usage on schema public to web_public;
GRANT
epns=# grant select on public.informasi_public to web_public;

Saya menggunakan Debian Jessie 64 dan memilih postgrest-0.4.2.0-ubuntu-x32.tar.xz dari https://github.com/begriffs/postgrest/releases/latest. Sebelum itu dilakukan terlebih dahulu instalasi libpq-dev yang merupakan library PostgreSQL. Adapun alasannya memilih ini, karena menggunakan pilihan yang lain tidak bisa berjalan 😦

# apt-get install libpq-dev
# wget https://github.com/begriffs/postgrest/releases/download/v0.4.2.0/postgrest-0.4.2.0-ubuntu-x32.tar.xz
# tar xfJ postgrest-0.4.2.0-ubuntu-x32.tar.xz
# ./postgrest --help

Langkah selanjutnya adalah konfigurasi terhadap koneksi ke database dan untuk ini saya buat sebuah file bernama testkonfigurasi.conf dengan isinya:

db-uri = "postgres://mydbuser:mydbpass@localhost/mydb"
db-schema = "public"
db-anon-role = "web_public"

Kemudian server PostgresREST dijalankan.

# ./postgres testkonfigurasi.conf
Listening on port 3000
Attempting to connect to the database...
Connection successful

Untuk testing diakses dengan curl

$ curl localhost:3000/informasi_public

Referensi: