Dua prasyarat infrastruktur yang paling sering merusak Kerberos: waktu yang tidak sinkron dan DNS yang tidak siap. Episode ini menyiapkan sinkronisasi waktu dengan chrony, konfigurasi clockskew, record SRV untuk penemuan KDC, fallback hosts, hingga troubleshooting error clock skew yang legendaris.

Di episode 3 kalian melihat alur autentikasi Kerberos secara menyeluruh — dan di sana ada dua hal yang menonjol sebagai fondasi semua alur itu: timestamp yang menjadi bahan authenticator, dan resolusi nama yang menjadi cara client menemukan KDC. Episode 3 menutup dengan peringatan bahwa sinkronisasi waktu adalah bagian dari mekanisme keamanan Kerberos itu sendiri. Sekarang saatnya membuktikannya.
Episode ini akan membedah dua prasyarat infrastruktur yang paling sering merusak implementasi Kerberos di dunia nyata: sinkronisasi waktu dan DNS. Kalian akan menyiapkan NTP dengan chrony, memahami toleransi jam 5 menit dan cara menyesuaikannya, membuat record SRV untuk penemuan KDC, menyiapkan fallback /etc/hosts, serta belajar memecahkan error Clock skew too great yang legendaris. Mari kita mulai dari yang paling kritis: waktu.
Ingat kembali mekanisme di episode 3: authenticator berisi timestamp yang dienkripsi dengan session key, dan server menyimpan timestamp tersebut di replay cache. Keduanya hanya bermakna jika semua pihak memiliki pemahaman waktu yang sama.
Timestamp memiliki dua fungsi:
Tanpa sinkronisasi jam, fungsi ini hancur. Jam client yang lambat membuat timestamp selalu "di masa lalu", sehingga permintaan valid ditolak. Jam client yang terlalu cepat membuat timestamp "dari masa depan", yang juga dicurigai. Kedua kondisi ini muncul sebagai satu pesan error yang sama.
Kerberos memiliki toleransi bawaan sebesar 300 detik (5 menit) — nilai clockskew default. Artinya selisih jam antara client, KDC, dan service boleh sampai 5 menit. Ini cukup longgar untuk mengakomodasi penyimpangan jam normal, tapi cukup ketat untuk mencegah replay attack dengan jendela yang tidak masuk akal.
Ketika selisih jam melampaui toleransi, KDC atau service menjawab dengan error klasik:
kinit: Preauthentication failed while getting initial credentialsClock skew too great (37 seconds)Angka dalam kurung memberi petunjuk besar selisihnya. Perhatikan bahwa error bisa muncul di permukaan sebagai Preauthentication failed — artinya debugging butuh jejak yang lebih dalam. Cara tercepat mengetahuinya: jalankan KRB5_TRACE=1 kinit di lab.
Kita akan memakai chrony — implementasi NTP modern yang tersedia di Ubuntu Server. Install di ketiga VM (KDC dan kedua client):
sudo apt update
sudo apt install chrony -yDi lingkungan lab, semua VM bisa menunjuk ke satu sumber waktu yang sama — misalnya server NTP publik atau VM yang bertindak sebagai time server. Konfigurasi default di /etc/chrony/chrony.conf sudah menunjuk ke pool NTP publik:
# Use public servers from the pool.ntp.org project.
pool 2.ubuntu.pool.ntp.org iburstUntuk lab yang terisolasi, kalian bisa menambahkan server waktu internal. Aktifkan dan verifikasi:
sudo systemctl enable --now chrony
chronyc tracking
timedatectlOutput chronyc tracking menunjukkan status sinkronisasi: field System time menunjukkan selisih jam sistem terhadap sumber waktu. Jika semua VM disinkronkan ke sumber yang sama, selisih antar VM akan sangat kecil — jauh di bawah toleransi 5 menit.
Tip
Kebiasaan profesional: sebelum melakukan praktik Kerberos apa pun, jalankan chronyc tracking di setiap VM dan pastikan tidak ada yang tertinggal. Satu VM dengan jam meleset 6 menit sudah cukup untuk memunculkan error Clock skew too great yang membuat semua praktik lain terasa sia-sia. Pencegahan selalu lebih murah daripada debugging.
Toleransi 5 menit adalah default, tapi bisa diubah melalui file /etc/krb5.conf. Di section [libdefaults], tambahkan nilai clockskew dalam detik:
[libdefaults]
default_realm = EXAMPLE.COM
clockskew = 300
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = trueNilai 300 sama dengan default, tapi menuliskannya secara eksplisit membuat konfigurasi kalian jelas dan mudah disesuaikan. Dalam praktik, admin yang teliti kadang memperbesar nilai ini di lingkungan dengan jam yang sulit dijaga — tetapi hati-hati: semakin besar toleransi, semakin lebar jendela replay attack yang diperbolehkan.
DNS adalah cara client menemukan KDC. Tanpa DNS yang benar, client tidak akan pernah menemukan server yang harus diajak bicara — bahkan jika waktu sudah sempurna.
Kerberos sangat bergantung pada nama:
Service principal menggunakan nama host seperti host/kdc.example.com@EXAMPLE.COM, dan service perlu memvalidasi bahwa client menghubungi nama yang benar. DNS yang tidak konsisten — nama hostname berbeda dengan record DNS, atau reverse lookup yang tidak sesuai — adalah sumber error Server not found in Kerberos database.
Untuk menemukan KDC, client membaca SRV record di zona DNS realm. Tiga record utama yang harus ada:
| SRV Record | Port | Kegunaan |
|---|---|---|
_kerberos._udp.example.com | 88 | Penemuan KDC (UDP) |
_kerberos._tcp.example.com | 88 | Penemuan KDC (TCP) |
_kerberos-master._tcp.example.com | 88 | KDC master (opsional) |
_kpasswd._udp.example.com | 464 | Layanan ubah password |
Contoh di zona BIND (db.example.com):
$ORIGIN example.com.
_kerberos._udp SRV 0 0 88 kdc.example.com.
_kerberos._tcp SRV 0 0 88 kdc.example.com.
_kerberos-master._tcp SRV 0 0 88 kdc.example.com.
_kpasswd._udp SRV 0 0 464 kdc.example.com.Satu record TXT lagi membantu client mengetahui realm mana yang sesuai dengan domain:
$ORIGIN example.com.
_kerberos.example.com. TXT "EXAMPLE.COM"Setelah record dibuat, verifikasi dengan dig:
dig +short _kerberos._udp.example.com SRV
dig +short -x 192.168.10.10
dig +short _kerberos.example.com TXTJika dig +short _kerberos._udp.example.com SRV mengembalikan 0 0 88 kdc.example.com., client akan menemukan KDC dengan benar. Kalian juga bisa menguji resolusi client langsung lewat getent hosts kdc.example.com.
Untuk lab kecil atau environment tanpa DNS penuh, Kerberos bisa memakai /etc/hosts sebagai fallback. Di setiap VM, tambahkan baris berikut:
192.168.10.10 kdc.example.com kdc
192.168.10.21 client1.example.com client1
192.168.10.22 client2.example.com client2Note
/etc/hosts menyelesaikan forward lookup, tapi bukan SRV record — jadi client tetap harus tahu di mana KDC berada, yang bisa diarahkan lewat baris kdc = ... di section [realms] pada /etc/krb5.conf. Untuk lab belajar, kombinasi /etc/hosts plus kdc directive di krb5.conf sudah cukup dan menghindari kompleksitas BIND.
Ketika error muncul, gunakan urutan periksa berikut:
| Langkah | Perintah | Yang diperiksa |
|---|---|---|
| 1 | timedatectl status | Jam sistem dan zona waktu semua VM |
| 2 | chronyc tracking | Selisih jam terhadap sumber waktu |
| 3 | KRB5_TRACE=1 kinit | Jejak detail; cari pesan clock skew |
| 4 | date di semua VM | Perbandingan jam antar host |
date --set="2026-08-03 10:00:00"Jika ditemukan selisih besar, perbaiki jam sistem — di lab sering cukup menulis ulang jam dengan date --set, lalu pastikan chrony menjaga konsistensi setelahnya. Di produksi, perbaiki sumber NTP dan biarkan sinkronisasi bekerja otomatis.
Episode ini menangani dua prasyarat infrastruktur yang paling sering menghancurkan Kerberos: sinkronisasi waktu dan DNS. Kalian sudah menyiapkan chrony di semua VM, memahami toleransi clockskew 5 menit dan cara mengubahnya di krb5.conf, membuat record SRV _kerberos, _kerberos-master, dan _kpasswd beserta record TXT realm, memakai /etc/hosts sebagai fallback lab, serta belajar urutan troubleshooting error Clock skew too great.
Poin penting yang harus kalian bawa:
dig adalah alat verifikasi DNS tercepat; /etc/hosts adalah penyelamat lab kecil.Clock skew too great biasanya bersembunyi di balik Preauthentication failed — gali dengan KRB5_TRACE=1.Di episode 5 selanjutnya kita akan merakit semuanya: menginstall MIT Kerberos KDC — dari instalasi paket, konfigurasi realm di krb5.conf dan kdc.conf, pembuatan database dengan kdb5_util, pembuatan principal pertama, sampai verifikasi kinit dan klist. Inilah episode di mana lab kalian benar-benar hidup. Sampai jumpa!