Letsencrypt di Debian Jessy Menggunakan acme.sh

Tag

,

Salah satu server sudah sampai pada masa harus dilakukan upgrade, namun karena suatu dan lain hal tidak dapat dilakukan. Dilain pihak, certbot, aplikasi yang digunakan untuk melakukan manajemen SSL gratis dari Letsencrypt tidak dapat di-upgrade lagi. Perlu adanya alternative, selain tentu saja bahwa certbot tersebut menggunakan pyhton dan dependencies yang sangat banyak dan tidak dapat lagi dihandle oleh sistem saat ini.

Kami memilih acme.sh ( https://github.com/acmesh-official/acme.sh ), merupakan program shell tanpa dependencies lain selain script yang digunakannya menggunakan shell script.

Untuk melakukan instalasi sangat mudah, kami memilih menggunakan git yang telah terinstall di sistem, di mana instalasi menggunakan user root.

# cd /root/
# git clone https://github.com/acmesh-official/acme.sh.git
# cd ./acme.sh
# ./acme.sh --install

Kemudian kami memilih untuk melakukan instalasi langsung menggunakan nginx pada salah satu domain.

# acme.sh --issue --nginx -d website-kami.ac.id

Pada awalnya terjadi error karena di konfigurasi yang ada kami melakukan redirect 301 ke website https terhadap akses ke website menggunakan http. Sehingga perintah redirect sebelumnya di non-aktifkan terlebih dahulu dan proses bisa berjalan dengan lancar setelahnya.

Setelah berhasil kami buat tempat kami akan menyimpan SSL keys-nya, dilanjutkan dengan perintah untuk melakukan copy menggunakan acme.sh.

# mkdir /root/ssl-websitekami/
#  acme.sh --install-cert -d website-kami.ac.id \
> --key-file /root/ssl-websitekami/key.pem \
> --fullchain-file /root/ssl-websitekami/cert.pem \
> --reloadcmd "service nginx force-reload"
[Fri Apr  3 13:17:57 WIB 2020] Installing key to:/root/ssl-websitekami/key.pem
[Fri Apr  3 13:17:57 WIB 2020] Installing full chain to:/root/ssl-websitekami/cert.pem
[Fri Apr  3 13:17:57 WIB 2020] Run reload cmd: service nginx force-reload
[Fri Apr  3 13:17:58 WIB 2020] Reload success

Tentu saja belum berjalan karena kami lupa untuk menambahkan setting di konfigurasi nginx, di mana tempat SSL key yang baru.

 ssl_certificate /root/ssl-websitekami/cert.pem;
 ssl_certificate_key /root/ssl-websitekami/key.pem;

Langkah selanjutnya adalah melakukan reload dan proses selesai.

# service nginx force-reload

Referensi: https://github.com/acmesh-official/acme.sh

Gagal Melakukan Setting SSHD Saat Melakukan Upgrade System

Saat melakukan upgrade system menggunakan apt-get upgrade, terdapat error yang menyebabkan tidak dapat melakukan proses sampai tuntas. Muncul error kurang lebih:

Mar 09 08:14:46 setda sshd[35706]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Mar 09 08:14:46 setda sshd[35706]: error: Bind to port 22 on :: failed: Address already in use.
Mar 09 08:14:46 setda sshd[35706]: fatal: Cannot bind any address.
Mar 09 08:14:46 setda systemd[1]: ssh.service: Main process exited, code=exited, status=255/n/a
Mar 09 08:14:46 setda systemd[1]: Failed to start OpenBSD Secure Shell server.
-

Berdasarkan pembahasan di sini, hal tersebut diakibatkan karena systemd tidak dapat mengenali proses milik service ssh. Untuk itu, supaya bisa melanjutkan proses, service utama ssh harus dimatikan secara manual dan setelahnya, service dijalankan kembali secara manual.

# ps axf | grep sshd
  298 ?        Ss     0:00 /usr/sbin/sshd
 3201 ?        Ss     0:00  \_ sshd: setdakalteng [priv]
 3231 ?        S      0:00      \_ sshd: setdakalteng@pts/2
35744 pts/2    S+     0:00                      \_ grep --color=auto sshd
# kill -9 298
# systemctl start sshd

Pada perintah di atas, 298 adalah yang dimatikan secara manual. Setelah itu proses upgrade bisa dijalankan kembali.

Pada Vestacp – DNS Query Tidak Jalan

Tag

Di salah satu server yang di-maintenance, terdapat instalasi vestacp. Pengalaman pertama menggunakan panel ini, proses instalasi awal sangat mudah dan membuat kita bisa langsung mengerjakan bagian utama, instalasi aplikasi, tanpa harus melakukan setting dari awal lagi. Sangat membantu khususnya bagi system admin yang harus menyediakan lingkungan pengembangan aplikasi berbasis LAMP (Linux Apache Mysql dan PHP).

Akan tetapi, pada beberapa instalasi yang tidak melakukan instalasi DNS Server, terjadi permasalahan di mana setelah vestacp berjalan beberapa lama, query terhadap DNS tidak berjalan. Salah satu bagian yang meresahkan karena kita tidak bisa melakukan update / upgrade sistem akibat query DNS tidak berjalan. Salah satu testing dengan melakukan ping ke alamat domain (misalnya ping google.com) tidak berjalan karena sistem tidak bisa mengirimkan query untuk mendapatkan IP dari domain.

Saat diperiksa pada setting panel untuk firewall menggunakan IPTable, suatu hal yang membingungkan karena selama ini menggunakan bantuan tool Shorewall, menunjukkan bahwa port untuk DNS telah terbuka, akan tetapi untuk arah dari mesin ke luar, outbound, tidak dapat berjalan. Akibatnya, kita harus melakukan custom sendiri.

Salah satu solusinya adalah membuat file di /usr/local/vesta/data/firewall dengan nama custom.sh.

# nano /usr/local/vesta/data/firewall/custom.sh

Isi dari file tersebut adalah:

#!/bin/bash
IPT="/sbin/iptables"

# Your DNS servers you use: cat /etc/resolv.conf
DNS_SERVER=$(cat /etc/resolv.conf  | grep -v '^#' | grep nameserver | awk '{print $2}')

for ip in $DNS_SERVER
do
        echo "Allowing DNS lookups (tcp, udp port 53) to server '$ip'"
        $IPT -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $IPT -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
        $IPT -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $IPT -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
done

Program di atas akan mengambil IP dns server default yang tertuang pada /etc/resolv.conf, kemudian membuat aturan custom menggunakan IP Tables untuk query ke DNS Server luar.

Langkah berikutnya adalah memberikan akses eksekusi dan melakukan restart pada service iptables.

# chmod +x /usr/local/vesta/data/firewall/custom.sh
# service iptables restart

Barulah proses query DNS bisa berjalan dengan lancar.

Sumber:

Upgrade mariadb Debian 9

Tag

,

Secara default mariadb yang di-install pada debian 9 adalah versi 10.1, pada beberapa project karena keterbatasan besar nilai index pada field dengan tipe varchar, menyebabkan salah satu solusi adalah melakukan upgrade ke versi mariadb di atas versi 10.2.2.

Untuk itu satu-satunya cara (paling tidak setahu saya) adalah melakukan upgrade langsung dari repo mariadb, tidak menggunakan repo default Debian 9.

Langkah Pertama tambahkan repo dan kunci digital.

# apt install software-properties-common dirmngr
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.nodesdirect.com/mariadb/repo/10.4/debian stretch main'

Langkah Kedua adalah update package di Debian 9, serta lakukan instalasi. Namun tentu saja, adalah langkah bijak untuk segera melakukan backup terhadap data yang ada di server sebelum melaksanakan instalasi.

# apt-get update
# apt-get install mariadb-server

Apabila proses telah selesai, maka yang ter-install adalah mariadb versi 10.4.

# mysql --version
mysql  Ver 15.1 Distrib 10.4.8-MariaDB, for debian-linux-gnu (i686) using readline 5.2

Referensi:

https://linuxize.com/post/how-to-install-mariadb-on-debian-9/

Menggunakan Utility du dan sort Untuk Investigasi Root Hampir Penuh

Tag

,

Pada salah satu server partisi root hampir penuh, maka dibutuhkan investigasi terhadap folder mana saja yang menyebabkan partisi untuk root ini penuh.

Salah satu yang bisa dipakai adalah utility du, di mana utility ini telah tersedia pada distro standar Linux, digunakan untuk melakukan estimasi terhadap penggunaan space oleh file yang ada di sistem.

Berikut adalah kondisi saat ini pada salah satu server yang dijadikan sebagai contoh; perintah df saya gunakan untuk mendapatkan prosentasi penggunaan space di masing-masing partisi, di mana bila diperhatikan partisi root tersebut sudah hampir mencapai 90% sebagaimana hasil perintah pada cuplikan di bawah ini.

root@uluhitahkia:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       9.1G  7.5G  1.1G  88% /
/dev/sdb1       917G  557G  314G  64% /data
/dev/sda4       525G  204G  294G  41% /home
--- hasil yang lainnya ---

Di server saya memisahkan partisi untuk data dan home serta root, sehingga apabila saya ingin melakukan investigasi terhadap bagian mana dari folder system di root yang memiliki ukuran paling besar, saya harus menentukan terlebih dahulu nama-nama foldernya yang berada pada partisi root. Di server yang saya gunakan saya menentukan bahwa folder yang saya akan periksa adalah opt var lib edise usr tmp lib64 etc.

Untuk memeriksanya saya menjalankan perintah du sebagai root agar tidak terkena masalah hak akses pada folder sistem serta menuliskan nama-nama folder secara terpisah sebagai parameternya. Kemudian karena saya hanya ingin mengetahui nilai totalnya saja dari masing-masing folder yang ada di root, maka saya tambahkan parameter s (summary) dan h untuk tampilan ukuran yang mudah dipahami serta c untuk menampilkan totalnya, sebagaimana yang ditampilkan pada perintah di bawah ini.

root@uluhitahkia:/# du -shc opt var lib edise usr tmp lib64 etc
409M    opt
2.2G    var
403M    lib
0       edise
4.4G    usr
27M     tmp
4.0K    lib64
8.1M    etc
7.4G    total

Bisa terlihat bahwa folder usr memiliki nilai yang paling besar. Agar lebih memudahkan maka saya akan melakukan sorting terhadap tampilannya sehingga memudahkan proses analisa menggunakan perintah sort.

root@uluhitahkia:/# du -shc opt var lib edise usr tmp lib64 etc | sort -hr
7.4G    total
4.4G    usr
2.2G    var
409M    opt
403M    lib
27M     tmp
8.1M    etc
4.0K    lib64
0       edise

Demikian dan proses investigasi lanjut bisa dilakukan ke dalam masing-masing folder.

Sumber:

Shorewall Di Stretch Tidak Otomatis Berjalan Setelah Sistem Restart

Tag

,

Saat melakukan pemeriksaan pada log status fail2ban, terdapat notice bahwa fail2ban telah melakukan ban pada IP yang melakukan brute force pada port SSH di server. Log tersebut seperti yang terlihat di bawah ini:

2018-12-18 10:17:02,644 fail2ban.actions        [1061]: NOTICE  [sshd] 58.242.83.18X already banned
2018-12-18 10:17:03,522 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:04,048 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:06,178 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:06,223 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:08,612 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:08,643 fail2ban.filter         [1061]: INFO    [sshd] Found 58.242.83.18X
2018-12-18 10:17:08,651 fail2ban.actions        [1061]: NOTICE  [sshd] 58.242.83.18X already banned

Terlihat bahwa semestinya IP 58.242.83.18X tersebut harusnya setelah di ban, tidak akan kembali melakukan proses koneksi, namun ternyata koneksinya tidak di banned! Karena untuk iptables saya menggunakan shorewall sebagai managemennya, saat dilakukan proses banned pada IP yang bermasalah, bila saya check di shorewall, harusnya akan terlihat IP apa saja yang di banned. Namun muncul error saat dijalankan perintah:

# shorewall show dynamic
   ERROR: Chain 'dynamic' is not recognized by /sbin/iptables.

Saat dijalankan perintah untuk menampilkan status shorewall ditemukan permasalahannya, shorewall tidak berjalan!

# shorewall status
Shorewall-5.0.15.6 Status at apuy-kambe - Tue Dec 18 10:20:19 WIB 2018

Shorewall is stopped
State:Started Fri Nov 16 10:44:49 WIB 2018 from /etc/shorewall/ (/var/lib/shorew                                                           all/firewall compiled Fri Nov 16 10:44:48 WIB 2018 by Shorewall version 5.0.15.6                                                           )

Ternyata setelah server hidup kembali akibat mati listrik di lokasi server berada, didapatkan informasi shorewall tidak berjalan otomatis di Debian Stretch, walaupun telah melakukan setting startup=1 di /etc/default/shorewall. Perlu dilakukan perintah untuk menambahkan shorewall sebagai service yang berjalan otomatis saat sistem berjalan pertamakalinya.

# systemctl enable shorewall
Synchronizing state of shorewall.service with SysV service script with /lib/syst                                                           emd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable shorewall
insserv: warning: current stop runlevel(s) (0 6) of script `shorewall' overrides                                                            LSB defaults (0 1 6).
insserv: warning: current stop runlevel(s) (0 6) of script `shorewall' overrides                                                            LSB defaults (0 1 6).

Setelah itu shorewall dijalankan.

# shorewall start
Compiling using Shorewall 5.0.15.6...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Compiling /etc/shorewall/zones...
Compiling /etc/shorewall/interfaces...
..

Kemudian fail2ban di restart.

# service fail2ban restart

Lalu saat di check kembali pada log, barulah fail2ban dapat berjalan dengan normal dan IP tersebut sukses di banned.

Sumber:

Screen: Alat Remote Bermanfaat

Tag

Suatu saat saya pernah login untuk melakukan serangkaian kegiatan administrasi di server remote, akan tetapi belum selesai salah satu proses selesai, koneksi SSH saya terputus dan demikian pula dengan proses yang sedang dijalankan. Akibatnya fatal, saya harus melakukan serangkaian langkah tersebut dari awal lagi. Hal tersebut sebelum saya mengenal screen.

Menggunakan screen saya dapat membuat beberapa virtual terminal, di mana virtual terminal ini akan tetap ada dan terus berjalan, walaupun saya kehilangan koneksi ke mesin server yang sedang saya remote.

Untuk melakukan instalasi apabila belum terinstall:

# apt-get install screen

Langkah selanjutnya apabila ini adalah sesi pertama saya tinggal jalankan perintah

# screen

Untuk keluar dari sesi virtual saat itu tinggal di tekan tombol ctrl-a-d (tekan tombol Control lanjut tombol a dan lanjut tombol d).

Untuk menampilkan daftar sesi screen yang sedang berjalan tinggal ketikkan:

# screen -ls
There is a screen on:
        25167.pts-0.uluhitahkia (12/17/2018 09:54:19 AM)        (Detached)
1 Socket in /run/screen/S-root.

Untuk masuk ke dalam salah satu sesi screen tinggal lakukan perintah:

# screen -r 25167

Perintah screen -r <kode_id> sebagaimana yang ditayangkan di atas, maka kita akan masuk ke dalam sesi pada terminal screen yang kita jalankan sebelumnya.

Apabila kita ingin menghentikan sesi saat itu, benar-benar menghentikannya , maka kita tekan tombol ctrl-a dan dilanjutkan pengetikan :quit.

Referensi:

Upgrade Postgresql 9.6 Ke 10 Pada Debian Stretch

Tag

Persyaratan salah satu proses upgrade di sistem kami adalah penggunaan Postgresql 10. Saat ini, yang digunakan adalah postgresql versi 9.6. Untuk itu, dibutuhkan upgrade ke versi 10.

Sebelumnya setelah berhasil melakukan upgrade pada Sistem Operasi yang kami gunakan, dari Debian Jessie ke Debian Stretch, juga telah melakukan terlebih dahulu proses upgrade dari Postgresql 9.1 ke Postgresql 9.4, dilanjutkan ke Postgresql 9.6.

Agar bisa dilaksanakan pada langkah sebelumnya telah dilakukan proses penambahan repository milik postgresql, dengan menambahkan file di /etc/apt/sources.list.d/pgdg.list berisi perintah sebagai berikut:

deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Kemudian langkah yang dilakukan selanjutnya adalah menambahkan kunci digital milik repository, dilanjutkan perintah update paket sebagaimana perintah di bawah (diketikkan pada satu baris).

# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# sudo apt-get update

Kemudian dilanjutkan dengan melakukan instalasi postgresql 10.

# apt-get install postgresql-10

Bila telah terinstal, bila dijalankan perintah pg_listcluster, cluster dari postgresql 10 berada pada posisi hidup berdampingan dengan versi 9.6. Untuk melanjutkan proses upgrade cluster 10 harus dimatikan lebih dahulu.

# pg_dropcluster 10 main --stop

Setelah itu dilanjutkan dengan melakukan proses upgrade terhadap cluster yang digunakan saat ini yaitu 9.6.

# pg_upgradecluster 9.6 main

Pada proses upgrade ini akan berlangsung proses upgrade serta beberapa otomatisasi lainnya, di mana lamanya proses bergantung dari besarnya data yang ada. Setelah berhasil maka bila dilakukan perintah pg_lscluster akan terlihat bahwa cluster 9.6 mati dan 10 hidup.

# pg_lscluster
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5433 down   postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5434 down   postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
10  main    5432 online postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log

Di tempat saya karena cluster dari versi sebelumnya tidak dihapus, masih terlihat status 9.4 dan 9.6 ada. Kemudian aplikasi di test dan apabila telah berhasil serta tidak ada yang bermasalah kita tinggal melakukan drop pada cluster yang lain.

# pg_dropcluster 9.6 main

Referensi:

fail2ban Bermasalah Setelah Upgrade Debian 8 Ke Debian 9

Tag

Aplikasi fail2ban merupakan aplikasi yang sangat berguna sangat ingin melakukan langkah pengamanan terhadap sistem.

Setelah melakukan upgrade ke Debian 9 fail2ban menolak untuk berjalan sebagaimana mestinya. Untuk ini saya tinggal lakukan proses uninstall dan install ulang 😀

# apt-get --purge remove fail2ban
# apt-get install fail2ban

Referensi:

Shorewall Bermasalah Setelah Upgrade Ke Debian 9

Tag

Setelah melakukan upgrade dari Debian 8 (Jessie) ke Debian9 (Stretch), pada saat proses upgrade terdapat pemberitahuan untuk melakukan perubahan pada konfigurasi Shorewall di /etc/shorewall/shorewall.conf.

Secara default proses upgrade terhadap konfigurasi, sistem memilih untuk tidak melakukan penimpaan terhadap konfigurasi yang sudah ada, saya pun memilih untuk opsi default. Akan tetapi pada proses ini ternyata terdapat perubahan pada konfigurasi shorewall yang mengharuskan untuk melakukan update terhadap konfigurasinya.

Untuk proses update tinggal menjalankan perintah:

# shorewall update

Dilanjutkan dengan check terhadap konfigurasi, dilanjutkan dengan proses untuk menjalankan service.

# shorewall check
# shorewall start