Berikut adalah rincian teknis tahapan pengamanan aplikasi Laravel yang berjalan di Ubuntu dengan Nginx, database MySQL, dan file storage MinIO. Tujuannya adalah mengamankan server, aplikasi, dan data dari potensi hacking.


✅ 1. Keamanan Server (Ubuntu)

???? Pengamanan Akses SSH

  • Gunakan port non-standar (ubah dari port 22).
  • Nonaktifkan login root langsung:
PermitRootLogin no

  • Gunakan key-based authentication, nonaktifkan password login:
PasswordAuthentication no

  • Pasang fail2ban untuk memblokir brute force:
sudo apt install fail2ban

???? Update Sistem

  • Selalu update sistem:
sudo apt update && sudo apt upgrade -y


✅ 2. Keamanan Web Server (Nginx)

???? Batasi Akses File dan Directory

  • Jangan expose .env, .git, dll:
location ~ /\.(?!well-known).* {
    deny all;
}

???? Header Keamanan

Tambahkan di konfigurasi Nginx:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

???? HTTPS

  • Gunakan Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx


✅ 3. Keamanan Laravel

???? Konfigurasi .env

  • Pastikan file .env tidak bisa diakses publik.
  • Gunakan variabel aman, contoh:
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:...

???? File Permission

  • Jangan beri permission 777.
  • Umumnya:
chown -R www-data:www-data /path/to/laravel
find storage bootstrap/cache -type d -exec chmod 775 {} \;
find storage bootstrap/cache -type f -exec chmod 664 {} \;

???? Proteksi CSRF & XSS

  • Gunakan CSRF token di setiap form.
  • Gunakan {{ }} (escaped output) untuk output HTML.

???? Validasi Upload File

  • Validasi mimetype & ukuran file.
  • Simpan file di direktori storage/app/ dan serve melalui route yang terautentikasi.

✅ 4. Keamanan Database (MySQL)

???? User & Privilege

  • Gunakan user database terpisah dengan akses minimum.
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'laravel_user'@'localhost';

???? Bind Address

  • Batasi koneksi hanya dari localhost:
bind-address = 127.0.0.1

???? Password Kuat

  • Gunakan password database yang panjang dan kompleks.

✅ 5. Keamanan MinIO

???? Gunakan HTTPS

  • Jangan jalankan MinIO tanpa TLS di production.
minio server --certs-dir /path/to/certs

???? Access Key & Secret Key

  • Simpan di .env, jangan hardcode.
MINIO_ACCESS_KEY=AKIA...
MINIO_SECRET_KEY=SuperSecret...

???? Bucket Policy

  • Jangan buat bucket public kecuali sangat diperlukan.
  • Pastikan default bucket policy = none.

✅ 6. Proteksi Tambahan

????️ Firewall

  • Gunakan UFW:
sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx Full'
sudo ufw enable

????️ WAF (Web Application Firewall)

  • Gunakan layanan WAF seperti Cloudflare, atau pasang ModSecurity di Nginx.

???? Monitoring & Log

  • Aktifkan Laravel log di storage/logs/.
  • Pasang monitoring seperti:
    • Fail2ban
    • Auditd
    • Logwatch
    • Sentry / Bugsnag / Laravel Telescope

✅ 7. Backup & Disaster Recovery

  • Otomatisasi backup:
    • Database (mysqldump)
    • Storage file (rsync / rclone ke S3/GDrive)
    • .env file
  • Simpan di lokasi terpisah.
  • Uji restore secara berkala.
Tentu! Kita bisa tambahkan beberapa lapisan pengamanan lanjutan untuk memperkuat keamanan aplikasi Laravel kamu dari sisi aplikasi, server, dependensi, dan praktik DevOps. Berikut lanjutannya:

✅ 8. Laravel: Best Practice & Hardening

???? Route Protection

  • Lindungi route admin dengan middleware dan prefix.
  • Contoh:
Route::middleware(['auth', 'is_admin'])->prefix('admin')->group(function () {
    Route::get('/', [AdminController::class, 'index']);
});

????️ Rate Limiting & Throttling

  • Gunakan throttle middleware untuk mencegah brute-force:
Route::middleware('throttle:60,1')->group(function () {
    // routes here
});

???? Laravel Security Scanner

  • Gunakan package seperti:
composer require laravel-security/laravel-security
php artisan security:check


✅ 9. Hardening MinIO Storage

???? IAM Policy (jika pakai MinIO multi-user)

  • Gunakan policy JSON untuk batasi akses user tertentu ke bucket tertentu.
  • Contoh policy:
{
  "Version": "2012-10-17",
  "Statement": [{
    "Action": ["s3:GetObject", "s3:PutObject"],
    "Effect": "Allow",
    "Resource": ["arn:aws:s3:::my-bucket/*"]
  }]
}

???? Audit Access Log MinIO

  • Aktifkan log audit:
