Episode ini membahas regulation, pertahanan Authelia terhadap serangan brute force. Mengatur mode ban berbasis pengguna atau IP, max retries, jendela waktu, durasi ban, membaca log kegagalan, hingga menyetelnya tanpa menjebak pengguna yang sah.

Di episode 20 kalian mengelola consent — pintu masuk bagi aplikasi yang sah. Episode 21 ini berbalik 180 derajat: menghadapi penyerang yang mencoba menebak password secara membabi buta. Serangan itu disebut brute force, dan Authelia menjawabnya lewat regulation.
Bayangkan ATM yang menolak kartu setelah tiga kali PIN salah. Itulah prinsip regulation: bukan sekadar mencegah satu percobaan gagal, tetapi mempersulit upaya berulang dalam jangka pendek. Penyerang butuh ribuan percobaan untuk menebak password; regulation membuat ribuan percobaan itu mustahil dilakukan dalam waktu singkat.
Password kuat pun tetap rapuh jika penyerang bisa mencoba tanpa batas. Serangan brute force dan credential stuffing — memakai kombinasi password yang bocor dari situs lain — bekerja dengan volume: coba jutaan kombinasi sampai satu cocok. Tanpa pembatas, endpoint login Authelia adalah mesin slot yang tidak pernah menolak pemain.
Regulation mengubah permainan: setiap kegagalan dicatat, dan jika kegagalan melampaui ambang dalam jendela waktu tertentu, Authelia menghentikan percobaan lebih lanjut untuk sementara.
Regulation diatur di section regulation:
regulation:
modes:
- 'ip'
max_retries: 3
find_time: 2m
ban_time: 15m| Opsi | Default | Fungsi |
|---|---|---|
modes | ['user'] | Subjek ban: user untuk akun, ip untuk alamat jaringan |
max_retries | 3 | Jumlah percobaan gagal sebelum ban; 0 menonaktifkan regulation |
find_time | 2m | Jendela waktu yang dianalisis untuk percobaan gagal |
ban_time | 5m | Durasi ban setelah ambang terlewati |
Dengan konfigurasi di atas, tiga kali gagal dalam dua menit akan memblokir IP selama lima belas menit.
Authelia mendukung dua subjek ban:
user — akun menjadi subjek ban. Percobaan gagal pada akun yang sama dihitung, dari IP mana pun.ip — alamat jaringan menjadi subjek ban. Percobaan dari IP yang sama dihitung, untuk akun mana pun.Keduanya bisa digabung: modes: ['user', 'ip']. Default Authelia adalah user, tetapi dokumentasi merekomendasikan ip. Alasan utamanya, ban berbasis akun bisa disalahgunakan penyerang untuk sengaja mengunci akun korban (denial of service), sedangkan ban berbasis IP lebih sulit diprovokasi dari luar. Tentu saja IP bisa diganti — jadi di lingkungan publik, pertimbangkan kombinasi keduanya.
Regulation bekerja pada percobaan gagal faktor pertama, yaitu kombinasi username dan password. Setiap kegagalan tercatat di storage backend bersama informasi waktu, dan jendela find_time menentukan penghitungannya: kegagalan yang lebih lama dari find_time tidak lagi dihitung.
Important
Setelah ban berakhir, akun atau IP tidak otomatis bersih selamanya. Jika ban tercatat di database, pemeriksaan tetap mengacu pada catatan itu. Kelola entri ban lewat CLI authelia storage bans.
Saat ban aktif, Authelia menolak request autentikasi dengan status 403 dan pesan yang menjelaskan bahwa akun atau alamat sedang dibanned. Pengguna sah yang terkena ban tidak bisa login sampai ban_time berlalu atau ban dihapus manual — ini efek yang menyakitkan tetapi memang disengaja.
Untuk memantau percobaan gagal dan kejadian ban, periksa log Authelia:
authelia storage bans list
docker logs authelia 2>&1 | grep -iE "authentication attempt|banned"authelia storage bans list menampilkan entri ban yang tersimpan di database. Baris log mencantumkan pengguna, IP asal, dan alasan kegagalan. Pola yang mencurigakan — banyak kegagalan dari satu IP atau satu akun — adalah tanda awal serangan.
Bayangkan konfigurasi max_retries: 3, find_time: 2m, dan ban_time: 15m. Seorang penyerang mencoba menebak password akun root tiga kali dalam satu menit. Authelia mencatat tiga kegagalan dalam jendela dua menit, lalu memblokir IP penyerang selama lima belas menit. Potongan log yang terlihat kira-kira seperti ini:
level=info msg="Authentication attempt for user 'root' failed"
level=info msg="Authentication attempt for user 'root' failed"
level=warning msg="Authentication ban applied to IP 203.0.113.5"Perhatikan levelnya: kegagalan biasa dicatat di level info, sedangkan ban dinaikkan ke level warning. Memfilter log pada level warning di sistem alerting menjadi alarm sederhana yang memberitahu kalian bahwa penyerang sedang mencoba masuk.
Regulation adalah keseimbangan antara keamanan dan kenyamanan. Beberapa pedoman:
max_retries sedikit lebih tinggi atau find_time lebih pendek untuk mengurangi ban palsu.max_retries dan ban_time, bukan menurunkannya ke nol.Tip
Kalau pengguna sah sering terban dengan modes: ['ip'], ingat bahwa IP itu dipakai bersama banyak orang. Naikkan max_retries atau persempit find_time, lalu amati selama beberapa hari sebelum menarik kesimpulan.
Kadang ban perlu dicabut atau dipasang secara manual — misalnya saat penyerang jelas menargetkan sebuah akun. CLI authelia storage bans memungkinkan hal ini:
authelia storage bans list
authelia storage bans delete --id 1Dengan perintah di atas kalian bisa melihat siapa yang sedang diblokir, mencabut ban yang salah sasaran, dan mencatat ban yang dipasang otomatis oleh regulation.
Di episode ini kalian memahami:
max_retries, find_time, dan ban_time mengendalikan kapan dan berapa lama ban terjadi.user dan ip menentukan subjek ban; keduanya bisa digabung.authelia storage bans menjadi alat monitoring serta pengelolaan.Regulation melindungi dari sisi aplikasi, tetapi lapisan berikutnya melindungi seluruh koneksi. Di episode 22, kita membahas Security Headers & HTTPS — HSTS, CSP, dan kebijakan TLS yang membuat browser dan pengguna tetap aman. Sampai jumpa!