Disable Anonymous Access & Enable Limited ACL OpenLDAP

Sebelumnya saya sudah menulis prosedur Instalasi OpenLDAP di Ubuntu 24.04 from scratch. Namun secara default, OpenLDAP memperbolehkan siapa saja (anonymous) melakukan query tanpa autentikasi apapun. Berarti, siapa pun dapat melihat data user yang ada pada OpenLDAP. Maka dari itu, saya akan menunjukkan bagaimana cara untuk disable anonymous access OpenLDAP dan mengaktifkan access control list (ACL) untuk memberikan permission supaya akun sistem tertentu OpenLDAP tetap bisa melakukan query data.

Query Data User OpenLDAP (Sebelum Disable Anonymous)

Kalau kita baru selesai fresh install OpenLDAP, kita bisa melakukan query data user dari server lain menggunakan ldapsearch secara anonymous (Selama server bisa mengakses port 389 server OpenLDAP). Berikut contoh perintahnya:

# ldapsearch -LLL -x -H ldap ://192.168.6.2:389 -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=ahmad)"
dn: uid=ahmad,ou=users,dc=excellent,dc=co,dc=id
objectClass: inetOrgPerson
uid: ahmad
mail: ahmad@aktiva.co.id
givenName: Ahmad
sn: Imanudin
cn: Ahmad Imanudin

Nah hanya dengan perintah ldapsearch tanpa autentikasi kita bisa melihat semua data user, kecuali atribut yang menggunakan hash seperti userPassword.

Mengapa Harus?

Mungkin bagi sebagian orang ini terlihat sepele karena atribut sensitif seperti userPassword tetap terproteksi secara internal. Namun, seiring berkembangnya infrastruktur di Aktiva, kita harus melihat OpenLDAP sebagai directory service yang akan menjadi pusat data-data user, bukan hanya sekadar alat untuk integrasi external auth saja. Berikut adalah beberapa alasan yang menurut saya menjadi alasan mengapa kita harus disable anonymous access di OpenLDAP:

  • OpenLDAP sebagai Directory Service: OpenLDAP sangat ideal kita jadikan pusat data pengguna yang dikonsumsi oleh berbagai aplikasi (VPN, WiFi, File Server, dll). Jika akses anonymous dibuka, maka seluruh data pengguna yang sifatnya rahasia, misalnya; nama lengkap, nomor induk karyawan, nomor KTP, nomor handphone, rekening payroll, dan sejenisnya dapat di scraping untuk keperluan social engineering ataupun phising
  • Minimal Privilege: Setiap aplikasi (misalnya, Zimbra) seharusnya hanya diberikan permission seminimal mungkin sesuai dengan kebutuhan. Dengan menggunakan akun sistem khusus, kita memberikan permission read ataupun write hanya untuk atribut yang diperlukan aplikasi terkait, tanpa mengekspos seluruh isi data users ke publik
  • Audit & Mitigasi: Saat ada query menggunakan anonymous access, log di /var/log/slapd.log hanya akan menampilkan informasi aktivitas query tanpa identitas yang jelas. Dengan mewajibkan autentikasi, setiap aktivitas query akan masuk ke log dengan informasi nama akun sistem yang digunakan, memudahkan kita dalam melakukan audit keamanan jika terjadi anomali ataupun serangan. Selain itu, kita juga bisa mendeteksi aktivitas mencurigakan dari salah satu akun sistem, kita tidak perlu mematikan seluruh service OpenLDAP, namun kita cukup menonaktifkan atau mengganti password akun sistem yang terindikasi untuk langsung memutus akses query

Disable Anonymous Access

Berikut langkah-langkah untuk melakukan disable anonymous access supaya query tidak bisa dilakukan lagi dari server lain tanpa autentikasi:

  • Cek kondisi permission OpenLDAP sebelum kita disable anonymous access dengan perintah berikut:
    # ldapsearch -LLL -Q -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}mdb,cn=config" olcAccess
    dn: olcDatabase={1}mdb,cn=config
    olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
    olcAccess: {1}to attrs=shadowLastChange by self write by * read
    olcAccess: {2}to * by * read
  • Buat file baru /srv/disable-anonymous.ldif dan sesuaikan DN domain yang rekan-rekan gunakan, isinya kurang lebih sebagai berikut:
    dn: olcDatabase={1}mdb,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to attrs=userPassword
      by self write
      by anonymous auth
      by * none
    olcAccess: {1}to *
      by self read
      by dn.exact="cn=admin,dc=excellent,dc=co,dc=id" write
      by * none
  • Disable anonymous access dengan perintah berikut:
    # ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /srv/disable-anonymous.ldif 
    modifying entry "olcDatabase={1}mdb,cn=config"
  • Memastikan anonymous access sudah disable dengan perintah berikut:
    # ldapsearch -LLL -Q -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}mdb,cn=config" olcAccess
    dn: olcDatabase={1}mdb,cn=config
    olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
    olcAccess: {1}to * by self read by dn.exact="cn=admin,dc=excellent,dc=co,dc=id
    " write by * none