MINIO_AUDIT_WEBHOOK_ENABLE="on"
MINIO_AUDIT_WEBHOOK_ENDPOINT="http://logserver:9000"


✅ 10. Dependency & Library Security

???? Update Composer Dependencies

  • Cek paket yang rawan:
composer audit
composer outdated

⛔ Hindari Package Tidak Terpercaya

  • Gunakan hanya package dari maintainer terpercaya.
  • Cek rating di packagist.org.

???? Kunci Versi Dependency

  • Di composer.json, pastikan kamu kunci versi:
"require": {
  "laravel/framework": "^10.0"
}


✅ 11. Security Headers di Laravel (Tambahan dari Nginx)

Pasang package seperti Bepsvpt/secure-headers:
composer require bepsvpt/secure-headers

Di AppServiceProvider.php:
use Bepsvpt\SecureHeaders\SecureHeaders;

public function boot()
{
    SecureHeaders::fromConfig(config('secure-headers'))->send();
}


✅ 12. Isolasi & Containerization (Opsional Advanced)

???? Gunakan Docker (jika memungkinkan)

  • Pisahkan layanan Laravel, MySQL, dan MinIO ke dalam container berbeda.
  • Gunakan network bridge untuk membatasi akses antar container.
  • Tambahkan network firewall internal via iptables atau Docker internal firewall.

✅ 13. CI/CD & Deployment Aman

⚙️ Pastikan Deploy Otomatis Aman

  • Jangan hardcode .env atau credential ke Git.
  • Gunakan GitHub Actions, GitLab CI, dsb. dengan secret environment variable.

???? Monitoring Kode Berbahaya

  • Aktifkan Laravel Telescope atau Laravel Debugbar di dev only, jangan pernah di production.

✅ 14. Tools Eksternal yang Disarankan

TujuanTools/Service
Monitoring & AlertUptime Robot, StatusCake, Sentry
Vulnerability ScanningOWASP ZAP, SonarCloud, Nessus (advanced)
Penetration Test OtomatisNikto, Burp Suite, Metasploit (advanced)
File Integrity MonitoringAIDE (Advanced Intrusion Detection Env.)

Mantap! Kita lanjutkan dengan lapisan keamanan tambahan tingkat lanjut yang sering luput tapi krusial, terutama untuk environment production-level Laravel stack seperti milikmu.

✅ 15. Keamanan Session & Auth Laravel

???? Gunakan Driver Session yang Aman

  • Pilih redis atau database dibandingkan file:
SESSION_DRIVER=database

⏳ Session Expiry & Idle Timeout

  • Atur lifetime yang masuk akal di config/session.php:
'lifetime' => 30,
'expire_on_close' => true,

???? Batasi Login Ganda (Opsional)

  • Implementasi satu sesi per user, atau logout otomatis saat login dari device lain.

✅ 16. Proteksi Terhadap SQL Injection, XSS, dan LFI

???? SQL Injection

  • Selalu gunakan Eloquent ORM atau Query Builder.
// aman:
User::where('email', $request->email)->first();

// rentan:
DB::select("SELECT * FROM users WHERE email = '$email'");

???? Local File Inclusion (LFI)

  • Jangan pernah load file dari input user langsung. Validasi path/file yang digunakan.

✅ 17. Keamanan Cache & Queue

???? Redis/Queue Auth Protection

  • Redis jangan di-expose publik. Pastikan bind ke 127.0.0.1:
bind 127.0.0.1 ::1
requirepass your_redis_password

???? Queue Worker

  • Jalankan queue worker sebagai user non-root.
  • Gunakan supervisord atau systemd untuk mengatur restart otomatis, bukan script langsung.

✅ 18. Laravel Scheduler dan Task Otomatis

⏰ Scheduler Command

Jalankan scheduler dengan user terbatas:
* * * * * www-data php /path-to-app/artisan schedule:run >> /dev/null 2>&1

Hindari penggunaan script seperti:
* * * * * root php artisan schedule:run


✅ 19. Audit Log & Logging Laravel

???? Logging Terarah

  • Gunakan daily atau single logging channel:
LOG_CHANNEL=daily

???? Proteksi File Log

  • Pastikan permission 600 untuk file .log di storage/logs.
  • Hindari menyimpan informasi sensitif di log (misalnya password, token).

✅ 20. Security dari Sisi Browser/Client

???? Content Security Policy (CSP)

  • Tambahkan CSP header untuk mencegah XSS:
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';";

???? Gunakan Subresource Integrity (SRI)

  • Jika menggunakan CDN, tambahkan integrity hash:
<script src="..." integrity="sha384-..." crossorigin="anonymous"></script>


✅ 21. Environment-Specific Settings

???? .env Production Safety

Jangan pernah:
APP_DEBUG=true
APP_ENV=local

Harus:
APP_DEBUG=false
APP_ENV=production

???? Pisahkan config antara dev dan production

  • Gunakan .env.development, .env.production, dan pisahkan build/CI/CD-nya.

