Tips Mengamankan Server atau VPS Linux

Server atau VPS yang kita gunakan untuk menghosting website kita terkoneksi dengan Internet, siapa saja dapat mengaksesnya. Untuk melindungi dari akses tangan-tangan jahil, kita perlu mengamankan server atau VPS tersebut. Kita akan memasang firewall, SSH key pair authentication dan sistem blokir otomatis yang disebut dengan fail2ban. Diharapkan dengan langkah-langkah tersebut dibawah ini, server atau VPS kita bisa mampu terlindungi dari serangan pihak yang tidak bertanggungjawab.

Login Non Root

root adalah user yang sangat powerful di mesin Linux. Tapi masalah muncul apabila login sebagai root ialah kita dapat mengeksekusi semua perintah, baik perintah yang standar maupun perintah yang bisa menghancurkan server kita! Oleh sebab itu, ada baiknya kita tidak login ke server atau VPS menggunakan root, yakni dengan membuat user lain dan menggunakannya disaat kita bekerja pada server atau VPS. Walaupun login dengan user non-root, kita masih bisa mengeksekusi perintah root dengan menggunakan sudo.

Berikut cara membuat user baru non root:

  1. Login seperti biasa menggunakan root ke server atau VPS.
  2. Install program sudo dulu jika belum ada dengan perintah berikut:
    apt-get install sudo
  3. Buat user baru dengan perintah seperti berikut. Ganti user_baru dengan nama user yang kita inginkan:
    adduser user_baru
  4. Tambahkan user_baru ke grup administrator sistem (admin) dengan menggunakan perintah berikut. Ganti user_baru dengan user yang tadi kita buat:
    usermod -a -G sudo user_baru
  5. Kemudian kita keluar dari root agar bisa masuk dengan user yang baru kita buat, dengan perintah:
    logout
  6. Sekarang kita coba login lagi ke server atau VPS kita dengan user baru.

 

Sekarang anda bisa mengelola server dengan menggunakan nama user yang barusan anda buat, tanpa harus sebagai root. Jika anda ingin mengeksekusi perintah superuser (sebagai root), anda bisa menambahkan sudo didepan perintah tsb. Sebagai contoh jika anda ingin mengupdate server, gunakan perintah sudo apt-get update. Hampir semua perintah superuser bisa dieksekusi dengan menggunakan sudo, dan semua perintah yang dieksekusi dengan sudo akan di catat /var/log/auth.log.

Non Aktifkan Root Login & Ubah Port SSH

Karena kita sudah membuat user baru untuk login SSH dengan kemampuan sudo, ada baiknya kita non aktifkan root login & mengganti default port SSH. Ini untuk meningkatkan keamanan dan meminimalisir serangan.

  1. Langkah pertama adalah dengan memperbarui file konfigurasi SSH dengan menggunakan perintah berikut:
    sudo nano /etc/ssh/sshd_config
  2. Ubah PermitRootLogin ke noseperti nampak berikut ini:
    PermitRootLogin no
  3. Ganti port SSH dari 22 ke port lain, semisal 3342. Cari konfigurasi port 22 dan ganti dengan port sesuai keinginan anda.
    Port 3342
  4. Simpan konfigurasi yang sudah kita ubah dengan menekan tombol keyboard Ctrl-X, dan kemudian Y.
  5. Restart SSH dengan menggunakan perintah berikut:
    sudo service ssh restart

    Setelah SSH di restart, konfigurasi baru akan dipakai oleh SSH.

Membuat Firewall

Selanjutnya kita akan membuat firewall untuk membatasi atau memblokir trafik inbound yang tidak diinginkan. Konfigurasi firewall berikut ini adalah contoh sederhana, yakni hanya membuka port 80 (http), 443 (https) dan 3342 (port SSH yang sebelumnya kita ganti dari port default 22). Anda bisa bebas mengubah konfigurasi sesuai dengan kebutuhan server.

  1. Periksa dulu konfigurasi firewall saat ini dengan menggunakan perintah:
    sudo iptables -L
  2. Lihat outputnya. Jika sebelumnya anda belum pernah mengedit firewall, maka akan melihat empty ruleset, 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
  3. Buat sebuah file untuk menyimpan konfigurasi firewall kita, dengan perintah:
    sudo nano /etc/iptables.firewall.rules
  4. Sekarang kita masukkan beberapa firewall rules ke file iptables.firewall.rules yang anda buat diatas.
  5. Simpan konfigurasi diatas dengan menekan tombol Ctrl-X, dan kemudian Y.
  6. Aktifkan firewalldengan menjalankan perintah berikut:
    sudo iptables-restore < /etc/iptables.firewall.rules
  7. Cek ulang konfigurasi firewallkita dengan perintah:
    sudo iptables -L
  8. Periksa outputnya. Ruleset yang baru akan nampak seperti berikut:
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    REJECT     all  --  anywhere             127.0.0.0/8         reject-with icmp-port-unreachable
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
    ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
    LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
  9. Untuk memastikan konfigurasi firewall kita berjalan pada saat server di restart, kita harus membuat script baru dengan perintah:
    sudo nano /etc/network/if-pre-up.d/firewall
  10. Salin dan masukkan baris berikut:
    #!/bin/sh
    /sbin/iptables-restore < /etc/iptables.firewall.rules
  11. Tekan Ctrl-X dan kemudian Y untuk menyimpan script.
  12. Chmod script kita dengan perintah:
    sudo chmod +x /etc/network/if-pre-up.d/firewall

    Firewall sudah terinstal, dan akan melindungi server kita. Ingat, anda harus mengubah konfigurasi diatas jika menginstall software baru. Semisal jika anda menginstall layanan DNS, maka anda harus membuka port 53.

Instal Fail2Ban