Create Akun Sistem & Enable Limited ACL (Case: External Auth Zimbra)

Setelah disable anonymous access, kita jadi tidak bisa melakukan query data user OpenLDAP sepertinya sebelumnya karena kita butuh akun sistem & password untuk query. Berhubung saya uji coba OpenLDAP ini dibarengi dengan integrasi Zimbra maka saya akan mencontohkan limited ACL untuk integrasi external auth Zimbra (Secara prinsip, sebenarnya caranya sama saja kalau rekan-rekan mau buat akun sistem untuk aplikasi lain, nanti tinggal disesuaikan saja atribut-atribut apa saja yang perlu dibaca sama aplikasi terkait). Berarti selanjutnya kita perlu menambahkan akun sistem yang akan digunakan untuk query external auth Zimbra, berikut langkah-langkahnya:

  • Generate password yang akan digunakan untuk akun sistem. Berikut contoh perintahnya:
    # slappasswd -o module-load=/usr/lib/ldap/pw-sha2.so -h {SSHA512} -s '%Yvda7TJ4f&ySZ@zqCJq6p6!'
    {SSHA512}SJNnjqcdoLzmTtSkR8E7te8JDdcN0ah+Bya5VE74S3zT4acvnkkgR+B41/Vw57PZDzjycydj99zULdgf1C2vCQGvfoHC7FD6
  • Buat file baru /srv/create-acc-sys-zimbra-auth.ldif dan sesuaikan password hash hasil generate. isinya kurang lebih sebagai berikut:
    dn: cn=zimbra-auth,dc=excellent,dc=co,dc=id
    changetype: add
    objectClass: device
    objectClass: simpleSecurityObject
    cn: zimbra-auth
    description: Akun Service untuk Integrasi External Auth Zimbra
    userPassword: {SSHA512}Wv40nrPAd0NsTjdJLvfNsvLF74n7rqnxl/pNI7aRbWwiMTDe6gEcYCVBcyeFaqHcxAn7ghZ8oXyMR9CH+IKE4zxBkjKpelK0
  • Create akun sistem untuk external auth Zimbra dengan perintah berikut:
    # ldapadd -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -H ldapi:/// -f /srv/create-acc-sys-zimbra-auth.ldif 
    Enter LDAP Password: (Masukkan password admin LDAP)
    adding new entry "cn=zimbra-auth,dc=excellent,dc=co,dc=id"
  • Memastikan akun sistem sudah berhasil dibuat dengan perintah berikut:
    # ldapsearch -LLL -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -b "dc=excellent,dc=co,dc=id" "(cn=zimbra-auth)"
    Enter LDAP Password: (Masukkan password admin LDAP)
    dn: cn=zimbra-auth,dc=excellent,dc=co,dc=id
    objectClass: device
    objectClass: simpleSecurityObject
    cn: zimbra-auth
    description: Akun Service untuk Integrasi External Auth Zimbra
    userPassword:: e1NTSEE1MTJ9U0pObmpxY2RvTHptVHRTa1I4RTd0ZThKRGRjTjBhaCtCeWE1VkU
    3NFMzelQ0YWN2bmtrZ1IrQjQxL1Z3NTdQWkR6anljeWRqOTl6VUxkZ2YxQzJ2Q1FHdmZvSEM3RkQ2
  • Selanjutnya, buat file baru /srv/set-acl-zimbra-auth.ldif dan sesuaikan bagian olcAccess nomor {1} dengan atribut yang perlu dibaca oleh aplikasi:
    dn: olcDatabase={1}mdb,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to attrs=userPassword
      by self write
      by dn.exact="cn=admin,dc=excellent,dc=co,dc=id" write
      by dn.exact="cn=zimbra-auth,dc=excellent,dc=co,dc=id" read
      by anonymous auth
      by * none
    olcAccess: {1}to attrs=uid,cn,mail,displayName,userPassword
      by self read
      by dn.exact="cn=admin,dc=excellent,dc=co,dc=id" write
      by dn.exact="cn=zimbra-auth,dc=excellent,dc=co,dc=id" read
      by * none
    olcAccess: {2}to *
      by dn.exact="cn=admin,dc=excellent,dc=co,dc=id" write
      by dn.exact="cn=zimbra-auth,dc=excellent,dc=co,dc=id" read
      by self read
      by * none
  • Enable ACL untuk akun sistem yang akan digunakan aplikasi dengan perintah berikut:
    # ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /srv/set-acl-zimbra-auth.ldif 
    modifying entry "olcDatabase={1}mdb,cn=config"
  • Memastikan ACL akun sistem sudah sesuai dengan perintah berikut:
    # ldapsearch -LLL -Q -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}mdb,cn=config" olcAccess
    dn: olcDatabase={1}mdb,cn=config
    olcAccess: {0}to attrs=userPassword by self write by dn.exact="cn=admin,dc=exc
    ellent,dc=co,dc=id" write by dn.exact="cn=zimbra-auth,dc=excellent,dc=co,dc=i
    d" read by anonymous auth by * none
    olcAccess: {1}to attrs=uid,cn,mail,userPassword by self read by dn
    .exact="cn=admin,dc=excellent,dc=co,dc=id" write by dn.exact="cn=zimbra-auth,
    dc=excellent,dc=co,dc=id" read by * none
    olcAccess: {2}to * by dn.exact="cn=admin,dc=excellent,dc=co,dc=id" write by dn
    .exact="cn=zimbra-auth,dc=excellent,dc=co,dc=id" read by self read by * none