✅ 22. Security Patching & Maintenance SOP

????️ Jadwal Maintenance

  • Tetapkan jadwal rutin untuk:
    • Update dependencies (composer update)
    • Cek audit keamanan (composer audit)
    • Backup sistem

???? Laravel Upgrade Guide


✅ 23. Deteksi Dini & Notification System

???? Sistem Notifikasi

  • Integrasikan alert jika:
    • Ada login gagal berturut-turut
    • Ada percobaan akses file ilegal
    • Laravel log menunjukkan error 500/403/401 yang tinggi

???? Kirim ke Slack, Telegram, atau Email via webhook/notif custom.


Mantap, semangat pengamanannya luar biasa! ????????
Kita lanjut ke lapisan paling dalam dan tambahan ekstrem security yang biasanya diterapkan di enterprise-level systems.

✅ 24. Isolation dan Network-Level Security

???? UFW atau iptables (Firewall Ubuntu)

Batasi akses ke port yang digunakan aplikasi saja:
sudo ufw default deny incoming
sudo ufw allow 22      # SSH
sudo ufw allow 80      # HTTP
sudo ufw allow 443     # HTTPS
sudo ufw allow from 127.0.0.1 to any port 3306  # MySQL hanya local
sudo ufw enable

Atau gunakan iptables dengan lebih detail untuk kontrol antar service (MySQL, MinIO, Redis, dll.).

✅ 25. Anti Malware & Intrusion Detection

????️ Install & Konfigurasi Fail2Ban

  • Melindungi dari brute-force (SSH, Nginx, Laravel login):
sudo apt install fail2ban

  • Tambahkan jail untuk nginx dan SSH di /etc/fail2ban/jail.local.

???? Install & Konfigurasikan rkhunter atau chkrootkit

Untuk mendeteksi rootkit dan malware:
sudo apt install rkhunter
sudo rkhunter --update
sudo rkhunter --checkall


✅ 26. Laravel API Protection

???? Gunakan Laravel Sanctum atau Passport

  • Jika aplikasi kamu menyediakan API:
    • Gunakan token-based auth (bukan session)
    • Batasi scope dan waktu berlaku token
    • Throttle request menggunakan middleware

✅ 27. DNS & Domain Security

???? Gunakan DNS provider dengan proteksi DNSSEC dan rate-limit (seperti Cloudflare)

  • Cloudflare juga bisa memblokir bot, WAF (Web Application Firewall), dan DDoS basic.

✅ 28. Audit & Monitoring File Integrity

???? Gunakan AIDE (Advanced Intrusion Detection Environment)

Untuk mendeteksi file yang berubah secara tidak wajar (backdoor, deface, dsb.)
sudo apt install aide
sudo aideinit


✅ 29. Monitoring Resource & Akses

???? Gunakan Tools seperti:

  • htop, iftop, iotop untuk resource
  • auditd untuk log semua aktivitas file
  • netstat -tulpn atau ss -tulpn untuk cek service dan port aktif
  • last dan who untuk monitoring login user

✅ 30. Backup dan Recovery

???? Backup Otomatis & Terenskripsi

Jadwal backup database:
mysqldump -u root -p db_name | gzip > backup.sql.gz

Simpan di lokasi aman (MinIO bucket yang terenkripsi, atau Google Drive, dsb.).
Gunakan script cron dengan log & verifikasi checksum:
sha256sum backup.sql.gz >> backup.log


✅ 31. Email Security (Jika Laravel kirim email)

  • Gunakan provider seperti Mailgun/SendGrid/SMTP Auth
  • Pastikan .env tidak menyimpan:
    • Email debug mode
    • Email testing address
    • SMTP yang tidak secure (MAIL_ENCRYPTION=null)

✅ 32. Security Penetration Test Manual

Jika memungkinkan, lakukan pen-test secara manual atau semi-otomatis:
  • Tools rekomendasi:
    • OWASP ZAP: untuk scan keamanan web secara umum
    • Nikto: untuk mencari celah web server
    • wpscan (walau bukan untuk Laravel) bisa scan celah umum
    • SQLMap: untuk mencoba injection dari form yang rentan

✅ 33. Zero Trust Principle

  • Jangan anggap sistem internal aman. Terapkan:
    • Validasi semua input walau dari admin
    • Audit file upload meski dari user terpercaya
    • Jangan share session di subdomain (atur cookie domain di .env)

✅ 34. Dokumentasi & Log Aktivitas Developer

  • Simpan log perubahan:
    • Git commit + deskripsi jelas
    • Logging deploy otomatis
    • Daftar siapa yang akses server dan apa yang diubah

✅ 35. Security Awareness Developer

???? Biasakan tim untuk:

  • Tidak push .env, .sql, atau file sensitif ke Git
  • Selalu audit pull request
  • Tidak coding eval(), exec(), shell_exec() sembarangan