![]()
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:
- Serangan brute force dan bot langsung mentok di firewall, nggak sampai ke aplikasi kamu
- WAF dan rate limiting Cloudflare jadi benar-benar efektif karena semua traffic wajib lewat sana
- Mengurangi exposure server kamu ke internet secara langsung
- Kalau IP asli bocor, dampaknya jauh lebih kecil karena tetap nggak bisa diakses langsung
Yang Perlu Disiapkan
- VPS dengan akses root atau sudo (saya asumsikan pakai Debian/Ubuntu)
- UFW sudah terpasang (kalau belum, install dulu dengan
sudo apt install ufw) - Domain yang sudah di-proxy lewat Cloudflare (ikon awan oranye aktif di DNS record)
- Akses SSH ke VPS, dan pastikan port SSH kamu aman dulu sebelum lanjut (biar nggak kekunci sendiri)
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:
- Pastikan subdomain lain (misalnya subdomain untuk staging, API internal, atau dashboard admin) juga sudah di-proxy lewat Cloudflare. Kalau ada satu subdomain yang DNS-nya "DNS only" (awan abu-abu), itu jadi celah karena langsung expose IP asli.
- Kalau kamu pakai layanan lain di port yang berbeda (misalnya database, panel admin custom), pastikan port itu tidak ikut kebuka ke publik dan cuma bisa diakses dari IP tertentu atau lewat VPN.
- Simpan backup rule UFW kamu sebelum eksperimen, supaya kalau ada yang salah, gampang di-rollback.
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.