Query Data User OpenLDAP (Setelah Disable Anonymous & Enable ACL)

Setelah melakukan disable anonymous access dan melakukan enable limited ACL untuk akun sistem yang tadi kita buat, sekarang kita coba melakukan query menggunakan ldapsearch secara anonymous supaya terlihat perbedaannya:

# ldapsearch -LLL -x -H ldap ://192.168.6.2:389 -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=raihan)"
No such object (32)

Nah, dari testing yang barusan kita lakukan, terlihat bahwa query tidak bisa dilakukan secara anonymous atau tanpa autentikasi. Sekarang kita coba query lagi menggunakan ldapsearch namun kali ini pakai autentikasi akun sistem yang tadi sudah kita buat:

# ldapsearch -LLL -x -H ldap ://192.168.6.2:389 -D "cn=zimbra-auth,dc=excellent,dc=co,dc=id" -W -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=raihan)"
Enter LDAP Password: (Masukkan password akun sistem LDAP)
dn: uid=raihan,ou=users,dc=excellent,dc=co,dc=id
objectClass: inetOrgPerson
uid: raihan
mail: raihan@aktiva.co.id
givenName: Mohammad
sn: Utomo
cn: Mohammad Raihan. Utomo
userPassword:: e1NTSEE1MTJ9RDZBOGlzbmdrMjlWejB2VUhZbzh4aTZON3IwNXVxSW1SLzF3Qm9
sckN3UzZieERKVHVUUEpqcU5QallSR0xIaHhJSVdKTllJMEdkbW54ZjJLZDBNbFREK1U3UXBpbFZ6

Dari hasil testing menggunakan autentikasi, data user LDAP yang kita cari bisa muncul lengkap dengan data-data users yang sudah kita define di ACL. Lalu jika kita cek di log, maka akun yang digunakan untuk query akan terlihat, berikut contohnya:

2026-04-06T11:13:32.095402+07:00 openldap slapd[750]: conn=1032 fd=15 ACCEPT from IP=192.168.6.232:35526 (IP=0.0.0.0:389)
2026-04-06T11:13:32.095721+07:00 openldap slapd[750]: conn=1032 op=0 BIND dn="cn=zimbra-auth,dc=excellent,dc=co,dc=id" method=128
2026-04-06T11:13:32.095758+07:00 openldap slapd[750]: conn=1032 op=0 BIND dn="cn=zimbra-auth,dc=excellent,dc=co,dc=id" mech=SIMPLE bind_ssf=0 ssf=0
2026-04-06T11:13:32.095786+07:00 openldap slapd[750]: conn=1032 op=0 RESULT tag=97 err=0 qtime=0.000004 etime=0.000098 text=
2026-04-06T11:13:32.096118+07:00 openldap slapd[750]: begin get_filter

Penyesuaian Integrasi (Case: External Auth Zimbra)

Dari beberapa hasil testing yang dilakukan, kita sudah berhasil melakukan disable anonymous access dan enable ACL untuk akun sistem. Selanjutnya, berarti rekan-rekan perlu menyesuaikan integrasi di sisi aplikasi, supaya saat query ke LDAP menggunakan autentikasi yang kita buat tadi. Dalam uji coba yang saya lakukan, integrasi dilakukan dengan email server Zimbra untuk kebutuhan external auth. Dengan ada perubahan ini, saya perlu menambahkan bind DN dengan cn akun sistem baru besarta dengan passwordnya. Lalu bagaimana kalau kita tidak masukkan informasi bind DN-nya ke aplikasi? Ya aplikasi jadi tidak bisa mengambil data di LDAP, berikut contoh yang saya alami di Zimbra kalau tidak memasukan bind DN:

Maka dari itu, masukkan informasi bind DN & passwordnya ke konfigurasi aplikasi supaya query data user LDAP tetap bisa dilakukan:

Dengan demikian OpenLDAP kita jadi lebih aman karena tidak bisa digunakan oleh sembarangan server. Apabila rekan-rekan mengalami kesulitan atau ada kebutuhan konfigurasi LDAP, Excellent menyediakan layanan implementasi LDAP dan sudah mencakup proses disable anonymous & enable ACL seperti diatas. Bagi rekan-rekan yang berminat untuk jasa layanan tersebut bisa langsung kontak & tanya-tanya ke  emailsales@excellent.co.id.

Leave a Reply

Your email address will not be published. Required fields are marked *