Fail2Ban adalah aplikasi yang akan mendeteksi percobaan login secara berulang-ulang ke server kita, Fail2Ban akan membuat rule firewall sementara untuk memblokir alamat IP si penyerang server kita. Fail2Ban dapat memonitor bermacam protokol, seperti SSH, HTTP dan SMTP. Tetapi secara default, Fail2Ban hanya memonitor SSH saja.

Berikut adalah cara menginstal Fail2Ban:

  1. Instal Fail2Ban dengan menggunakan perintah:
    sudo apt-get install fail2ban
  2. Secara default Fail2Ban akan memproteksi SSH setelah diinstal, tidak perlu langkah lainnya. Tetapi jika anda mengubah konfigurasi default dari Fail2Ban, anda dapat membuat file jail.localbaru. Dengan perintah berikut:
    sudo nano /etc/fail2ban/jail.local
  3. Set variabel bantime untuk mengatur berapa lama blokir diterapkan (dalam detik).
  4. Set variabel maxretry untuk mengatur batasan berapa kali percobaan login yang bisa dilakukan sebelum alamat IP diblokir.
  5. Tekan tombol Ctrl-X dan kemudian Y untuk menyimpan konfigurasi.

Fail2Ban sekarang akan memonitor SSH server kita. Jika ada yang mencoba login ke server kita, hingga bebera kali percobaan gagal login, Fail2Ban akan memblokir alamt IP si penyerang dan akan mencatatnya di /var/log/fail2ban.log.

Instal (D)DoS Deflate

(D)DoS Deflate adalah bash shell script ringan yang didesain untuk membantu proses pemblokiran serangan DoS (Denial of Service).

Proses instalasinya sangat mudah, berikut langkahnya:

  1. Download script (D)DoS Deflate dengan perintah:
    wget http://www.inetbase.com/scripts/ddos/install.sh
  2. Kemudian chmod script instalasinya dengan perintah:
    chmod 0700 install.sh
  3. Jalankan script instalasinya
    ./install.sh
  4. Untuk keluar dari tampilan readme, ketikkan perintah
    :q

Selesai! Server anda sudah terproteksi dari serangan Denial of Service dengan menggunakan (D)Dos Deflate!

Comments 15

  1. Pingback: Cara Mudah Instal Linux Apache MySQL PHP (LAMP) di Debian/Ubuntu

  2. Saran gan, pada bagian …firewall rules ke file iptables.firewall.rules (yg pake pastebin) itu line 2,6,9,12,16, dst terdeteksi spasi sehingga perintah sudo iptables-restore < /etc/iptables.firewall.rules tidak mau berjalan.

    Lalu pada fail2ban bagian jail.local mungkin sebaiknya diberi contoh bagaimana penulisannya, misal apakah maxretry : 2 atau maxretry = 2

    dan pada Instal (D)DoS Deflate mungkin ada baiknya ditambahi nomor 4, tekan tombol q untuk keluar ;)

    1. Untuk firewall rules jika terbaca spasi, mungkin agan coba copy paste lewat “Download Raw” pastebin. Karena saya sudah coba tidak ada masalah.

      Untuk lebih lanjut konfigurasi jail.local bisa dibaca langsung didokumentasi Fail2ban di http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options. Untuk contoh maxretry, yang benar adalah “maxretry = 2”.

      Perintah quit (q) memang sengaja tidak saya masukkan gan, karena itu kan perintah default pada vim. Tapi oke lah, biar yang belum tahu nggak bingung, sudah saya tambahkan di tutorial ini. Thanks gan atas sarannya. :)

  3. Halo gan, jumpa lagi :D
    Gini gan, ane punya masalah, ane kok sering ga bisa login ke SSH vps ane ya? Padahal ane sudah hapus iptables dan fail2ban. Tapi tetep saja ane kena lock. Gejalanya: ane awalnya bisa login, lalu beberapa jam kemudian, ane ga bisa login… agar bisa login, ane harus mereboot vps ane. Apakah agan pernah mengalami hal yg sama? vps ane 128 MB di ramnode. Thanks

    1. Coba cek error lognya gan. Ketika sudah reboot vpsnya, jalankan perintah “tail -f /var/log/messages” utk melihat error terkahir yang muncul. Biar pasti tahu errornya dimana.

      1. hasilnya ini gan:
        Jan 19 05:39:24 hostname — MARK —
        Jan 19 05:59:24 hostname — MARK —
        Jan 19 06:19:24 hostname — MARK —
        Jan 19 06:39:24 hostname — MARK —
        Jan 19 06:59:24 hostname — MARK —
        Jan 19 07:19:24 hostname — MARK —
        Jan 19 07:39:24 hostname — MARK —
        Jan 19 07:59:24 hostname — MARK —
        Jan 19 08:19:24 hostname — MARK —
        Jan 19 08:39:24 hostname — MARK —

        btw itu ane ga reboot gan, ane pake bitvise paksa login terus, setelah beberapa retry langsung masuk. ane cek di soluslab control panel, memorynya ternyata merah 91%, apa karena memory ane penuh, trus ga bisa loading ssh ya gan?

  4. Hati-hati dengan iptables, untuk belajar sebaiknya menggunaan VPS yg masih belum diapa-apain. Salah sedikit bisa lock permanen. Kasih peringatan pada yg masih belajar Min, kasihan kalau harus rebuild gara-gara salah iptables

  5. trus gan klow sudah kena ddos bagaimana cara mengatasinya di VPS kita ?? bagus tulisannya tentang tutor VPS gan saya baru mau belajar instalasi VPS Linux Debian 7…
    Mantap tulisannya….

  6. Pingback: EasyEngine, Cara Mudah Instal Nginx, MySQL, PHP dan Wordpress

Leave a Reply

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