OffshoreVps
Keamanan27 Sep 20266 menit bacaOleh tim OffshoreVps

Perkuat Keamanan Web Server: UFW, fail2ban, dan Pengaturan Nginx

Firewall default-deny, jail fail2ban, header Nginx yang lebih aman, pembatasan laju, dan pembaruan otomatis untuk VPS yang menjalankan situs web.

Web server baru dipindai dalam hitungan menit setelah online. Sebagian besar traffic itu otomatis dan tidak berbahaya jika Anda telah melakukan hal-hal dasar. Panduan ini melangkah satu tahap melampaui penguatan 15 menit dan mencakup firewall, perlindungan brute-force dengan fail2ban, dan konfigurasi Nginx yang lebih aman.

Jendela terminal di VPS yang menampilkan perintah untuk memperkuat keamanan web server dengan UFW, fail2ban, dan Nginx, diawali dengan “sudo ufw default deny incoming”
Jenis perintah yang akan Anda jalankan di server dalam panduan ini.

Langkah 1: firewall default-deny dengan UFW

Izinkan hanya yang Anda perlukan, dan blokir sisanya. Tambahkan SSH terlebih dahulu agar Anda tidak terkunci di luar.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Jika Anda memakai port SSH non-standar, izinkan port itu sebagai ganti OpenSSH.

Langkah 2: fail2ban untuk kegagalan berulang

fail2ban memantau log dan memblokir alamat IP yang terus gagal login.

sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'CONF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true
CONF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Gunakan kunci SSH dan matikan juga login dengan kata sandi. Lihat kunci SSH dijelaskan.

Langkah 3: sembunyikan versi Nginx dan tambahkan header yang aman

Di /etc/nginx/nginx.conf, di dalam blok http:

server_tokens off;

Di blok server situs Anda:

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Tambahkan header HSTS hanya setelah HTTPS berfungsi untuk domain Anda dan semua subdomain yang Anda gunakan.

Langkah-langkah panduan ini secara berurutan: 1. firewall default-deny dengan UFW; 2. fail2ban untuk kegagalan berulang; 3. sembunyikan versi Nginx dan tambahkan header yang aman; 4. batasi permintaan yang menyalahgunakan; 5. selalu perbarui; 6. Apa yang perlu dipantau
Langkah-langkah dalam panduan ini, secara berurutan.

Langkah 4: batasi permintaan yang menyalahgunakan

Pembatasan laju memperlambat upaya brute-force pada halaman login:

# in the http block
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

# in your server block
location = /wp-login.php {
    limit_req zone=login burst=5 nodelay;
    # ...your usual PHP handling
}

Uji dan terapkan dengan sudo nginx -t && sudo systemctl reload nginx.

Langkah 5: selalu perbarui

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

Pembaruan keamanan otomatis menutup celah yang diketahui tanpa Anda perlu berbuat apa pun.

Apa yang perlu dipantau

  • Periksa blokir dengan sudo fail2ban-client status sshd.
  • Tinjau /var/log/nginx/error.log sesekali.
  • Jika Anda berada di belakang proxy atau CDN, pastikan fail2ban membaca IP klien yang sebenarnya, atau Anda bisa memblokir proxy Anda sendiri.