• Home
  • Server
  • Cara Mengamankan LAMP Stack di VPS Ubuntu: Panduan dan Verifikasi

Cara Mengamankan LAMP Stack di VPS Ubuntu: Panduan dan Verifikasi

Oleh Ita Sugiharti
7 Daftar Konfigurasi Keamanan Dasar LAMP Stack, Wajib Tahu!

Konfigurasi keamanan dasar LAMP Stack (Linux, Apache, MySQL, PHP) di lingkungan produksi merupakan alur pasca-instalasi yang vital untuk melindungi web server dari ancaman peretasan, pencurian data, dan eksploitasi celah keamanan. Panduan ini berfokus khusus pada Hardening & Security Audit server VPS Ubuntu yang sudah aktif, membedakannya secara tegas dari alur instalasi awal.

Panduan ini menggunakan skenario satu aplikasi PHP dan satu database MySQL pada VPS Ubuntu. Setiap tahap dilengkapi pemeriksaan hasil agar kamu dapat mengetahui apakah perubahan sudah bekerja sebelum melanjutkan ke tahap berikutnya.

Persiapan Sebelum Mengamankan LAMP Stack

Panduan ini ditujukan untuk LAMP yang sudah terpasang dan aplikasinya dapat dibuka melalui HTTP. Jika komponennya belum tersedia, pelajari dahulu alur instalasi LAMP di Cloud VPS, kemudian gunakan versi dan prasyarat di bawah sebagai acuan konfigurasi artikel ini.

Komponen Skenario panduan
Sistem operasi Ubuntu Server 24.04 LTS, dengan paket dari repositori Ubuntu.
Web server dan PHP Apache 2.4 dan PHP 8.3 melalui modul Apache (mod_php).
Database MySQL 8.0 dalam VPS yang sama; database contoh bernama aplikasi.
Domain dan direktori app.example.com, dengan DocumentRoot di /var/www/app.example.com.
Pengguna VPS Pengguna dengan akses sudo (contoh: adminvps), bukan root langsung.
Akses awal Domain sudah mengarah ke IP VPS dan port HTTP (80) dapat diakses.

Sebelum mengubah konfigurasi pada VPS produksi, lakukan hal berikut:

  • Buat snapshot atau backup awal VPS: pastikan kamu dapat mengembalikan kondisi server jika terjadi kesalahan konfigurasi.
  • Siapkan dua sesi SSH aktif: jangan menutup sesi SSH pertama hingga login pada sesi kedua berhasil setelah perubahan konfigurasi SSH.
  • Gunakan perintah spesifik: hindari perintah yang mengubah izin file atau kepemilikan secara menyeluruh pada direktori sistem di luar DocumentRoot aplikasi.

Checklist Ringkasan Keamanan LAMP Stack (Security Audit Matrix)

Gunakan matriks ringkasan berikut untuk memastikan seluruh lapisan server VPS Ubuntu kamu telah terlindungi secara optimal:

  • Akses & Network: Aktifkan UFW firewall (izinkan hanya port 80, 443, dan SSH), matikan login root, dan wajibkan autentikasi SSH Key.
  • Web Server (Apache): Sembunyikan versi Apache (ServerTokens Prod), nonaktifkan pencarian direktori (Options -Indexes), dan pasang Security Headers.
  • Database (MySQL): Jalankan mysql_secure_installation, ikat ke IP lokal 127.0.0.1, dan pisahkan hak akses akun database.
  • Runtime (PHP): Nonaktifkan fungsi eksekusi berbahaya (exec,passthru,shell_exec,system), matikan display_errors, dan expose_php = Off.
  • SSL & Pemulihan: Pasang SSL HTTPS via Certbot Let’s Encrypt serta siapkan rutinitas backup otomatis dan pengujian restore berkala.

Langkah Konfigurasi Keamanan Dasar LAMP Stack

1. Perbarui Sistem dan Catat Kondisi Awal

Perbarui indeks paket dan perbarui paket sistem ke versi terbaru yang stabil.

Setelah pembaruan selesai, periksa status layanan utama dan catat port yang sedang terbuka pada VPS.

Kriteria verifikasi: layanan apache2 dan mysql berstatus active (running). Output ss -tulpn menunjukkan port yang terbuka sesuai dengan kebutuhan aplikasi (contoh: port 22, 80, 3306).

