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.
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 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.logsesekali. - Jika Anda berada di belakang proxy atau CDN, pastikan fail2ban membaca IP klien yang sebenarnya, atau Anda bisa memblokir proxy Anda sendiri.