Lewati ke isi

Panduan instalasi OpenLDAP pada Ubuntu 16.04 LTS

Entah apa yang membuat penulis akhirnya memutuskan untuk menggunakan docker pada penerepan server, proxy, ldap, mail, & backup. Saat ini yang terpikir adalah portabilitasnya. Memang sampai saat ini penulis merasakan tantangan yang luar biasa dalam melakukan pengaturan. Tapi konfigurasi ini dapat disimpan pada suatu repositori yang nantinya akan mudah untuk dikelola, dipidahkan, dicadangkan, bahkan sampai dibuat kembali. Tekniknya adalah persistensi data, pendekatan ini dilakukan dengan langkah memetakan data yang ada/akan dibuat pada kontainer docker ke host, sehingga data tersebut dapat digunakan kembali

Berikut adalah daftar TODO:

  • Server - Ubuntu 16.04 LTS
  • Configuration Management - Docker
  • Proxy - Nginx
  • SSL/TLS - Let’s Encrypt
  • LDAP - OpenLDAP
  • LDAP webadmin - osixia/phpldapadmin
  • LDAP backup - osixia/openldap-backup
  • Mail SMTP - Posftfix
  • Mail IMAP - Dovecot
  • SASL - OpenLDAP
  • Spam - Amavis & Spamassasin
  • Filtering - Seive
  • Antivirus - ClamAV
  • DKIM - OpenDKIM
  • DMARC - OpenDMARC
  • Firewall - UFW & Fail2Ban

Persiapan pada host

# menyiapkan direktori data pada /home/$USER
mkdir -p ~/mnt/proxy_data/certs
mkdir -p ~/mnt/proxy_data/certs-staging
mkdir -p ~/mnt/proxy_data/nginx
mkdir -p ~/mnt/ldap_data/database
mkdir -p ~/mnt/ldap_data/config
mkdir -p ~/mnt/ldap_data/certs
mkdir -p ~/mnt/ldap_data/environment
mkdir -p ~/mnt/ldap_data/phpldapadmin
mkdir -p ~/mnt/mail_data/config

Docker frontend

Nginx

# Nginx proxy
# nginx:1.11.5
docker run -d -p 80:80 -p 443:443 \
    --name nginx \
    -v /etc/nginx/conf.d  \
    -v /etc/nginx/vhost.d \
    -v /usr/share/nginx/html \
    -v ~/mnt/proxy_data/certs:/etc/nginx/certs:ro \
    nginx:1.11.5

# Docker Nginx
# jwilder/nginx-proxy:0.5.0
# docker run -d -p 80:80 -p 443:443 \
#     --name nginx-proxy \
#     -v ~/mnt/proxy_data/certs:/etc/nginx/certs:ro \
#     -v /etc/nginx/vhost.d \
#     -v /usr/share/nginx/html \
#     -v /var/run/docker.sock:/tmp/docker.sock:ro \
#     jwilder/nginx-proxy:0.5.0

Nginx docker-gen

Docker ini digunakan untuk secara otomatis membuat konfigurasi nginx dengan menggunakan templat nginx.tmpl

# Unduh templat konfigurasi nginx
curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > ~/mnt/proxy_data/nginx/nginx.tmpl

# Docker Gen
# jwilder/docker-gen:0.7.3
docker run -d \
    --name nginx-gen \
    --volumes-from nginx \
    -v ~/mnt/proxy_data/nginx:/etc/docker-gen/templates:ro \
    -v /var/run/docker.sock:/tmp/docker.sock:ro \
    jwilder/docker-gen:0.7.3 \
    -notify-sighup nginx -watch -only-exposed -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf

