Episode ini membahas kontrol akses berbasis IP: matcher remote_ip dengan CIDR, whitelist dan blacklist, directive trusted_proxies untuk mendeteksi IP asli, GeoIP filtering dengan plugin, serta rate limiting untuk perlindungan DDoS dasar.

Tidak semua pengunjung layak masuk. Panel admin sebaiknya hanya bisa diakses dari kantor. Endpoint internal sebaiknya hanya menerima request dari service tertentu. Episode 19 membahas kontrol akses berbasis IP di Caddy.
Kalian akan belajar matcher remote_ip dengan notasi CIDR untuk whitelist dan blacklist, directive trusted_proxies agar Caddy tahu IP asli klien di balik proxy, GeoIP filtering dengan plugin untuk kontrol berbasis negara, serta rate limiting untuk melindungi dari serangan.
Access control berlapis membuat sistem jauh lebih tahan banting — dan semua alat ini tersedia di Caddy.
Matcher remote_ip mencocokkan alamat IP klien:
example.com {
@kantor {
remote_ip 192.168.1.0/24
}
handle @kantor {
root * /var/www/admin
file_server
}
respond "Akses ditolak" 403
}Hanya klien dari subnet 192.168.1.0/24 yang bisa mengakses /admin. Yang lain mendapat 403. remote_ip menerima satu atau banyak alamat serta range CIDR.### Whitelist dan Blacklist
Pola whitelist — hanya daftar IP yang diizinkan:
example.com {
@boleh {
remote_ip 10.0.0.5 10.0.0.6 203.0.113.7
}
handle @boleh {
reverse_proxy localhost:8080
}
respond "Tidak diizinkan" 403
}Pola blacklist — semua kecuali daftar yang diblokir:
example.com {
@dilarang {
remote_ip 198.51.100.0/24
}
respond @dilarang "Diblokir" 403
root * /var/www
file_server
}Whitelist lebih ketat (default tolak), blacklist lebih terbuka (default izinkan). Untuk resource sensitif, whitelist adalah pilihan yang lebih aman.
Ketika Caddy berada di belakang proxy lain (CDN, load balancer cloud), IP yang terlihat bukan IP asli klien. Header X-Forwarded-For berisi IP asli, tapi header ini bisa dipalsukan. trusted_proxies memberi tahu Caddy proxy mana yang tepercaya:
{
servers {
trusted_proxies static 10.0.0.0/8 172.16.0.0/12
}
}
example.com {
@internal {
remote_ip 192.168.1.0/24
}
handle @internal {
respond "Internal"
}
}trusted_proxies static 10.0.0.0/8 menandai semua IP di range itu sebagai proxy tepercaya. Hanya header dari proxy tepercaya yang dipercaya sebagai IP asli.
Dengan trusted_proxies yang benar, matcher remote_ip bekerja dengan IP asli klien, bukan IP proxy. Tanpa itu, semua klien tampak berasal dari IP CDN — whitelist kantor menjadi tidak berguna.
Kontrol berbasis negara membutuhkan plugin (episode 29). Dengan modul GeoIP terpasang, blokir atau izinkan berdasarkan negara:
example.com {
@terlarang {
ip_country CN RU
}
respond @terlarang "Tidak tersedia" 403
root * /var/www
file_server
}ip_country CN RU (melalui plugin caddy-security atau GeoIP module) memblokir traffic dari negara tertentu. Ini berguna untuk:
Catatan: GeoIP berbasis alamat IP bisa dikelabui VPN dan tidak 100 persen akurat — jadikan lapisan pertahanan, bukan satu-satunya.
Rate limiting membatasi jumlah request dari satu IP dalam periode waktu. Modul caddy-rate-limit (plugin, episode 29) memakainya seperti:
{
order rate_limit before basicauth
}
example.com {
rate_limit {
zone api {
key {remote_host}
events 60
window 1m
}
}
}rate_limit membatasi 60 request per menit per IP pada path yang cocok. Perlindungan DDoS dasar memakai pola ini bersama matcher:
example.com {
@login {
path /api/login
}
rate_limit @login {
zone login {
key {remote_host}
events 10
window 1m
}
}
reverse_proxy localhost:8080
}Endpoint login dibatasi 10 request per menit per IP — menghambat brute force. rate_limit @login menerapkan batas hanya pada path login.
Episode 19 membangun kontrol akses berbasis IP: matcher remote_ip dengan CIDR untuk whitelist dan blacklist, directive trusted_proxies agar IP asli terdeteksi di balik proxy, GeoIP filtering untuk kontrol regional, serta rate limiting untuk melindungi endpoint sensitif.
Inti yang harus dibawa pulang:
remote_ip menerima alamat IP dan range CIDR.trusted_proxies wajib disetel saat ada proxy di depan Caddy.Di episode 20 selanjutnya kita akan membahas security headers & CORS — directive header untuk menambah dan menghapus header, semua security headers penting seperti CSP dan HSTS, konfigurasi CORS lengkap dengan preflight OPTIONS, serta praktik terbaik untuk menyembunyikan informasi server.