Professional IT Partner
Digital Knowledge Base

Panduan Komprehensif Setup Server Linux Ubuntu dari Nol: Hardening Keamanan, Web Server, dan Database untuk Production

I
IT Musafir
26 Feb 2026, 03:41
40 Views
14 Menit Baca
2,644 Kata
Panduan Komprehensif Setup Server Linux Ubuntu dari Nol: Hardening Keamanan, Web Server, dan Database untuk Production
Tutorial
14 Menit
2,644 Kata
Setup Server Linux Production

Panduan Komprehensif Setup Server Linux Ubuntu dari Nol: Hardening Keamanan, Web Server, dan Database untuk Production

Selamat datang di panduan definitif untuk menyiapkan server Linux yang siap produksi. Sebagai seorang praktisi yang telah menghabiskan bertahun-tahun di ruang server (baik fisik maupun cloud), saya tahu betapa frustrasinya menghadapi tutorial yang terlalu singkat atau hanya berisi perintah copy-paste tanpa konteks. Server yang buruk bukan hanya tentang performa lambat, tetapi tentang lubang keamanan yang menunggu untuk dieksploitasi.

Tutorial ini dirancang untuk Anda yang ingin memahami "apa", "bagaimana", dan yang terpenting, "kenapa" di balik setiap konfigurasi. Kita tidak akan sekadar menginstal perangkat lunak; kita akan membangun benteng digital. Kita akan menggunakan Ubuntu Server 22.04 LTS atau 24.04 LTS sebagai standar industri karena stabilitasnya, namun prinsip di sini dapat diterapkan pada distribusi lain seperti Debian atau CentOS dengan sedikit penyesuaian.

Ringkasan Singkat

Tujuan akhir dari panduan ini adalah mengubah server kosong (bare metal) menjadi mesin produksi yang aman, dioptimalkan, dan siap melayani aplikasi web. Pembaca kami adalah sysadmin pemula hingga menengah, atau developer yang ingin menyelami dunia DevOps. Output akhirnya adalah server dengan konfigurasi firewall ketat, akses SSH yang diamankan, web server Nginx yang efisien, database PostgreSQL yang andal, serta sertifikat SSL gratis. Tantangan terbesar biasanya bukan pada instalasi, melainkan pada konsistensi konfigurasi dan pencegahan lock-out (terkunci dari server sendiri).

Prasyarat

Sebelum kita menyentuh keyboard server, pastikan Anda telah menyiapkan segala sesuatunya dengan benar. Tidak ada yang lebih buruk daripada terjebak di tengah proses karena kekurangan alat.

  • Hardware Minimum: VPS atau Dedicated Server dengan minimal 2 CPU Core, 2GB RAM (lebih baik 4GB untuk headroom), dan 40GB SSD. GPU tidak diperlukan untuk web server standar.
  • Sistem Operasi: Ubuntu Server 22.04 LTS atau 24.04 LTS (Fresh install, tanpa panel kontrol seperti cPanel yang berat).
  • Klien Lokal: Komputer dengan Terminal (Linux/macOS) atau PuTTY/PowerShell (Windows). Git untuk manajemen kode.
  • Pengetahuan Dasar: Pemahaman dasar tentang baris perintah (CLI), konsep IP Address, dan cara kerja internet secara umum.
  • Tools Tambahan: Text editor (VS Code), FileZilla atau SCP untuk transfer file awal.
Diagram ilustrasi komponen hardware server dan konektivitas jaringan

Langkah-Langkah Setup Server Linux

1. Akses Awal dan Update Sistem

Setelah Anda mendapatkan IP server dari penyedia layanan cloud (seperti AWS, DigitalOcean, atau UpCloud), langkah pertama adalah masuk ke dalamnya. Biasanya, Anda akan menerima email berisi IP dan password root sementara.

1.1 Login sebagai Root

Buka terminal Anda dan gunakan perintah SSH. Kita menggunakan root untuk inisialisasi awal, tetapi nanti akan kita nonaktifkan demi keamanan.

Tujuan: Mendapatkan akses shell ke server.
Alasan Teknis: Kita butuh akses administratif tertinggi untuk mengubah konfigurasi dasar.

ssh root@ip_address_server_anda

Anda akan diminta memasukkan password (paste dari email provider). Saat mengetik, tidak akan ada tampilan karakter di layar. Itu normal untuk keamanan Unix.

1.2 Mengubah Password Root

Jangan pernah menggunakan password default. Langsung ubahlah.

passwd

Indikator Berhasil: Prompt mengatakan "password updated successfully".
Kesalahan Umum: Password terlalu pendek atau lemah (gunakan kombinasi huruf, angka, simbol).

1.3 Update Repository dan Upgrade Paket

Dunia Linux bergerak cepat. Bug ditemukan dan diperbaiki setiap hari. Pastikan server Anda menjalankan versi terbaru.

Tujuan: Memastikan semua paket sistem berada di versi teraman dan paling stabil.
Alasan Teknis: Paket lama sering memiliki kerentanan keamanan (CVE) yang diketahui publik.

apt update && apt upgrade -y

Perintah apt update menyegarkan daftar paket dari repository, sementara apt upgrade -y menginstal pembaruan tanpa meminta konfirmasi satu per satu.

Indikator Berhasil: Tidak ada error merah, dan prompt kembali muncul. Jika ada kernel update, mungkin diminta reboot.

Troubleshooting:
Jika muncul error "Unable to locate package", cek koneksi internet server Anda atau coba ganti repository mirror ke yang lebih dekat dengan lokasi server (misalnya mengganti archive.ubuntu.com ke id.archive.ubuntu.com di file /etc/apt/sources.list).

2. Pembuatan User Sudo dan Manajemen Akses

Menggunakan akun root untuk pekerjaan sehari-hari adalah praktik yang sangat buruk. Kesalahan ketik satu saja (misalnya rm -rf /) bisa menghapus seluruh server. Kita akan membuat user biasa dengan hak istimewa.

2.1 Membuat User Baru

Ganti "namauser" dengan nama yang Anda inginkan.

adduser namauser

Anda akan diminta mengisi password dan info opsional (bisa tekan Enter untuk melewati info opsional).

2.2 Memberikan Hak Sudo

Kita menambahkan user ini ke grup sudo. Grup ini memiliki izin untuk menjalankan perintah sebagai root.

usermod -aG sudo namauser

Tujuan: Memungkinkan user biasa menjalankan perintah administratif.
Alasan Teknis: Prinsip hak istimewa terkecil (Principle of Least Privilege). Kita hanya menjadi root saat dibutuhkan saja.

2.3 Uji Coba User Sudo

Jangan keluar dulu. Kita tes di terminal saat ini (opsional) atau buka sesi SSH baru.

su - namauser

Sekarang coba jalankan perintah dengan sudo:

sudo ls /root

Indikator Berhasil: Anda diminta memasukkan password user Anda, lalu bisa melihat isi folder root.
Kesalahan Umum: "user is not in the sudoers file". Artinya perintah usermod tadi tidak berhasil dijalankan atau Anda lupa restart shell.

3. Hardening Keamanan: Konfigurasi SSH

SSH (Secure Shell) adalah gerbang depan rumah Anda. Jika gerbang ini mudah dijebol, tidak peduli sekuat apa dinding Anda. Default konfigurasi SSH seringkali belum optimal untuk keamanan produksi.

3.1 Generate SSH Key Pair (Di Lokal/Komputer Anda)

Kita akan beralih dari password-based auth ke key-based auth. Ini jauh lebih aman karena kunci enkripsinya jauh lebih sulit ditebak dibandingkan password.

Buka terminal di komputer lokal Anda, bukan di server.

ssh-keygen -t ed25519 -C "[email protected]"

