Cara Memperkuat Keamanan Server Ubuntu 20.04
Cara ini mungkin dapat diterapkan pada Ubuntu versi sebelumnya. Sistem operasi Linux dikenal sebagai salah satu sistem teraman. Namun bukan berarti kita dapat mengandalkannya dengan konfigurasi yang tersedia. Banyak celah yang dapat digunakan oleh peretas untuk mengakses sebuah server.
Tambah Akun Selain Root
Setelah masuk ke server, segera buat akun selain root, gunakan nama akun yang sulit ditebak namun tetap dapat diingat dengan mudah oleh kita sendiri, bisa diambil dari nama orang, buah, tanaman dan lainnya, contoh:
adduser jambu
Peringatan, gunakan kata selain yang saya contohkan sebagai nama akun! Tetapkan kata sandi yang sulit ditebak oleh siapapun, termasuk oleh anda sendiri. Saran saya, gunakan kombinasi dari 5 atau lebih kata dasar yang baku dari bahasa Indonesia atau bahasa Inggris, contoh:
- makan suram jam lampu surut
- cukup tangan tinggi nanti tukang
- sulit malam tinggal mungkin ini
Peringatan, gunakan kombinasi kata selain yang saya contohkan sebagai kata sandi! Catat kata sandi yang akan digunakan pada sebuah kertas, usahakan gunakan kata yang tidak ada kemiripannya dengan kata yang lain, seperti: susup, susun, susul, dan sejenisnya yang berpotensi typo saat menyalinnya di kertas. Masukkan dua kali pada prompt berikut:
Set password prompts:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Ikuti prompt di atas dengan menetapkan informasi akun. Cukup enter-enter saja hingga selesai. Untuk kebutuhan keamanan, minimalkan informasi yang ditanam dalam sebuah sistem, kecuali sangat dibutuhkan.
User information prompts:Changing the user information for username
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
Tambahkan grup sudo pada akun:
usermod -aG sudo jambu
Secara default, grup sudo di sistem Ubuntu otomatis memiliki kewenangan sudo, dimana akun dapat menjalankan perintah administratif sistem dengan menambahkan kata sudo sebelum perintah yang ingin dijalankan.
Keluar dari sistem, kemudian masuk lagi menggunakan akun sudo yang baru saja dibuat.
Nonaktifkan Akun Root
Karena kita sudah memiliki akun dengan kewenangan sudo, maka kita sudah bisa menonaktifkan akun root, karena akun root ini sudah diketahui secara umum, memiliki kewenangan penuh terhadap sistem. Untuk menghindari akses yang tidak diinginkan, nonaktifkan akun root menggunakan perintah:
# Untuk menonaktifkan akun root, cukup menggunakan opsi -l.
sudo passwd -l root
# Jika ada kebutuhan yang sangat penting, kita dapat mengaktifkan kembali dengan menggunakan opsi -u.
sudo passwd -u root
Ujilah dengan mengakses sistem dengan akun root dan kata sandi-nya. Baik lewat ssh maupun langsung dari konsol, akan muncul informasi berikut:
$ ssh root@server-ubuntu
root@server-ubuntu: Permission denied (publickey).
Apabila muncul pesan Permission denied, berarti konfigurasi kita sudah pada tempatnya.
Amankan Akses SSH
SSH sangat vital dan merupakan pintu masuk untuk mengkonfigurasi server, instalasi layanan lainnya dan perubahan administratif lainnya terhadap server. Namun, SSH juga merupakan pintu masuk utama para peretas, untuk itu sangatlah krusial untuk mengamankan layanan SSH.
Aturan Dasar Memperkuat Keamanan SSH, diantaranya:
- Akses tanpa kata sandi (gunakan pasangan kunci sebagai gantinya)
- Blokir akun root untuk mengakses SSH (gunakan sudo untuk menjalankan perintah administratif)
- Ubah port default
- Gunakan aplikasi untuk memblokir otomatis setiap ada usaha untuk masuk yang gagal terotorisasi.
Buat kunci berpasangan di komputer lokal dengan perintah berikut:
ssh-keygen -t ed25519 -f kuncisatu
perintah di atas berlaku untuk sistem operasi WIndows 10, Mac OS maupun Linux.
C:\Users\joko>ssh-keygen -t ed25519 -f kuncisatu
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in kuncisatu.
Your public key has been saved in kuncisatu.pub.
The key fingerprint is:
SHA256:Dyf8+XZoWcW4sbS2ls/njBGd/wNVDw3AZXIt4TD0PiA joko@DESKTOP-NC9SG9E
The key's randomart image is:
+--[ED25519 256]--+
| o*o*= |
| .Oo +|
| E . o=o|
| . . o+o=|
| S . .=B.|
| * . .*o.|
| + =oo.|
| .= =*o|
| o.o.oO|
+----[SHA256]-----+
Kita akan diminta memasukkan kata sandi untuk menggunakan kunci, sangat disarankan untuk memasukkan kata sandi (passphrase), meski sebenarnya tetap bisa dibuat tanpa kata sandi. Akan terdapat 2 file, file kuncisatu (tanpa ekstensi) merupakan file privat, sedangkan file kuncisatu.pub merupakan kunci publik yang akan kita tempatkan pada server. Kirim file kuncisatu.pub ke server:
scp kuncisatu.pub server-ubuntu:
Masuklah ke server untuk memasang kunci publik di server. Buatlah folder .ssh jika belum ada pada forder home, dan buat file .ssh/authorized_keys. Tambahkan isi dari file kuncisatu.pub ke dalam
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
Salin isi file kuncisatu.pub dan tambahkan ke file .ssh/authorized_keys
cat kuncisatu.pub >> .ssh/authorized_keys
Uji hasil konfigurasi kunci berpasangan, keluar dari server dan kembali masuk.
ssh -t kuncisatu server-ubuntu
Ganti server-ubuntu dengan ip server.
Jika sudah tidak diminta kata sandi untuk masuk (selain kata sandi untuk kunci privat), maka konfigurasi berhasil. Selanjutnya ubah SSH, ganti beberapa baris pada file konfigurasi SSH:
sudo nano /etc/ssh/sshd_config
carilah baris-baris berikut dan gantilah seperti ini:
Port 10022
LogLevel VERBOSE
PermitRootLogin no
StrictModes yes
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
ClientAliveInterval 300
ClientAliveCountMax 0
AllowTcpForwarding no
X11Forwarding no
UseDNS no
CTRL+X untuk keluar dan menyimpan file konfigurasi. Ujilah dengan perintah:
sudo sshd -t
Jika tidak ada pesan apapun, maka konfigurasi dapat digunakan, selanjutnya restart SSH:
sudo service ssh restart
Uji konfigurasi baru, dengan membuat sesi baru, sesi lama jangan keluar dari server terlebih dulu untuk memastikan konfigurasi baru dapat diakses dengan baik.
Aktifkan Firewall
Firewall sangat penting dalam membatasi akses dari luar ke dalam layanan di dalam server yang mungkin tidak sengaja atau sengaja aktif, namun tidak diperuntukkan bisa diakses dari luar/publik.
jambu@server-ubuntu:~$ sudo ufw status
Status: inactive
Karena kita sudah mengkonfigurasi SSH untuk bisa diakses pada port 10022, maka kita cukup buka port 10022 pada protocol tcp, dengan perintah:
jambu@server-ubuntu:~$ sudo ufw allow 10022/tcp
Rules updated
Rules updated (v6)
jambu@server-ubuntu:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Jika kita memiliki koneksi dengan ip statis, bisa juga layanan SSH hanya dibuka untuk ip kita sendiri, contoh:
jambu@server-ubuntu:~$ sudo ufw delete allow 10022/tcp
Rules updated
Rules updated (v6)
jambu@server-ubuntu:~$ sudo ufw allow from 172.10.2.1 to any port 10022 proto tcp
Rules updated
Pada contoh di atas, ip nya: 172.10.2.1, sesuaikan dengan ip statis kita.
Amankan Shared Memory
Shared memory dapat digunakan untuk menyerang layanan yang sedang berjalan, seperti apache2 atau httpd.
sudo nano /etc/fstab
tambahkan baris berikut:
tmpfs /run/shm tmpfs ro,noexec,nosuid 0 0
Simpan file dengan CTRL+X, kemudian restart server:
sudo reboot
Perbaharui Sistem
Menjaga sistem untuk tetap mutakhir sangatlah vital sebelum kita mulai menggunakannya. Hal ini dapat mencegah sistem tersusupi karena celah yang sudah banyak diketahui orang.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
Aktifkan pembaruan otomatis bisa menjadi krusial untuk keamanan server kita. Sangatlah penting untuk selalu ter-mutakhir
sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Jika hanya ingin memperbaharui sistem keamanan, cukup remark baris-baris yang tidak diperlukan dari file konfigurasinya, seperti ini:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
// Unattended-Upgrade::Mail "my_user@my_domain.com";
Sebenarnya masih banyak lagi cara untuk menambah keamanan dari sebuah server, namun untuk tulisan kali ini saya cukupkan di sini. Terima kasih sudah membaca sampai selesai.
Photo by Nick Benjaminsz from FreeImages