Konfigurasi Awal Untuk Mengamankan Server Baru
Tags: server, configure
Published: 2021-01-17 04:58:57

[Server](https://en.wikipedia.org/wiki/Server_(computing)) atau dalam bahasa Indonesia disebut [Peladen](https://id.wikipedia.org/wiki/Peladen) merupakan perangkat atau program komputer yang menyediakan layanan untuk program atau perangkat lain yang biasa disebut klien. Server dapat dibedakan berdasarkan jenisnya sebagai database server, file server, mail server, web server dan lain-lain.

Satu server dapat melayani banyak klien, sehingga mengamankan server menjadi hal penting untuk menjaga layanan server tetap berjalan. Di artikel ini menjelaskan langkah awal yang harus dilakukan untuk mengamankan server, termasuk pengaturan user, konfigurasi ssh dan firewall.

Dalam kasus ini, menggunakan Amazon Web Service (AWS) sebagai server. Kamu bisa menggunakan penyedia VPS atau cloud computing lainnya seperti Microsoft Azure, Google Cloud (GCP), Digitalocean dan lain-lain. Login ke server menggunakan connection method sesuai layanan yang digunakan, biasanya sebagai root.

## Konfigurasi keamanan User
Saat sudah login sebagai root di server, mulai dengan membuat user baru dan autorisasi akses berbasis SSH untuk SSH Key pair.

Buat user baru dan masukkan password, info lainnya bersifat optional

```
# adduser aditya
```

Login sebagai user yang telah dibuat

```
# su aditya
```

Buat direktori `.ssh` didalam direktori user jika belum ada

```
$ mkdir /home/aditya/.ssh
```

Buat file authorized_keys didalam direktori `.ssh` dan biarkan tab terminal terbuka.
Pastikan permission direktori ssh 700 dan file authorized_keys 600.

```
$ vim .ssh/authorized_keys
```

Buka tab terminal baru di local, buat `key` dengan nama key sesuai keinginan difolder `.ssh`
Sedikit tambahan, upgrade algoritma untuk SSH Key menggunakan ED25519. Algoritma yang biasanya digunakan seperti DSA atau RSA saat ini telah deprecated. Kamu bisa baca info lanjut [disini](https://blog.g3rt.nl/upgrade-your-ssh-keys.html).

```
$ ssh-keygen -o -a 100 -t ed25519 -f id_key_myserver
```

Copy isi dari public key `id_key_myserver.pub` dan paste-kan ke file `authorized_keys` diserver pada tab terminal

Jika sesuai, exit SSH server kemudian login sebagai user baru menggunakan private key `id_key_myserver`

```
$ ssh -i <PATH id_rsa file> <USERNAME>@<IP SERVER>
$ ssh -i ~/.ssh/id_key_myserver aditya@10.10.10.10
```

## Konfigurasi Keamanan SSH

### Konfigurasi SSH

Kita akan konfigurasi SSH agar sedikit lebih aman dengan menerapkan penggunaan akses berbasis kunci SSH dan memastikan bahwa pengguna root tidak dapat masuk melalui SSH secara langsung.

Buka file `/etc/ssh/sshd_config` dengan editor

```
$ vim /etc/ssh/sshd_config
```

Cari dan ubah beberapa field seperti berikut

```
# Penting
PermitRootLogin no
PasswordAuthentication no

# Cek Ulang bagian ini
PubkeyAuthentication yes
PermitEmptyPasswords no

# Optional
AllowUsers aditya #hanya user tertentu yang diizinkan
AllowGroups sudo ssh #hanya group sudo dan ssh yang diizinkan
```

Kemudian restart ssh service

```
$ sudo service ssh restart
```

### Konfigurasi Fail2ban

Kita juga akan menggunakan `fail2ban`, yang akan memeriksa file `/var/log/auth.log` untuk kegagalan login SSH berulang kali dan melarang login dari sumber (IP) login tersebut, ini akan memberi perlindungan ekstra terhadap akses SSH berbasis brute-force.

Install fail2ban

```
$ sudo apt-get install -y fail2ban
```

Pastikan konfigurasi pada file `/etc/fail2ban/jail.d` ada konfigurasi sshd seperti ini:

```
[sshd]
enabled = true
```

Jika sudah, maka fail2ban akan melakukan tugasnya.

## Konfigurasi Keamanan Firewalls (Optional)

Bagian ini bersifat optional, karena biasanya penyedia layanan cloud sudah menerapkan sistem keamanan seperti firewalls. Contohnya pada AWS terdapat Security Group yang bertindak sebagai firewall virtual untuk mengontrol lalu lintas masuk dan keluar.

Untuk melihat aturan firewall, dapat menjalankan perintah `sudo iptables -L -v`.

Kita akan menambahkan ke input chain, yang mengontrol traffic incoming (ingress):

```
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
```

Kita telah menambahkan beberapa aturan diatas, diantaranya port 22 untuk SSH dan port 80 untuk HTTP. Selain itu bisa juga memasukkan aturan ke lokasi tertentu seperti port untuk HTTPS ini:

```
sudo iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
```

Terakhir, kita perlu membuat aturan ini running saat reboot:

```
# Instal ini akan menyimpan aturan saat ini
sudo apt-get install -y netfilters-persistent
```

That’s it! Kita sudah melakukan langkah awal dalam mengamankan server baru kita.

---
Credit
* icon: designed by Pixelmeetup from Flaticon