Amankan VPS Kamu: Blokir Semua IP Kecuali Cloudflare

Server Security Thumbnail

Kalau kamu sudah pakai Cloudflare sebagai proxy di depan domain, tapi VPS kamu masih bisa diakses langsung lewat IP publiknya, sebenarnya kamu belum benar-benar "terlindungi". Orang masih bisa bypass Cloudflare, langsung tembak ke IP server kamu, dan itu artinya semua fitur keamanan Cloudflare seperti WAF, rate limiting, DDoS protection jadi percuma.

Solusinya sebenarnya simpel: kunci firewall di VPS supaya hanya menerima traffic dari IP range milik Cloudflare. Jadi siapa pun yang coba akses langsung ke IP server, otomatis ditolak. Yang boleh masuk cuma traffic yang sudah lewat Cloudflare dulu.

Di artikel ini saya bahas cara setup-nya pakai UFW (Uncomplicated Firewall), yang biasanya sudah tersedia di kebanyakan distro Linux seperti Ubuntu atau Debian.

Kenapa Ini Penting

Banyak yang mikir kalau sudah pasang Cloudflare di depan domain, otomatis semua aman. Padahal kalau IP asli VPS kamu ketahuan (misalnya dari histori DNS lama, subdomain yang belum di-proxy, atau salah konfigurasi), orang bisa langsung serang ke IP itu tanpa perlu lewat Cloudflare sama sekali.

Dengan membatasi akses hanya dari IP range Cloudflare, kamu dapat beberapa keuntungan:

Yang Perlu Disiapkan

Langkah-Langkah Konfigurasi

1. Cek Status UFW Saat Ini

Sebelum ubah apa-apa, cek dulu rule yang sudah ada supaya kamu tahu kondisi awal servernya.

sudo ufw status verbose

Kalau UFW belum aktif, jangan langsung diaktifkan dulu sebelum semua rule di bawah ini selesai ditambahkan. Kalau keburu aktif tanpa rule yang benar, kamu bisa terkunci dari SSH sendiri.

2. Pastikan Port SSH Tetap Bisa Diakses

Ini langkah paling penting yang sering kelupaan. Pastikan port SSH kamu tetap diizinkan, idealnya dibatasi hanya dari IP kamu sendiri, bukan dari semua orang.

sudo ufw allow from IP_KAMU to any port 22 proto tcp

Ganti IP_KAMU dengan IP publik kamu sendiri. Kalau IP kamu dinamis dan sering berubah, minimal izinkan port SSH secara umum dulu, nanti bisa diperketat belakangan pakai VPN atau IP whitelist yang lebih fleksibel.

3. Hapus atau Batasi Rule Lama untuk Port Web

Biasanya sebelumnya kamu punya rule seperti ini yang mengizinkan semua orang akses port 80 dan 443:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Rule seperti ini yang bikin server kamu bisa diakses langsung tanpa lewat Cloudflare. Nanti kita ganti supaya port ini hanya terbuka untuk IP range Cloudflare saja.

Cek dulu rule yang ada dengan nomor urutnya:

sudo ufw status numbered

Lalu hapus rule lama untuk port 80 dan 443 kalau ada:

sudo ufw delete [nomor_rule]

4. Tambahkan IP Range Cloudflare

Ini bagian utamanya. Cloudflare punya daftar IP range resmi yang mereka publikasikan di cloudflare.com/ips, dan daftar ini bisa berubah sewaktu-waktu, jadi sebaiknya jangan cuma copy-paste sekali terus dilupakan. Nanti saya kasih cara biar bisa update otomatis juga.

Untuk sekarang, ini rentang IPv4 yang berlaku per artikel ini ditulis:

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22

Dan untuk IPv6:

2400:cb00::/32
2606:4700::/32
2803:f800::/32
2405:b500::/32
2405:8100::/32
2a06:98c0::/29
2c0f:f248::/32

Tambahkan satu per satu ke UFW untuk port 80 dan 443:

for ip in 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22; do
  sudo ufw allow from $ip to any port 80 proto tcp
  sudo ufw allow from $ip to any port 443 proto tcp
done

Kalau server kamu juga menerima traffic IPv6, tambahkan juga:

for ip in 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32; do
  sudo ufw allow from $ip to any port 80 proto tcp
  sudo ufw allow from $ip to any port 443 proto tcp
done

5. Set Default Policy dan Aktifkan UFW

Setelah semua rule di atas masuk, set default policy supaya semua traffic yang nggak match rule otomatis ditolak.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Baru setelah itu aktifkan:

sudo ufw enable

Cek lagi hasil akhirnya:

sudo ufw status verbose

Pastikan port SSH kamu masih ada di daftar allow, dan port 80/443 cuma terbuka untuk IP range Cloudflare.

6. Aktifkan Mode "Full (Strict)" di Cloudflare

Supaya makin solid, di dashboard Cloudflare, masuk ke SSL/TLS, lalu pilih mode Full (Strict). Ini memastikan koneksi antara Cloudflare dan VPS kamu juga terenkripsi pakai sertifikat yang valid, bukan cuma koneksi client ke Cloudflare saja.

Kalau belum punya sertifikat di server, kamu bisa pakai Origin CA Certificate dari Cloudflare, gratis dan tinggal generate dari dashboard.

Otomatisasi Update IP Range Cloudflare

Karena IP range Cloudflare bisa berubah, sebaiknya buat script kecil yang narik daftar terbaru dari https://www.cloudflare.com/ips-v4/ dan https://www.cloudflare.com/ips-v6/, lalu update rule UFW secara otomatis. Ini bisa dijadwalkan lewat cron, misalnya jalan sekali seminggu, supaya kamu nggak perlu update manual tiap kali Cloudflare menambah atau mengurangi range mereka.

Kalau kamu pakai Nginx sebagai reverse proxy, jangan lupa juga tambahkan modul ngx_http_realip_module supaya log dan rate limiting di level aplikasi tetap mendeteksi IP asli pengunjung, bukan IP Cloudflare yang jadi perantara.

Hal yang Sering Kelewat

Beberapa poin tambahan yang sebaiknya kamu cek juga:

Penutup

Menutup akses langsung ke VPS dan hanya mengizinkan traffic dari Cloudflare itu langkah kecil yang dampaknya besar buat keamanan aplikasi kamu. Bukan cuma soal blokir bot iseng, tapi juga bikin semua investasi kamu di fitur keamanan Cloudflare seperti WAF dan rate limiting benar-benar berfungsi seperti seharusnya, karena semua traffic wajib lewat pintu yang sudah kamu kontrol.

Setelah setup ini jalan, langkah lanjutannya yang bisa kamu eksplorasi adalah Cloudflare Access untuk proteksi endpoint sensitif, atau fail2ban di level VPS untuk lapisan tambahan kalau suatu saat kamu perlu buka akses langsung untuk keperluan tertentu.

fikri

© 2026 Fikri Rudiansyah - Personal Blog

Facebook 𝕏 GitHub