OpenLDAP merupakan implementasi Lightweight Directory Access Protocol server yang bersifat open source. OpenLDAP dapat menjadi alternatif solusi LDAP service selain solusi lain seperti Microsoft Active Directory dan Oracle Internet Directory. Saya mulai mempelajari OpenLDAP ketika ada kebutuhan untuk memindahkan user aplikasi dari WebLogic Embedded LDAP ke OpenLDAP. Pada kesempatan kali ini saya ingin mencoba melakukan instalasi OpenLDAP server, serta melakukan konfigurasi replikasi mirror-mode dengan 2 node.
Instalasi dilakukan pada mesin Red Hat Enterprise Linux 5.5 (64-bit). Environment yang ada tidak terhubung dengan Internet dan versi OpenLDAP pada official package belum mendukung fitur replikasi mirror-mode yang diperlukan, sehingga saya download RPM yang tersedia di LTB Project.
OpenLDAP Initialization
Berikut adalah langkah-langkah instalasinya:- Download GPG Key dari LTB Project
root@ldap1.nostra.tech ~# wget http://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project
- Upload GPG Key tersebut ke server kemudian import
root@ldap1.nostra.tech ~# rpm --import RPM-GPG-KEY-LTB-project
- Download RPM BerkleyDB dan OpenLDAP dari LTB Project kemudian upload ke server
- Instalasi BerkeleyDB dan OpenLDAP
root@ldap1.nostra.tech ~# yum localinstall berkeleydb-ltb* openldap-ltb*
- Jika ada dependency yang tidak terpenuhi, download dan instalasi RPM dependency lainnya menggunakan perintah yum downloadonly (lihat detilnya blog ini) pada mesin dengan akses Internet
- Sukses, instalasi BerkeleyDB dan OpenLDAP akan ada di path /usr/local/
- Lakukan langkah serupa pada node ke-2
OpenLDAP Initialization
Sebelum OpenLDAP dapat dijalankan untuk pertama kalinya, OpenLDAP harus diinisialisasi terlebih dahulu. Proses inisialisasi OpenLDAP dapat dijabarkan sebagai berikut:- Mendefinisikan root, ubah file /usr/local/openldap/etc/openldap/ldap.conf menjadi seperti ini:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=nostra,dc=tech URI ldap://ldap1.nostra.tech ldap://ldap2.nostra.tech #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
- Membuat password untuk rootdn
root@ldap1.nostratech.com ~# slappasswd New password: Re-enter new password: {SSHA}lHpQpKI0+rQgZ+4cpQpa0dy/Q+gkcQnN
- Mendaftarkan password tersebut ke OpenLDAP, dengan cara mengubah bagian BDB pada file /usr/local/openldap/etc/openldap/slapd.conf
... ####################################################################### # BDB database definitions ####################################################################### database bdb suffix "dc=nostra,dc=tech" rootdn "cn=ldapadmin,dc=nostra,dc=tech" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {SSHA}YiQMY8N84rgoZOol8Y2vB1+lkBc3KT9n ...
- Ubah default startup configuration di /etc/default/slapd, pastikan untuk mengganti SLAPD_USER dan SLAPD_GROUP menjadi root jika ingin menjalankan OpenLDAP pada port < 1024
#==================================================================== # Configuration example of OpenLDAP's init script #==================================================================== # IP and port to listen IP="192.168.10.100" SSLIP="192.168.10.100" PORT="389" SSLPORT="636" # OpenLDAP directory and files SLAPD_PATH="/usr/local/openldap" SLAPD_PID_FILE="$SLAPD_PATH/var/run/slapd.pid" SLAPD_CONF="$SLAPD_PATH/etc/openldap/slapd.conf" SLAPD_CONF_DIR="" SLAPD_SERVICES="ldap://$IP:$PORT ldaps://$SSLIP:$SSLPORT" SLAPD_PARAMS="" SLAPD_BIN="$SLAPD_PATH/libexec/slapd" SLAPD_USER="root" SLAPD_GROUP="root" SLAPD_SYSLOG_LOCAL_USER="local4" ...
- Startup OpenLDAP
root@ldap1.nostra.tech ~# service slapd start slapd: [INFO] Using /etc/default/slapd for configuration slapd: [INFO] Launching OpenLDAP configuration test... slapd: [OK] OpenLDAP configuration test successful slapd: [INFO] No db_recover done slapd: [INFO] Launching OpenLDAP... slapd: [OK] File descriptor limit set to 1024 slapd: [OK] OpenLDAP started
- Cek status dari OpenLDAP server, pastikan statusnya sudah running
root@ldap1.nostra.tech ~# service slapd status slapd: [INFO] Using /etc/default/slapd for configuration slapd: [INFO] LDAP Tool Box OpenLDAP init script version 1.9 slapd: [INFO] Process OpenLDAP is running (PID 1200) slapd: [INFO] Listening to services ldap://192.168.10.100:389 ldaps://192.168.10.100:636 slapd: [INFO] Process usage: 4.2% CPU / 0.1% MEM slapd: [INFO] Detected suffix: dc=nostra,dc=tech
- Buat file ldap-init.ldif untuk membuat struktur LDAP tree awal dan rootdn
dn: dc=nostra,dc=tech objectclass: dcObject objectclass: organization o: LDAP Tree of Nostra Technology dc: nostra dn: cn=ldapadmin,dc=nostra,dc=tech objectclass: organizationalRole cn: ldapadmin
- Import file tersebut ke OpenLDAP server
root@ldap1.nostra.tech ~# ldapadd -a -x -D 'cn=ldapadmin,dc=nostra,dc=tech' -W -f ldap-init.ldif
- OpenLDAP selesai di-inisialisasi
- Lakukan langkah serupa pada node ke-2
OpenLDAP Mirror-Mode Configuration
Update /usr/local/openldap/etc/openldap/slapd.conf pada kedua node menjadi seperti berikut ini:# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /usr/local/openldap/etc/openldap/schema/core.schema include /usr/local/openldap/etc/openldap/schema/cosine.schema include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema include /usr/local/openldap/etc/openldap/schema/nis.schema include /usr/local/openldap/etc/openldap/schema/dyngroup.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /usr/local/openldap/var/run/slapd.pid argsfile /usr/local/openldap/var/run/slapd.args # Load dynamic backend modules: # modulepath /usr/local/openldap/libexec/openldap # moduleload back_bdb.la # moduleload back_hdb.la # moduleload back_ldap.la moduleload dyngroup.la moduleload dynlist.la moduleload syncprov.la moduleload accesslog.la moduleload back_bdb.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! # OpenLDAP Server Idenfitier serverID 1 ####################################################################### # BDB database definitions ####################################################################### database bdb suffix "dc=nostra,dc=tech" rootdn "cn=ldapadmin,dc=nostra,dc=tech" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {SSHA}YiQMY8N84rgoZOol8Y2vB1+lkBc3KT9n
# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /usr/local/openldap/var/openldap-data checkpoint 10240 720 cachesize 50000 # Indices to maintain index objectClass,entryCSN,entryUUID eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub # DBConfig dbconfig set_cachesize 0 268435456 1 dbconfig set_lk_max_locks 3000 dbconfig set_lk_max_objects 1500 dbconfig set_lk_max_lockers 1500 dbconfig set_lg_regionmax 262144 dbconfig set_lg_bsize 2097152 # Replication syncrepl rid=001 provider=ldap://ldap2.nostra.tech:389 binddn="cn=ldapadmin,dc=nostra,dc=tech" bindmethod=simple credentials=secret searchbase="dc=nostra,dc=tech" type=refreshAndPersist interval=00:00:00:10 retry="60 10 300 +" timeout=1 mirrormode TRUE overlay syncprov syncprov-nopresent TRUE syncprov-reloadhint TRUE syncprov-checkpoint 1000 60 syncprov-sessionlog 100 overlay dynlist dynlist-attrset groupOfURLs memberURL
Perbedaan dari kedua node ada pada baris-baris berikut:
...
# OpenLDAP Server Idenfitier
serverID 2
...
# Replication
syncrepl rid=002
provider=ldap://ldap1.nostra.tech:389
binddn="cn=ldapadmin,dc=nostra,dc=tech"
bindmethod=simple
credentials=secret
searchbase="dc=nostra,dc=tech"
type=refreshAndPersist
interval=00:00:00:10
retry="60 10 300 +"
timeout=1
mirrormode TRUE
...
Restart OpenLDAP server pada kedua node, dan coba untuk melakukan perubahan data dari salah satu node. Seharusnya node yang lainnya akan mereplikasi perubahan tersebut seketika.
Frontend with HAProxy-Keepalived Combo
OpenLDAP mirror-mode akan lebih optimal jika di-frontend-kan oleh HAProxy, karena HAProxy yang akan bertugas untuk me-load-balance kedua node OpenLDAP secara active passive. SehinggaUbah konfigurasi HAProxy pada /etc/haproxy/haproxy.cfg di mana ldap.dppb.go.id adalah frontend server-nya dengan IP 192.168.10.99.
...
listen ldap.dppb.go.id 192.168.10.99:389
mode tcp
option tcplog
server ldap1 ldap1.dppb.go.id:389 check inter 5000 downinter 500
server ldap2 ldap2.dppb.go.id:389 check inter 5000 backup
...
Restart proses HAProxy setelah mengubah file konfigurasi tersebut. Selamat mencoba! :)
No comments:
Post a Comment