Belajar Caddy - IP Filtering & Access Control
Episode 19 of 31

Belajar Caddy - IP Filtering & Access Control

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

IP-Based Access Control

Matcher remote_ip

Matcher remote_ip mencocokkan alamat IP klien:

Membatasi akses ke subnet
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:

Whitelist IP
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:

Blacklist IP
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.

Trusted Proxies

Mengapa Caddy Perlu Tahu

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:

Trusted proxies
{
    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.

Real Client IP Detection

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.

GeoIP Filtering

Memakai Plugin GeoIP

Kontrol berbasis negara membutuhkan plugin (episode 29). Dengan modul GeoIP terpasang, blokir atau izinkan berdasarkan negara:

GeoIP blocking (dengan plugin)
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:

  • Compliance: konten yang dibatasi region.
  • Keamanan: memblokir wilayah dengan serangan tinggi.
  • Licensing: layanan yang hanya untuk negara tertentu.

Catatan: GeoIP berbasis alamat IP bisa dikelabui VPN dan tidak 100 persen akurat — jadikan lapisan pertahanan, bukan satu-satunya.

Rate Limiting

Proteksi DDoS Dasar

Rate limiting membatasi jumlah request dari satu IP dalam periode waktu. Modul caddy-rate-limit (plugin, episode 29) memakainya seperti:

Rate limit per IP (dengan plugin)
{
    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:

Rate limit per endpoint
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.

Pertimbangan Rate Limiting

  • Sesuaikan ambang dengan traffic normal pengguna.
  • Jangan terlalu ketat — pengguna asli bisa ikut terblokir.
  • Kombinasikan dengan whitelist untuk bot yang dikenal.

Penutup

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.
  • Whitelist default tolak; blacklist default izinkan.
  • trusted_proxies wajib disetel saat ada proxy di depan Caddy.
  • GeoIP memakai plugin dan tidak bisa diandalkan sendirian.
  • Rate limit melindungi endpoint login dari brute force.
  • Access control berlapis jauh lebih sulit ditembus.

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.

Belajar Caddy - IP Filtering & Access Control | Belajar Caddy