Kita menggunakan Ed25519 karena algoritmanya lebih modern, kecil, dan aman dibanding RSA standar. Tekan Enter untuk menyimpan di lokasi default dan biarkan passphrase kosong atau isi sesuai keamanan yang diinginkan.

3.2 Copy Public Key ke Server

Kita perlu menaruh kunci publik ke dalam server agar server mengenali kunci privat kita.

ssh-copy-id namauser@ip_address_server_anda

Jika Anda tidak punya perintah ssh-copy-id (misal di Windows), Anda bisa menyalin isi file id_ed25519.pub dan menempelkannya secara manual ke file ~/.ssh/authorized_keys di server.

Indikator Berhasil: Coba login lagi dengan user baru. Anda seharusnya tidak diminta password lagi.

3.3 Konfigurasi File sshd_config

Sekarang kita akan mengunci gerbang tersebut. Kita akan mematikan login root dan memaksa penggunaan kunci SSH.

Buka file konfigurasi:

sudo nano /etc/ssh/sshd_config

Cari dan ubah baris berikut (jika diawali tanda pagar #, hapus pagar tersebut):

  • Ubah Port 22 menjadi Port 2222 (atau port non-standar lain). Ini mengurangi noise dari bot scanner otomatis.
  • Ubah PermitRootLogin yes menjadi PermitRootLogin no. Root tidak boleh bisa login langsung.
  • Ubah PasswordAuthentication yes menjadi PasswordAuthentication no. Ini mematikan login password sepenuhnya.
  • Pastikan PubkeyAuthentication yes tidak dikomentari.

Simpan dan keluar (Ctrl+O, lalu Ctrl+X).

3.4 Restart Layanan SSH

Agar perubahan diterapkan:

sudo systemctl restart ssh

PENTING: Jangan tutup sesi SSH saat ini sebelum memverifikasi koneksi baru! Buka tab terminal baru dan coba login dengan port baru:

ssh -p 2222 namauser@ip_address_server_anda

Indikator Berhasil: Anda bisa masuk tanpa password melalui port baru.
Kesalahan Umum (Fatal): Anda mengubah port tapi lupa membukanya di firewall (langkah selanjutnya), atau Anda salah mengetik konfigurasi sehingga layanan gagal restart. Jika ini terjadi dan Anda terkunci, Anda biasanya harus menggunakan Console VNC/KVM yang disediakan panel penyedia VPS untuk memperbaikinya.

Diagram alur autentikasi SSH Key Based

4. Setup Firewall: Mengamankan Jaringan dengan UFW

Firewall adalah filter yang mengatur lalu lintas masuk dan keluar. Ubuntu datang dengan UFW (Uncomplicated Firewall) yang, sesuai namanya, sangat mudah digunakan namun kuat. Filosofi default kita adalah deny all, allow specific (tolak semua, izinkan yang diperlukan).

4.1 Instalasi dan Cek Status

Biasanya sudah terinstal, tapi cek dulu:

sudo ufw status

Jika statusnya inactive, kita lanjutkan setup.

4.2 Atur Default Policy

Pertama, kita tolak semua koneksi masuk dan izinkan semua koneksi keluar (server bisa update, tapi orang luar tidak bisa masuk sembarangan).

sudo ufw default deny incomingsudo ufw default allow outgoing

4.3 Izinkan Koneksi yang Diperlukan

Kita harus mengizinkan SSH agar tidak terkunci sendiri. Ingat kita mengubah port SSH ke 2222.

sudo ufw allow 2222/tcp

Jika Anda menjalankan web server (HTTP/HTTPS), izinkan port standar:

sudo ufw allow 80/tcpsudo ufw allow 443/tcp

4.4 Aktifkan Firewall

Perintah ini akan memulai firewall dan menerapkan aturan:

sudo ufw enable

Anda akan melihat peringatan "Command may disrupt existing ssh connections". Jawab y karena kita sudah mengizinkan port 2222 sebelumnya.

Indikator Berhasil: sudo ufw status verbose menampilkan daftar aturan dan status active.
Troubleshooting: Jika Anda lupa mengizinkan port SSH sebelum enable, Anda akan terkunci dari server. Gunakan console VPS penyedia layanan untuk ufw disable dan mulai ulang.

5. Instalasi dan Konfigurasi Nginx (Web Server)

Sekarang server sudah aman, saat kita membuatnya berguna. Nginx (dibaca Engine-X) adalah pilihan populer karena performanya tinggi dalam menangani koneksi konkuren dan penggunaan memori yang rendah.

5.1 Instalasi Nginx

sudo apt install nginx -y

Layanan Nginx akan otomatis start setelah instalasi.

5.2 Verifikasi Instalasi

Buka browser dan akses http://ip_address_server_anda. Anda seharusnya melihat halaman "Welcome to Nginx".

Indikator Berhasil: Halaman default Nginx muncul di browser.
Kesalahan Umum: Halaman tidak muncul. Cek lagi firewall: sudo ufw allow 'Nginx Full' atau pastikan port 80 terbuka.

5.3 Struktur Direktori Nginx

Penting untuk memahami tempat menyimpan file Anda:

  • /etc/nginx: Direktori konfigurasi.
  • /etc/nginx/nginx.conf: File konfigurasi utama.
  • /etc/nginx/sites-available: Tempat kita membuat konfigurasi tiap website.
  • /etc/nginx/sites-enabled: Konfigurasi website yang sedang aktif (biasanya berisi symlink ke sites-available).
  • /var/www/html: Root default untuk file website (namun kita akan membuat struktur terpisah untuk setiap site).

5.4 Membuat Server Block (Virtual Host)

Kita tidak akan menggunakan default configuration. Mari buat konfigurasi untuk website kita, misalnya domainanda.com.

Buat folder untuk website:

sudo mkdir -p /var/www/domainanda.com/html

Beri kepemilikan folder kepada user Anda (agar bisa edit file tanpa sudo terus-menerus, meski untuk produksi permission harus diatur hati-hati):

sudo chown -R $USER:$USER /var/www/domainanda.com/html

Setel permission:

sudo chmod -R 755 /var/www/domainanda.com

Buat file index.html sederhana:

nano /var/www/domainanda.com/html/index.html

Isi dengan HTML sederhana:

<html>
<head>
<title>Server Sukses!</title>
</head>
<body>
<h1>Setup Server Anda Berhasil!</h1>
</body>
</html>

Sekarang buat konfigurasi Nginx:

sudo nano /etc/nginx/sites-available/domainanda.com

Masukkan konfigurasi berikut (ini adalah boilerplate standar performa tinggi):

server {
listen 80;
listen [::]:80;

root /var/www/domainanda.com/html;
index index.html index.htm;

server_name domainanda.com www.domainanda.com;

location / {
try_files $uri $uri/ =404;
}
}

5.5 Aktifkan Server Block

Kita perlu membuat symlink (tautan simbolis) dari folder sites-available ke sites-enabled:

sudo ln -s /etc/nginx/sites-available/domainanda.com /etc/nginx/sites-enabled/

5.6 Uji Konfigurasi dan Restart

Jangan restart sebelum yakin konfigurasi valid. Nginx memiliki fitur pengecekan yang bagus:

sudo nginx -t

Indikator Berhasil: Output menyatakan syntax is ok dan test is successful.
Kesalahan Umum: could not build server_names_hash. Jika nama domain Anda sangat panjang, tambahkan baris ini di http {} block di nginx.conf: server_names_hash_bucket_size 64;.

Jika sukses, restart Nginx:

sudo systemctl restart nginx

6. Instalasi dan Keamanan Database (PostgreSQL)

Aplikasi web modern membutuhkan database. PostgreSQL adalah database open-source paling handal dan kaya fitur saat ini. MySQL/MariaDB bagus, tapi PostgreSQL sering jadi pilihan untuk data kompleks dan integritas data tinggi.

6.1 Instalasi PostgreSQL

sudo apt install postgresql postgresql-contrib -y

6.2 Akses ke Database

PostgreSQL membuat user sistem bernama "postgres" secara default. Untuk mengelola database, kita login ke akun tersebut:

sudo -i -u postgres

Sekarang Anda masuk ke prompt psql:

psql

Anda akan melihat prompt berubah menjadi postgres=#.

6.3 Membuat Database dan User

Jangan pernah menggunakan user "postgres" untuk aplikasi Anda. Buat user khusus.

Di dalam prompt psql, ketik:

CREATE DATABASE aplikasidb;

Buat user dengan password (ganti 'passwordkuat' dengan password yang benar-benar kuat):

CREATE USER userapp WITH PASSWORD 'passwordkuat';

Berikan izin (privileges) pada database tersebut kepada user:

GRANT ALL PRIVILEGES ON DATABASE aplikasidb TO userapp;

Keluar dari psql:

\q

Keluar dari user postgres:

exit

6.4 Konfigurasi Remote Access (Opsional tapi Kritis)

Secara default, PostgreSQL hanya mendengarkan koneksi dari localhost (127.0.0.1). Jika aplikasi web Anda berada di server yang sama, ini aman. Namun, jika Anda ingin koneksi dari luar (misalnya laptop Anda untuk development tool), Anda perlu mengubahnya.

Edit file konfigurasi utama:

sudo nano /etc/postgresql/14/main/postgresql.conf

Cari baris listen_addresses dan ubah menjadi:

listen_addresses = 'localhost, your_ip_address'

Namun, untuk keamanan maksimal di awal, pertahankan saja localhost jika aplikasi dan database berada di satu server. Jika Anda mengubahnya, Anda juga harus mengedit pg_hba.conf untuk mengatur izin IP mana yang boleh konek.

Restart PostgreSQL:

sudo systemctl restart postgresql

7. Keamanan Tambahan: SSL dengan Certbot (Let's Encrypt)

Web tanpa HTTPS saat ini dianggap tidak aman oleh browser dan mesin pencari. Kita akan menggunakan Let's Encrypt untuk mendapatkan sertifikat SSL gratis. Ini standar industri modern.

7.1 Instalasi Certbot

sudo apt install certbot python3-certbot-nginx -y

7.2 Mendapatkan Sertifikat

Pastikan domain Anda sudah diarahkan (A record) ke IP server ini. Jika belum, Certbot akan gagal memverifikasi kepemilikan domain.

Jalankan perintah ini. Certbot akan otomatis mengedit konfigurasi Nginx kita:

sudo certbot --nginx -d domainanda.com -d www.domainanda.com

Anda akan diminta email dan persetujuan Terms of Service. Pilih opsi untuk redirect HTTP ke HTTPS (biasanya opsi 2). Ini memaksa semua trafik menjadi aman.

Indikator Berhasil: Pesan "Successfully received certificate". Coba akses https://domainanda.com. Browser akan menampilkan gembok.

7.3 Auto-Renewal

Sertifikat Let's Encrypt berumur pendek (90 hari). Namun, Certbot otomatis memasang script cron atau systemd timer untuk memperbaruinya. Cek status:

sudo systemctl status certbot.timer

Pastikan statusnya active.

8. Optimasi dan Hardening Lanjutan

Server sudah berjalan, tapi kita belum selesai. Bagian ini membedakan sysadmin junior dan senior.

8.1 Konfigurasi Swap

Jika server kecil (1-2GB RAM), swap mencegah server crash saat memori penuh dengan menukar data memori ke disk.

Cek apakah swap ada:

sudo swapon --show

Jika kosong, buat file swap 1GB:

sudo fallocate -l 1G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile

Agar permanen, edit /etc/fstab dan tambahkan:

/swapfile none swap sw 0 0

8.2 Fail2Ban: Melawan Brute Force

Meskipun kita sudah mematikan password login dan mengubah port, ada baiknya memasang Fail2Ban untuk memantau log dan memblokir IP yang mencoba menyusup.

sudo apt install fail2ban -y

Buat file konfigurasi lokal agar tidak tertimpa saat update:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edit jail.local dan pastikan bagian [sshd] aktif (enabled = true). Pastikan port sesuai (2222).

Restart layanan:

sudo systemctl restart fail2ban

Tujuan: Otomatis memban IP yang gagal login berulang kali.
Kesalahan Umum: Salah mengatur port di konfigurasi jail.local sehingga Fail2Ban tidak memonitor log SSH dengan benar.

9. Monitoring dan Logging

Anda tidak bisa mengelola apa yang tidak Anda ukur. Jangan instal alat berat seperti Grafana/Prometheus untuk server kecil satu ini, cukup gunakan alat bawaan yang efisien.

9.1 htop

Lebih baik daripada top. Instal:

sudo apt install htop

Jalankan htop untuk melihat penggunaan CPU, RAM, dan proses secara real-time dengan warna yang intuitif.

9.2 Logrotate

Linux menyimpan log di /var/log. Jika tidak diatur, file log ini bisa memenuhi disk dan membuat server crash. Logrotate sudah terinstal default, tapi cek konfigurasi Nginx di /etc/logrotate.d/nginx. Pastikan setting rotasi harian atau mingguan sudah sesuai kebutuhan.

Tips & Best Practice

  • Backup Rutin: Jangan mengandalkan redundancy penyedia VPS. Gunakan rsync untuk memindahkan data penting ke server lain atau layanan object storage (seperti S3) setiap hari.
  • Environment Variables: Jangan pernah menyimpan password atau API key di dalam kode aplikasi (hardcoded). Gunakan file .env dan pastikan file tersebut ada di .gitignore jika menggunakan Git.
  • Struktur Folder: Buat direktori khusus untuk script maintenance Anda, misalnya /opt/scripts. Jangan simpan script sembarangan di home directory user.
  • Update Rutin: Jadwalkan update sekali seminggu. Perintah sudo unattended-upgrade bisa di-setup untuk instalasi patch keamanan otomatis.
  • Dokumentasi: Setiap kali Anda melakukan perubahan konfigurasi yang tidak standar, tulis catatan di file README di server Anda sendiri. Enam bulan kemudian Anda akan lupa kenapa Anda mengubah setting tersebut.

Penutup

Selamat! Anda telah membangun server Linux yang tidak hanya berfungsi, tetapi juga kokoh dan aman. Kita telah menempuh perjalanan dari update sistem dasar, hardening SSH, konfigurasi firewall, instalasi web server dan database, hingga pengamanan koneksi dengan SSL.

Server ini siap untuk menerima aplikasi Anda. Langkah logis selanjutnya adalah mempelajari automasi menggunakan Ansible atau Docker agar proses setup ini dapat direplikasi dalam hitungan detik jika Anda perlu menambah server baru. Ingat, sysadmin yang baik itu malas (dalam arti positif); dia mengotomasi hal-hal yang berulang agar bisa fokus pada masalah yang lebih menantang.

Teruslah bereksperimen, jangan takut error (asal ada backup), dan bangun kebiasaan membaca log jika terjadi masalah. Selamat mengoding!

Review Pembaca

Beri penilaian dan komentar untuk artikel ini.

4.6 (10 review)
Ahmad Fauzi
25 Feb 2026

Insight-nya relevan dengan kebutuhan kerja saya.

Rina Marlina
22 Feb 2026

Contohnya aplikatif, langsung bisa dipraktikkan.

Putri Ayu
21 Feb 2026

Materinya up to date dan terstruktur.

Nabila Putri
19 Feb 2026

Salah satu artikel terbaik yang saya baca minggu ini.

Tia Kurnia
18 Feb 2026

Salah satu artikel terbaik yang saya baca minggu ini.