Mengamankan Server Linux

Mengamankan server dari serangan “Usil” kadang merupakan tugas yang tidak mudah. Pada artikel ini saya menuliskan beberapa hal yang selalu saya lakukan untuk “meningkatkan” keamanan server linux yang biasa saya manage. 

1. Install Package yang Hanya Digunakan

Server sebaiknya hanya menjalankan service yang benar – benar dibutuhkan, membiarkan service tak-berguna hanya akan membuang resource memory dan cpu. 

Jika ada package yang tidak digunakan sebaiknya segera hapus, selain akan menghemat resource, package yang tak berguna tersebut kadang luput dari perhatian sehingga kemungkinan tidak pernah di-update dan menimbulkan masalah dikemudian hari.

2. Mengamankan Akses SSH

SSH merupakan salah satu jalan masuk untuk melakukan perubahan pada server. Mengamankan akses ssh merupakan hal wajib bagi saya, beberapa cara yang biasa saya lakukan adalah:

Menggunakan SSH Keys/Public Key

SSH Keys adalah sepasang kunci kriptografi yang dapat digunakan untuk login/autentikasi ke ssh server, ini merupakan cara lain untuk login selain menggunakan password biasa. 

Public key yang dibuat didaftarkan pada ssh server, sedangkan Private Key nya di simpan/digunakan di sisi User. Silahkan baca post saya Login SSH Tanpa Password dengan SSH Key untuk cara konfigurasi.

Mengganti Port SSH

Secara default ssh berada di port 22, banyak bot yang melakukan brute-force ke port 22 ini, mereka tidak akan berhenti mencoba karena mereka adalah mesin yang bekerja untuk itu. Untuk mengatasi hal ini saya biasanya mengganti port default ssh ke port lain yang tidak umum.

buka configurasi sshd

nano /etc/ssh/sshd_config

ganti portnya kemudian restart service ssh

service sshd restart

Mematikan SSH untuk root

Sebelum mematikan akses ssh untuk root pastikan anda telah membuat akun yang memiliki akses sudo untuk menjadi root.

buatlah sebuah userbaru

adduser kadekjayak

kemudian tambahkan user tersebut ke dalam group sudo

usermod -aG sudo kadekjayak

cobalah login ssh dengan user yang baru dibuat tersebut, kemudian ketik perintah:

sudo su

jika berhasil menjadi root, maka selanjutnya matikan konfigurasi root login pada sshd

nano /etc/ssh/sshd_config

Kemudian cari baris PermitRootLogin dan ubah value menjadi no

PermitRootLogin no

restart ssh server

service sshd restart

3. Firewall

Firewall dapat mengendalikan atau membatasi port apa saja yang dapat ter-expose di jaringan. Jika menggunakan iptables saya biasanya melakukan DROP di chain INPUT dan hanya mengizinkan akses ke service – service yang digunakan. 

secara default linux mengizinkan semua akses ke server kita, untuk mengetahuinya rule apa saja yang aktif gunakan perintah dibawah ini:

iptables -t filter -L

Outputnya kurang lebih seperti dibawah ini

Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

hasil output diatas menunjukkan bahwa, semua trafik diizinkan atau server anda “Telanjang” tanpa pengamanan. Untuk cara konfigurasi silahkan baca post Konfigurasi Firewall Menggunakan Iptables pada Ubuntu

4. Pasang fail2ban

Fail2ban dapat menambahkan rule otomatis ke firewall untuk memblok IP Address yang gagal login. selain untuk ssh, fail2ban juga dapat melakukan pengecekan pada file log dovecot dan apache.

Install Fail2Ban

apt-get install fail2ban

Fail2ban pada debian secara default telah aktif untuk mengawasi service SSH, namun anda tetap dapat melakukan konfigurasi jika dirasa perlu.
buat sebuah file konfigurasi baru:

nano /etc/fail2ban/jail.local

Tambahkan konfigurasi sesuai selera, contohnya seperti dibawah:

[sshd]
enabled = true
port = 22
protocol = tcp
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 600

kemudian simpan dan restart fail2ban

service fail2ban restart

untuk filter yang lain anda dapat melihatnya di folder /etc/fail2ban/filter.d/

5. Run as Root

Perilaku buruk yang biasanya terbawa oleh pemakai XAMPP adalah memasang password database root di aplikasi web mereka. Jika website tersebut berhasil dibobol, maka habis lah sudah seluruh databasenya.
Perintah mysql_secure_installation jika menggunakan mysql-server adalah wajib dijalankan setelah diinstall.

Setiap aplikasi web seharusnya dibuatkan user database terpisah yang bukan root. Jika pada satu server terpasang lebih dari satu website, maka sebaiknya user database di tiap website tersebut berbeda – beda. Selain memudahkan analisa beban dan pembatasan resource, hal ini juga dimaksudkan untuk meng-isolasi agar aplikasi tersebut tidak mengakses database tetangganya. Bayangkan kalau seseorang login ke phpmyadmin sebagai root, kemudian mau ngedrop database, tapi ternyata yang ter-drop database tetangganya, Repot kan…, ini pernah terjadi ke salah satu rekan saya, beruntung ada backup.

Hal ini juga berlaku pada service – service lainnya yang berhubungan langsung ke jaringan publik, menjalankan aplikasi/service sebagai root user sangat di-Haram-kan!

Seorang Web Developer di Denpasar Bali. Nulis blog hanya sekedar iseng dan berbagi pengalaman.

Eksplorasi konten lain dari Kadek Jayak

Langganan sekarang agar bisa terus membaca dan mendapatkan akses ke semua arsip.

Lanjutkan membaca