2. Uji SSH Key Sebelum Menonaktifkan Login Root

Jika kamu belum menggunakan SSH key, siapkan pasangan kunci pada komputer lokal dan salin kunci publik ke VPS. Panduan cara install SSH key di VPS menjelaskan langkah pembuatan kunci dan pemindahannya.

Baca Juga:  6 Cara Mudah Mengoptimalkan Performa LAMP Stack di VPS!

Setelah kunci publik terpasang pada file ~/.ssh/authorized_keys milik pengguna sudo, uji login SSH tanpa kata sandi pada jendela terminal baru.

Setelah login SSH key berhasil, buka file konfigurasi SSH daemon pada VPS.

Jika file di atas tidak ada, edit file utama /etc/ssh/sshd_config. Sesuaikan baris berikut:

Uji sintaks konfigurasi SSH sebelum me-restart layanan.

Kriteria verifikasi: coba login sebagai root dari terminal baru. Sistem harus menolak akses root. Uji pula login pengguna sudo tanpa kunci SSH (jika kata sandi dinonaktifkan); sistem harus menolak otentikasi kata sandi.

3. Batasi Port yang Terbuka Menggunakan UFW

Aktifkan Uncomplicated Firewall (UFW) untuk membatasi akses ke VPS. Izinkan profil OpenSSH, HTTP, dan HTTPS. Pelajari juga tutorial setup UFW di VPS jika kamu menggunakan port SSH kustom.

Periksa status firewall untuk memastikan aturan aktif.

Kriteria verifikasi: output UFW menunjukkan status active dengan aturan izin terbatas pada port SSH (22), HTTP (80), dan HTTPS (443). Port MySQL (3306) tidak boleh terbuka untuk umum.

4. Lindungi Direktori dan File Sensitif pada Apache

Sembunyikan versi Apache dan batasi informasi server yang dikirim melalui header HTTP. Edit file konfigurasi keamanan Apache.

Sesuaikan direktif berikut:

Nonaktifkan pencarian indeks direktori (directory listing) agar pengunjung tidak dapat melihat daftar file dalam folder yang tidak memiliki file indeks (seperti index.php atau index.html). Edit konfigurasi VirtualHost aplikasi kamu.

Pastikan di dalam blok <Directory /var/www/app.example.com> direktif Options tidak mencantumkan Indexes:

Pastikan modul rewrite dan headers aktif di Apache.

