Setelah sebelumnya kita berhasil mengamankan password dengan SSHA512 (Enable Password Hash SSHA512 di OpenLDAP) dan mengatur ACL untuk membatasi akses (Disable Anonymous Access & Enable Limited ACL OpenLDAP), langkah krusial selanjutnya adalah mengamankan OpenLDAP menggunakan protokol LDAP Secure (LDAPS) dengan TCP port 636. Dalam hubungan client-server seperti OpenLDAP yang terintegrasi dengan aplikasi lain, proses query terjadi secara terus menerus berbanding lurus dengan aktivitas end user. Namun secara default, OpenLDAP berjalan pada TCP port 389 dengan traffic data yang dikirimkan secara plain. Artinya, setiap data yang dikirimkan antara OpenLDAP dan aplikasi menggunakan format yang bisa dibaca secara langsung oleh manusia jika berhasil di intercept atau sniffing.
Menyiapkan SSL Certificate
Proses enable LDAPS membutuhkan SSL certificate commercial yang masih aktif dan mencakup file-file berikut:
- Certificate file (.crt), nama file yang digunakan pada tutorial ini adalah server.crt
- Private key file (.key), nama file yang digunakan pada tutorial ini adalah server.key
- Root CA + intermediate certificate file, nama file yang digunakan pada tutorial ini adalah ca_bundle.crt
Apabila rekan-rekan bingung dapat 3 file tersebut darimana, rekan-rekan bisa minta langsung ke provider SSL tempat membeli SSL certificate karena mereka pasti simpan dan mengerti 3 file tersebut. Namun, jika tidak ada SSL certificate yang bersifat commercial atau berbayar, kita juga bisa menggunakan self signed SSL yang di generate menggunakan tools seperti openssl dan sejenisnya. Cara generate self signed SSL sendiri bisa dilihat pada banyak tutorial yang ada di Google. SSL certificate yang saya gunakan disini mencakup nama “openldap.excellent.co.id“, sehingga bisa benar-benar secure dan valid saat mengakses LDAPS server OpenLDAP.
Persiapan DNS Record (openldap.excellent.co.id)
Sebelum melangkah lebih lanjut, saya sangat merekomendasikan untuk menambahkan A record pada DNS panel domain yang rekan-rekan gunakan, dalam uji coba kali ini saya menggunakan nama domain excellent.co.id. Berikut adalah A record yang sudah saya tambahkan pada DNS panel domain excellent.co.id:
- Name: openldap
- Type: A
- Value: ip-address-server-openldap
Setelah itu, pastikan A record “openldap.excellent.co.id” bisa resolve dari salah satu server aplikasi dengan perintah nslookup:
# nslookup openldap.excellent.co.id Server: 192.168.6.232 Address: 192.168.6.232#53 Non-authoritative answer: Name: openldap.excellent.co.id Address: 192.168.6.2
Instalasi SSL/TLS Certificate
Sebelum melakukan enable protokol LDAPS, kita perlu melakukan instalasi SSL certificate commercial ataupun self-sign yang sudah disiapkan sebelumnya. Berikut adalah langkah-langkah untuk melakukan instalasi SSL/TLS di server OpenLDAP.
- Upload 3 file SSL certificate ke direktori /etc/ldap/sasl2/ server OpenLDAP:
# cd /etc/ldap/sasl2/ # ls -ltrh total 16K -rw-r--r-- 1 root root 2.2K Apr 7 08:52 server.crt -rw-r--r-- 1 root root 1.7K Apr 7 08:52 server.key -rw-r--r-- 1 root root 4.2K Apr 7 08:52 ca_bundle.crt
- Sesuaikan owner & permission dengan perintah berikut:
# chown openldap:openldap * # chmod 600 server.key # ls -ltrh total 16K -rw-r--r-- 1 openldap openldap 2.2K Apr 7 08:52 server.crt -rw------- 1 openldap openldap 1.7K Apr 7 08:52 server.key -rw-r--r-- 1 openldap openldap 4.2K Apr 7 08:52 ca_bundle.crt
- Buat file baru /srv/enable-tls.ldif dengan isi kurang lebih sebagai berikut:
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/sasl2/server.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/sasl2/server.key - replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ldap/sasl2/ca_bundle.crt
- Enable TLS dengan perintah berikut:
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /srv/enable-tls.ldif modifying entry "cn=config"
- Pastikan TLS sudah aktif dengan perintah berikut:
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcTLSCertificateFile olcTLSCertificateKeyFile olcTLSCACertificateFile dn: cn=config olcTLSCertificateFile: /etc/ldap/sasl2/server.crt olcTLSCertificateKeyFile: /etc/ldap/sasl2/server.key olcTLSCACertificateFile: /etc/ldap/sasl2/ca_bundle.crt
Enable Protokol LDAPS
Setelah SSL berhasil dilakukan instalasi, kita bisa mengaktifkan protokol LDAP yang menggunakan SSL/TLS yaitu LDAPS. Berikut adalah beberapa hal yang perlu dilakukan untuk mengaktifkan protokol LDAPS:
- Edit file /etc/default/slapd dan sesuaikan baris SLAPD_SERVICES menjadi sebagai berikut:
SLAPD_SERVICES="ldap :/// ldapi:/// ldaps :///"
- Restart service slapd dengan perintah berikut:
# systemctl restart slapd
- Pastikan TCP port default service LDAPS, yaitu 636 sudah listen dengan perintah berikut:
# netstat -tlpN --numeric-ports Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 _localdnsproxy:53 0.0.0.0:* LISTEN 533/systemd-resolve tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 21268/slapd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/init tcp 0 0 _localdnsstub:53 0.0.0.0:* LISTEN 533/systemd-resolve tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 21268/slapd tcp6 0 0 [::]:636 [::]:* LISTEN 21268/slapd tcp6 0 0 [::]:22 [::]:* LISTEN 1/init tcp6 0 0 [::]:389 [::]:* LISTEN 21268/slapd
Selain itu, kita juga bisa melakukan beberapa uji coba dari server aplikasi untuk memastikan LDAPS yang menggunakan TCP port 636 sudah bisa diakses. Berikut adalah beberapa contoh tools yang bisa kita gunakan untuk uji coba LDAPS dari server lain:
- telnet:
# telnet openldap.excellent.co.id 636 Trying 192.168.6.2... Connected to openldap.excellent.co.id. Escape character is '^]' telnet> quit Connection closed.
- openssl:
# openssl s_client -connect openldap.excellent.co.id:636 -showcerts Connecting to 192.168.6.2 CONNECTED(00000003) depth=2 C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority verify return:1 depth=1 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA verify return:1 depth=0 CN=*.excellent.co.id ..... --- Server certificate subject=CN=*.excellent.co.id issuer=C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA --- ..... New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Protocol: TLSv1.3 Server public key is 2048 bit This TLS version forbids renegotiation. Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok)
Penyesuaian Integrasi Aplikasi (Case: External Auth Zimbra)
Setelah service LDAPS aktif kita perlu menyesuaikan LDAP URL di setiap aplikasi yang terintegrasi dengan OpenLDAP supaya menggunakan nama yang sesuai, dalam uji coba kali ini menggunakan nama openldap.excellent.co.id serta menggunakan TCP port 636 dan mengaktifkan use SSL. Berikut contoh konfigurasi yang sudah disesuaikan untuk contoh case integrasi external auth Zimbra:
Disable Protokol LDAP Plain (Opsional)
Setelah memastikan protokol LDAPS pada port 636 bisa digunakan, langkah selanjutnya yang bisa kita lakukan adalah mematikan protokol LDAP standar (plain) di port 389. Catatan: Langkah ini bersifat opsional namun sangat direkomendasikan jika seluruh aplikasi yang terintegrasi dengan OpenLDAP sudah support SSL untuk LDAP. Kenapa sih kita perlu mematikan protokol LDAP plain di port 389? Meskipun kita sudah mengaktifkan port 636 yang secure, membiarkan port 389 tetap bisa diakses memberikan celah untuk melakukan koneksi tanpa enkripsi. Dengan mematikannya, OpenLDAP kita bisa secure secara default. Berikut langkah-langkah untuk melakukan disable protokol LDAP plain di OpenLDAP:
- Edit file /etc/default/slapd dan sesuaikan baris SLAPD_SERVICES, hapus ldap :/// menjadi sebagai berikut:
SLAPD_SERVICES="ldapi:/// ldaps :///"
- Restart service slapd dengan perintah berikut:
# systemctl restart slapd
- Pastikan TCP port default service LDAP, yaitu 389 sudah tidak listen dengan perintah berikut:
# netstat -tlpN --numeric-ports Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 _localdnsproxy:53 0.0.0.0:* LISTEN 533/systemd-resolve tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 21539/slapd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/init tcp 0 0 _localdnsstub:53 0.0.0.0:* LISTEN 533/systemd-resolve tcp6 0 0 [::]:636 [::]:* LISTEN 21539/slapd tcp6 0 0 [::]:22 [::]:* LISTEN 1/init
Dengan demikian OpenLDAP kita jadi lebih aman karena harus koneksi menggunakan secure protokol LDAPS dengan TCP port 636. Apabila rekan-rekan mengalami kesulitan atau ada kebutuhan konfigurasi LDAP, Excellent menyediakan layanan implementasi LDAP dan sudah mencakup proses enable LDAPS seperti diatas. Bagi rekan-rekan yang berminat untuk jasa layanan tersebut bisa langsung kontak & tanya-tanya ke email sales@excellent.co.id.