# Docker Let's Encrypt Nginx Proxy Companion
# jrcs/letsencrypt-nginx-proxy-companion:v1.3
# docker run -d \
#     --name nginx-letsencrypt \
#     -e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory" \
#     -e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" \
#     --volumes-from nginx \
#     -v ~/mnt/proxy_data/certs:/etc/nginx/certs:rw \
#     -v /var/run/docker.sock:/var/run/docker.sock:ro \
#     jrcs/letsencrypt-nginx-proxy-companion:v1.3
# menggunakan certificates fase testing/staging
docker run -d \
    --name nginx-letsencrypt-staging \
    -e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory" \
    -e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" \
    --volumes-from nginx \
    -v ~/mnt/proxy_data/certs-staging:/etc/nginx/certs:rw \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    jrcs/letsencrypt-nginx-proxy-companion:v1.3-acme-0.8
    # jrcs/letsencrypt-nginx-proxy-companion:v1.3

OpenLDAP

# docker OpenLDAP testing
# osixia/openldap:1.1.7
docker run -p 389:389 -p 636:636 \
    --name openldap \
    --hostname ldap.proxsis.com \
    -v ~/mnt/ldap_data/database:/var/lib/ldap \
    -v ~/mnt/ldap_data/config:/etc/ldap/slapd.d \
    -v ~/mnt/ldap_data/certs:/container/run/service/slapd/assets/certs \
    -e "VIRTUAL_HOST=ldap.proxsis.com" \
    -e "LDAP_TLS_VERIFY_CLIENT=never" \
    -e "LDAP_TLS_PROTOCOL_MIN=3.0" \
    -e "LDAP_TLS_CIPHER_SUITE=NORMAL" \
    -e "LDAP_ORGANISATION=PROXSIS" \
    -e "LDAP_DOMAIN=ldap.proxsis.com" \
    -e "LDAP_ADMIN_PASSWORD=mampanGprapataNXI#D1" \
    -e "LDAP_TLS_CRT_FILENAME=ldap_server.pem" \
    -e "LDAP_TLS_KEY_FILENAME=ldap_server.key" \
    -e "LDAP_TLS_CA_CRT_FILENAME=ca_server.pem" \
    osixia/openldap:1.1.7 \
    --loglevel debug \
    --copy-service
    # -e "LETSENCRYPT_TEST=true" \
    # -e "LETSENCRYPT_HOST=ldap.proxsis.com" \
    # -e "[email protected]" \

#
docker run -p 389:389 -p 636:636 \
    --name openldap \
    --hostname ldap.proxsis.com \
    -v ~/mnt/ldap_data/environment:/container/environment/01-custom \
    -v ~/mnt/ldap_data/database:/var/lib/ldap \
    -v ~/mnt/ldap_data/config:/etc/ldap/slapd.d \
    osixia/openldap:1.1.7 \
    --loglevel debug \
    --copy-service

# uji dengan docker dari komputer host
docker exec openldap \
    ldapsearch -x -h localhost \
        -b dc=ldap,dc=proxsis,dc=com \
        -D "cn=admin,dc=ldap,dc=proxsis,dc=com" \
        -w mampanGprapataNXI#D1
# uji global
ldapsearch -x -H ldap://ldap.proxsis.com/ \
    -b dc=ldap,dc=proxsis,dc=com \
    -D "cn=admin,dc=ldap,dc=proxsis,dc=com" \
    -w mampanGprapataNXI#D1

# menambahkan pengguna
docker exec openldap \
    ldapadd -x \
        -D "cn=admin,dc=example,dc=org" \
        -w mampanGprapataNXI#D1 \
        -f /container/service/slapd/assets/test/new-user.ldif \
        -h ldap.example.org -ZZ

phpOpenLDAPAdmin

# docker phpLDAPadmin
# osixia/phpldapadmin:0.6.11
docker run -d \
    --name phpldapadmin \
    --hostname ldmin.proxsis.com \
    -e "VIRTUAL_HOST=ldmin.proxsis.com" \
    -e "PHPLDAPADMIN_HTTPS=true" \
    -e "PHPLDAPADMIN_LDAP_HOSTS=ldmin.proxsis.com" \
    osixia/phpldapadmin:0.6.11
    # -v ~/mnt/ldap_data/phpldapadmin:/container/service/phpldapadmin/assets \

CLI:

# Membersihkan volumen yang tidak digunakan
docker volume rm $(docker volume ls -f dangling=true -q)

Rujukan: