Tips Mengamankan Server Linux

Saat ini banyak provider penyedia jasa (gratis) untuk website blog kita seperti wordpress.com, blogspot.com, thumblr.com, dan lain sebagainya. Bisa juga kita berlangganan web hosting yang dengan sekali klik akan menginstallkan platform blogging kita seperti Joomla ataupun WordPress. Tapi tidak ada yang lebih memuaskan daripada memiliki Virtual Private Server (VPS) sendiri. Dengan berlangganan VPS kita seolah-olah memiliki sebuah mesin sendiri di internet. Tapi dibalik itu kita berhadapan dengan sebuah tantangan tersendiri yaitu bagaimana mengatur server kita agar tidak kena hack.

Ada beberapa tips mendasar untuk mengamankan server kita:
1. Matikan akses SSH root. Buat user yang aneh namanya dan atur visudo.
Internet adalah dunia yang menakutkan. Ibarat sebuah hutan rimba, server kita terekspos 24 jam sehari, 7 hari seminggu, 365 hari setahun. Hal ini memang mau tidak mau harus terjadi sebab tujuan utama kita memiliki server di internet memang untuk memberikan pelayanan dan diakses.

Bila kita lihat di /var/log/auth.log, akan terlihat kejadian seperti di bawah ini. Seseorang sedang berusaha masuk ke server kita lewat SSH.

Nov  2 21:09:56 mars sshd[29617]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=119.188.3.56  user=root
Nov  2 21:09:58 mars sshd[29617]: Failed password for root from 119.188.3.56 port 53661 ssh2
Nov  2 21:10:02 mars sshd[29619]: Invalid user abuse from 119.188.3.56
Nov  2 21:10:02 mars sshd[29619]: pam_unix(sshd:auth): check pass; user unknown
Nov  2 21:10:02 mars sshd[29619]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=119.188.3.56 
Nov  2 21:10:04 mars sshd[29619]: Failed password for invalid user abuse from 119.188.3.56 port 55378 ssh2
Nov  2 21:10:08 mars sshd[29621]: Invalid user ac from 119.188.3.56
Nov  2 21:10:08 mars sshd[29621]: pam_unix(sshd:auth): check pass; user unknown
Nov  2 21:10:08 mars sshd[29621]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=119.188.3.56 
Nov  2 21:10:10 mars sshd[29621]: Failed password for invalid user ac from 119.188.3.56 port 56595 ssh2

Untuk mencegah hal di atas sangatlah mudah. Matikan akses root di SSH! Jangan lupa restart SSH setelah mengeditnya.
Edit /etc/ssh/sshd_config

PermitRootLogin no

Setelah itu, buatlah user untuk SSH, buat user yang namanya aneh kalau perlu seperti: pepaya123 :)
Jadikan ia group wheel (Redhat), sudo (Ubuntu)

1
2
usermod -G wheel pepaya123
usermod -G sudo pepaya123

Atur dengan command visudo, tambahkan/aktifkan baris ini:
di Ubuntu:

%sudo ALL=(ALL) ALL

di Redhat:

%wheel ALL=(ALL) ALL

Test dengan membuka sebuah terminal satu lagi dan coba login SSH ke server kita. Pastikan bahwa kita bisa login menggunakan pepaya123.
Setelah itu kita bisa menjadi root dengan cara:

sudo -i

Dengan mematikan akses root, saya bisa bilang 50% server kita sudah aman :)

2. Untuk lebih mengamankan server kita, selanjutnya kita bisa menginstall fail2ban. Utility ini akan memeriksa /var/log/auth.log atau /var/log/secure untuk melihat apakah ada yang mencoba-coba menghack server kita. Kita bisa atur setelah gagal login beberapa kali maka IP tersebut akan di block di iptables.
Ubuntu:

sudo apt-get install fail2ban

Centos:

sudo yum install fail2ban

Edit /etc/fail2ban/jail.conf

1
2
3
4
5
6
7
8
9
10
11
#Konfigurasi ini akan mengirimkan email ke root kalau ada yang coba hack dan kena ban oleh fail2ban.
action = %(action_mwl)s
 
#Konfigurasi untuk SSH. 3600 adalah lamanya (detik) IP hacker itu akan kita block.
[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 3600

Jalankan fail2ban, dan nanti bila ada hacker yang kena ban akan terlihat seperti ini di /var/log/fail2ban:

2012-11-03 12:00:46,909 fail2ban.actions: WARNING [ssh] Ban 182.140.140.6
2012-11-03 12:10:47,475 fail2ban.actions: WARNING [ssh] Unban 182.140.140.6
2012-11-04 00:00:53,286 fail2ban.actions: WARNING [ssh] Ban 64.185.229.240
2012-11-04 00:10:53,801 fail2ban.actions: WARNING [ssh] Unban 64.185.229.240

Di iptables keliatannya seperti ini:

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
DROP       all  --  58.17.36.115         0.0.0.0/0           
DROP       all  --  78.111.96.38         0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Kita juga akan menerima email:

Hi,
The IP 58.17.36.115 has just been banned by Fail2Ban after
3 attempts against ssh.
Here are more information about 58.17.36.115:

Tips lainnya adalah:
- Selalu update OS server kita.
- Selalu update CMS kita baik itu Joomla, WordPress, dll. Jangan install plugin yang aneh-aneh, install yang perlu saja. Hal ini akan memperkecil CMS kita kena hack.

Demikianlah sharing kali ini, tentu saja masih segudang tips lain untuk mengamankan server Linux kita, diharapkan dengan tips awal ini bisa dikembangkan selanjutnya. Semoga bermanfaat dan selamat memelihara server di internet dengan perasaan tenang :)
Fajar Priyanto
Seorang perantau dan pelamun di negara asing.