Kriteria verifikasi: buka URL folder yang tidak memiliki file indeks (contoh: http://app.example.com/uploads/). Apache harus merespons dengan status 403 Forbidden, bukan menampilkan daftar file.

5. Batasi Hak Tulis pada File Aplikasi

Atur kepemilikan dan izin file pada DocumentRoot aplikasi agar proses web server (www-data) tidak memiliki hak tulis berlebih pada seluruh file kode program.

Jika aplikasi membutuhkan direktori khusus untuk mengunggah file atau menyimpan cache (seperti uploads/ atau storage/), beri izin tulis khusus pada direktori tersebut saja.

Panduan konfigurasi file permission memberikan dasar penetapan hak akses direktori dan file yang aman.

Kriteria verifikasi: jalankan perintah ls -ld /var/www/app.example.com/uploads. Kepemilikan grup harus www-data dengan izin 775 atau 755, sedangkan file PHP utama (seperti index.php) dimiliki oleh adminvps dengan izin 644.

6. Batasi Jaringan dan Hak Akses Akun MySQL

Pastikan layanan MySQL hanya mendengarkan koneksi dari antarmuka lokal (127.0.0.1), bukan dari semua antarmuka jaringan (0.0.0.0). Edit file konfigurasi MySQL.

Baca Juga:  Tutorial Mudah Instalasi WordPress dengan LAMP Stack di VPS

Pastikan direktif bind-address bernilai:

Restart layanan MySQL untuk menerapkan perubahan.

Jalankan skrip keamanan bawaan MySQL untuk menghapus pengguna anonim, membatasi login root dari jarak jauh, dan menghapus database uji.

Buat pengguna database terpisah khusus untuk aplikasi kamu, bukan menggunakan akun root MySQL pada file konfigurasi aplikasi.

Eksekusi perintah SQL berikut:

Kriteria verifikasi: periksa port listen MySQL dengan perintah sudo ss -tulpn | grep 3306. Output harus menampilkan 127.0.0.1:3306.

7. Atur PHP untuk Produksi dan Periksa Runtime Website

Edit file php.ini yang digunakan oleh Apache.

Sesuaikan direktif keamanan berikut:

Buat file log PHP dan berikan izin ke www-data.

Jika kamu membutuhkan spesifikasi server yang lebih cepat atau isolasi resource yang lebih fleksibel untuk aplikasi PHP berat, gunakan layanan Cloud VPS DomaiNesia dengan dukungan akses root penuh dan jaringan stabil.

Kriteria verifikasi: buka halaman aplikasi PHP kamu. Periksa header respons HTTP menggunakan curl -I http://app.example.com. Header X-Powered-By: PHP/8.3.x tidak boleh muncul.

8. Aktifkan HTTPS dan Uji Perpanjangan Sertifikat

Pasang Certbot dan plugin Apache untuk mendapatkan sertifikat SSL gratis dari Let’s Encrypt.

Ikuti petunjuk di layar untuk mengonfigurasi pengalihan otomatis dari HTTP ke HTTPS. Setelah selesai, uji perpanjangan otomatis sertifikat.

Kriteria verifikasi: perintah certbot renew --dry-run me-outputkan kalimat Congratulations, all simulated renewals succeeded. Buka situs di browser via https://app.example.com dan pastikan ikon gembok aman ditampilkan.

9. Periksa Log, Buat Backup, dan Uji Restore

Buat skrip backup sederhana untuk mencadangkan file aplikasi dan database MySQL ke direktori backup lokal atau server lain. Pelajari alur transfer backup aman menggunakan cara backup file menggunakan rsync.

Kriteria verifikasi: file backup terbuat di direktori /var/backups/aplikasi/ dengan ukuran lebih dari 0 bytes.

Checklist Verifikasi Setelah Konfigurasi

Lakukan audit cepat menggunakan daftar periksa berikut setelah semua langkah pengamanan diterapkan:

Komponen Pemeriksaan Status Harapan
SSH Login root & Kata Sandi Ditolak (Permission denied)
Firewall Status UFW Active (Hanya 22, 80, 443)
Apache Header ServerTokens Server: Apache (Tanpa versi OS)
MySQL Bind Address 127.0.0.1:3306
PHP expose_php & display_errors Off (Pesan error disimpan ke log)

Jika Aplikasi Bermasalah Setelah Hardening

Jika aplikasi web kamu mengalami kendala setelah hardening diterapkan, periksa tabel troubleshooting berikut:

  • Error 403 Forbidden: terjadi jika izin direktori terlalu ketat. Jalankan chmod 755 pada direktori publik dan chmod 644 pada file.
  • Error 500 Internal Server Error: periksa log error PHP di /var/log/php_errors.log atau log Apache di /var/log/apache2/error.log. Biasanya disebabkan oleh fungsi PHP yang dinonaktifkan di disable_functions namun dibutuhkan oleh aplikasi kamu.
  • Error Database Connection Refused: pastikan skrip aplikasi kamu terhubung ke 127.0.0.1 atau localhost, bukan ke IP publik VPS.

Jadikan Pengamanan LAMP sebagai Rutinitas

Pengamanan server bukan proses satu kali selesai. Jadwalkan pembaruan sistem secara berkala minimal satu kali dalam seminggu, pantau penggunaan disk dan log akses, serta uji coba pemulihan backup secara rutin.

Untuk meningkatkan efisiensi dan kecepatan server setelah diamankan, kamu dapat melanjutkan ke alur optimasi performa melalui panduan cara optimasi performa LAMP Stack.

Ita Sugiharti

If this post has reached you, then I hope it helps. If you have any questions or feedback, just leave a comment.

Berlangganan Artikel

Dapatkan artikel, free ebook dan video
terbaru dari DomaiNesia

{{ errors.name }} {{ errors.email }}
Migrasi ke DomaiNesia

Migrasi Hosting ke DomaiNesia Gratis 1 Bulan

Ingin memiliki hosting dengan performa terbaik? Migrasikan hosting Anda ke DomaiNesia. Gratis jasa migrasi dan gratis 1 bulan masa aktif!

Ya, Migrasikan Hosting Saya