6 thoughts on “Tips Mengamankan Server Linux

  1. Menurut gw salah satu syarat untuk mempermudah set security server adalah menggunakan “minimal install”, terus install sendiri package yang diperlukan satu-satu. Sehingga server bisa kurus, cuma service yang perlu2 saja yg jalan.
    Jangan sampai karena nggak mau repot, malah repot belakangan :o)

  2. Meski benar secara umum mematikan root ssh login ada keuntungannya, tapi perlu diingat bahwa ini sebenarnya sekedar “security through obscurity”, yaitu praktis akses root diamankan karena penyerang tidak tahu akun mana yang akun administrator dengan ijin untuk sudo sepenuhnya (hampir selalu ada). Kalau penyerang tahu akun mana, maka dia bisa menyerang akun itu dengan metode yang sama dengan untuk root, bahkan biasanya lebih gampang karena akun ini seringkali juga dipakai seperti akun biasa (bukan web browser dll.). Kalau sampai jebol kata kuncinya, maka langsung bisa dipakai untuk akses ke root. Ini barangkali argumen mereka yang lebih suka “su” daripada “sudo” karena “su” butuh kata kunci tersendiri untuk root.

    Pengamanan yang lebih bagus barangkali hanya mengijinkan akses SSH ke root lewat “public key”, karena ini hampir tidak mungkin dijebol langsung ke server, harus dijebol di komputer pengaksesnya, dan kalau pun dapat “private key”-nya, ini juga bisa (mestinya) dilindungi kata kunci juga yang bisa cukup lama untuk menjebolnya. Jadi kemungkinan lebih besar ketahuan sebelum sempat dipakai dan kuncinya bisa diubah. Lebih ketat lagi, akses ke server dengan kata kunci dimatikan sama sekali, hanya bisa dengan “public key”. Masalahnya memang kalau mau akses dari banyak tempat yang berbeda-beda, bisa agak sulit.

    Kombinasi pengamanan dengan mematikan root login dan publik key bisa juga dilakukan, misalnya menggunakan pam_ssh_agent_auth (http://pamsshagentauth.sourceforge.net/) yang memungkinkan sudo memakai “public key”. Ini bisa lalu dipakai untuk memungkinkan orang login dengan kata kunci, lalu butuh kata kunci kedua untuk membuka “private key” untuk bisa sudo. Jadi seperti “su” tapi bisa dibuat satu kata kunci untuk tiap pemakai.

    • Panjang perdebatan antara penggunaan SU dan SUDO. Bisa berantem, bisa disimak di milis Ubuntu yang sejak awal sudah tidak menggunakan SU (root-nya inactive). Menurut hemat saya penggunaan SUDO ini memang salah satu kategori security thru obscurity, tapi lumayan juga efektivitasnya. Kira2 50% resiko kena hack udah diminimal karena hackernya bingung mesti pake akun apa utk loginnya. Apalagi kalo akunnya itu dibuat yang ga masuk akal seperti hahaha_1239999. Tentu saja passwordnya pun harus yang bagus.
      Paling mantap memang menggunakan SSH key. Amazon Web Service tidak menggunakan password sama sekali dan hanya menggunakan SSH key. Bahkan kalo sudah login, di dalam AWS kita ga ditanya password lagi untuk jadi root. Begitu yakinnya dengan SSH key ini. Apalagi di kombinasikan lagi dengan SSH key paraphrase seperti yang Mas Arif usulkan. Double sekuriti mantap. Trims Mas.

  3. Satu ciri fail2ban adalah kerjanya bergantung pada penafsiran log pada waktu-waktu tertentu. Meski ini berarti fail2ban bisa lebih luwes dan “pintar”, ini juga berarti ada tanggapan fail2ban bisa tertunda dan fail2ban bisa tertipu oleh berkas log yang rusak atau dimanipulasi. Ingat bahwa peranti penulis log yang umum tidak didesain dengan asumsi berkas log akan dipakai untuk mengontrol mekanisme pengamanan otomatis. Ingat juga bahwa dalam beberapa menit antara pembacaan berkas log, ratusan bahkan ribuan percobaan untuk login bisa dilakukan.

    Menurut saya ada baiknya penggunaan perangkat lunak “tingkat tinggi” seperti fail2ban paling sedikit diimbangkan dengan penggunakan perangkat yang lebih langsung berhubungan dengan login. Kalau di Linux ini barangkali modul PAM. misalnya pam_abl, pam_tally, atau pam_shield.

    • Trims Mas Arif, iya fail2ban memang salah satu “cara gampang” untuk mengamankan Linux. Tapi lumayan efektif juga kerjanya, dia real-time kok kerjanya, tapi memang patokannya adalah file log. Rata2 dalam sehari ada 3-4 IP yang kena block oleh fail2ban di arinet ini. Yang lebih efektif lagi seperti Mas Arif bilang bisa menggunakan PAM module itu.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>