# LDAP — Mailcow ke Active Directory > **Terakhir Diperbarui:** 2026-07-03 > **AD:** `10.100.1.40` · domain `gisportal.id` > **Status:** Grup AD siap ✅ · LDAP Identity Provider aktif ✅ (2026-07-03) > ⚠️ Bind password **tidak** didokumentasikan di repo — reuse `geonet-console` `.env` --- ## Status AD — Mail-Users (2026-07-03) | Item | Nilai | Status | |------|-------|--------| | Grup LDAP | `Mail-Users` | ✅ Dibuat user | | DN grup *(default AD)* | `CN=Mail-Users,CN=Users,DC=gisportal,DC=id` | ⚠️ Verifikasi jika filter gagal | | Member | `support` | ✅ | | Atribut `mail` | `support@geonet.co.id` | ✅ | | sAMAccountName | `support` | *(untuk login LDAP)* | **LDAP filter siap pakai:** ``` (&(objectClass=user)(objectCategory=person)(memberOf=CN=Mail-Users,CN=Users,DC=gisportal,DC=id)) ``` Mailbox pertama yang akan di-provision otomatis: **`support@geonet.co.id`** — sekaligus mailbox Zammad + fetchmail POP3 drain. --- ## Jawaban singkat **Ya, Mailcow bisa pakai LDAP (Active Directory)** sebagai Identity Provider — login IMAP/SMTP/SOGo dan provisioning mailbox otomatis. User **tidak** perlu password terpisah di Mailcow; autentikasi ke AD sama seperti geonet-console dan Zammad. **Tapi:** manajemen akun **tidak 100% identik** dengan microservice lain — Mailcow tetap perlu konfigurasi domain email, template mailbox, dan grup siapa yang dapat mailbox `@geonet.co.id`. --- ## Posisi dalam ekosistem Super Apps ```mermaid flowchart LR AD[(Active Directory\n10.100.1.40\ngisportal.id)] AD -->|LDAP bind| GC[geonet-console\nJWT login] AD -->|LDAP sync| ZM[Zammad\nagent/customer] AD -->|LDAP IdP| MC[Mailcow\nmailbox @geonet.co.id] AD -->|LDAP| FE[mysupperapps PWA\nvia console API] MC --> OL[Outlook IMAP/SMTP] MC --> ZM ``` | Layanan | LDAP dipakai untuk | User lokal? | |---------|-------------------|-------------| | **geonet-console** | Auth only → JWT | Tidak | | **Zammad** | Sync user + role/group | Dibuat otomatis dari AD | | **Mailcow** | Auth mailbox + import/sync | Mailbox auto-provision (bukan admin) | | **Super Apps FE** | Via geonet-console API | Tidak | **Sumber kebenaran identitas:** AD `10.100.1.40` — password, nama, grup. --- ## Fitur LDAP native Mailcow (2025+) Mailcow menyediakan **System → Configuration → Access → Identity Provider → LDAP**. | Fitur | Keterangan | |-------|------------| | LDAP bind login | User login pakai kredensial AD | | Auto-provision | Mailbox dibuat saat login pertama (IMAP/SMTP/UI) | | Periodic import | Cron impor user dari LDAP | | Periodic full sync | Update template/quota dari perubahan AD | | Attribute mapping | Map atribut LDAP → template mailbox Mailcow | **Dokumentasi resmi:** [mailcow LDAP guide](https://docs.mailcow.email/manual-guides/mailcow-UI/u_e-mailcow_ui-ldap/) --- ## Batasan penting | Item | Perilaku | |------|----------| | **Admin Mailcow** | Tetap auth **SQL** (bukan LDAP) | | **Domain Admin** | Tetap auth **SQL** | | **Mailbox user** | Bisa LDAP ✅ | | **2FA** | LDAP user bisa set 2FA di UI Mailcow | | **Outlook** | Login pakai password AD; tidak perlu app password khusus (beda dengan OIDC) | | **Active Directory** | Pakai filter AD (`objectClass=user`), **bukan** `posixAccount` | > **Catatan AD:** Ada laporan issue Dovecot + filter `posixAccount` untuk AD. Pastikan filter di Identity Provider memakai sintaks AD. Cek log IMAP setelah setup. --- ## Parameter LDAP (selaras Zammad / geonet-console) | Field Mailcow UI | Nilai | |----------------|-------| | **URI / Host** | `ldap://10.100.1.40:389` | | **Bind DN** | `Administrator@gisportal.id` | | **Bind password** | `LDAP_BIND_PASSWORD` dari geonet-console | | **Base DN** | `DC=gisportal,DC=id` | | **LDAP Filter** | `(&(objectClass=user)(objectCategory=person)(memberOf=CN=Mail-Users,OU=Groups,DC=gisportal,DC=id))` *(contoh — sesuaikan grup)* | | **Username field** | `mail` *(bukan `sAMAccountName` — sync butuh alamat email penuh)* | | **Attribute Field** (mapping) | `mail` atau atribut custom | Reuse credential: `/opt/stacks/geonet-console/.env` — pola sama dengan Zammad (`Zammad/docs/notes/ldap-ad-setup.md`). ### Prasyarat jaringan ```bash # Dari VM Mailcow (.102) nc -zv -w5 10.100.1.40 389 ``` Firewall: `10.100.1.28` → `10.100.1.40:389` --- ## Tantangan: AD `gisportal.id` vs email `geonet.co.id` AD domain = `gisportal.id`, tetapi mailbox operasional = `@geonet.co.id`. | Strategi | Cara | Rekomendasi | |----------|------|-------------| | **A — Atribut `mail` di AD** | Set `mail` = `user@geonet.co.id` per user | ✅ Paling bersih | | **B — Grup + template** | Hanya user di grup `Mail-Users` AD yang di-import | ✅ Kontrol siapa dapat email | | **C — proxyAddresses** | `SMTP:user@geonet.co.id` di AD | Enterprise, butuh script | | **D — Dual domain** | Login AD `user@gisportal.id`, alias `user@geonet.co.id` | Manual per user di Mailcow | **Rekomendasi:** Kombinasi **A + B**: 1. Buat grup AD `Mail-Users` (atau `IT-Mail`, `Domain Users` subset) 2. Isi atribut `mail` = `nama@geonet.co.id` untuk anggota grup 3. LDAP filter: `memberOf=CN=Mail-Users,...` 4. Hanya user dengan `mail` @ `geonet.co.id` yang di-provision User tanpa `mail` atau di luar grup → tidak dapat mailbox (sama seperti 3 user gagal sync di Zammad). --- ## Attribute mapping & mailbox template Mailcow memakai **template** untuk quota, spam policy, dll. | LDAP Attribute Field | Attribute value | Template Mailcow | |---------------------|-----------------|------------------| | `mail` | `*@geonet.co.id` | `default` *(buat template di UI)* | | `department` | `IT` | `it-mailbox` *(opsional)* | **Cron sync** (disarankan aktif): | Opsi | Fungsi | |------|--------| | **Import Users** | Impor user baru dari LDAP tiap N menit | | **Periodic Full Sync** | Update mailbox jika template/atribut berubah | | **Sync / Import Interval** | `15` menit (sesuaikan) | Log: `System → Information → Logs → Crontasks` --- ## Alur provisioning user baru ``` 1. Admin tambah user di AD (+ grup Mail-Users + atribut mail) 2. Cron Mailcow LDAP sync (atau login pertama) 3. Mailbox user@geonet.co.id dibuat otomatis 4. User buka Outlook → IMAP sync.geonet.co.id + password AD 5. Zammad (jika mailbox support@) poll IMAP mailbox yang sama ``` **Tidak perlu** buat user manual di Mailcow UI untuk user standar. --- ## Apa yang tetap dikelola di Mailcow UI | Item | LDAP? | Keterangan | |------|-------|------------| | Password user | ✅ AD | Central | | Nama / display | ✅ AD | Sync dari LDAP | | Buat/hapus user | ✅ AD (+ grup) | Hapus = disable di AD + hapus mailbox | | Domain `geonet.co.id` | ❌ Mailcow | Tambah domain sekali | | Alias email | ❌ Mailcow | `info@` → `support@` | | Shared mailbox | ❌ Mailcow | Manual | | Quota / template | ⚙️ Hybrid | Template di Mailcow, assign via LDAP mapping | | fetchmail POP3 drain | ❌ Mailcow | Konfig terpisah (staging cPanel) | | Admin panel Mailcow | ❌ SQL | `admin` lokal — jangan LDAP | --- ## Perbandingan manajemen terpusat | Aksi admin | Di AD saja? | Catatan | |------------|-------------|---------| | Onboard karyawan baru | Hampir ✅ | + grup `Mail-Users` + `mail` attribute | | Reset password | ✅ | Satu password untuk AD, Outlook, SOGo | | Nonaktifkan karyawan | ✅ | Disable AD → sync → blokir login mail | | Ubah alamat email | ✅ | Ubah `mail` di AD + sync | | Tambah domain email baru | ❌ | Mailcow UI | | Forward / alias | ❌ | Mailcow UI | **Kesimpulan:** LDAP **cukup untuk 90%** manajemen user harian; Mailcow UI untuk kebijakan mail (domain, alias, template). --- ## Integrasi dengan Outlook & Zammad Setelah LDAP aktif: | Klien | Login | Server | |-------|-------|--------| | **Outlook** | `user@geonet.co.id` + **password AD** | IMAP/SMTP `sync.geonet.co.id` | | **Zammad channel** | Service account `support@geonet.co.id` | Bisa tetap password mailbox khusus *(bukan LDAP user login)* | > Mailbox `support@` untuk Zammad/fetchmail bisa tetap **authsource mailcow (SQL)** dengan app password, sementara user biasa pakai LDAP — menghindari konflik service account. --- ## Step-by-step (setelah Mailcow terinstall) ### 1 — Tambah domain **E-Mail → Configuration → Domains** → tambah `geonet.co.id` ### 2 — Buat mailbox template **E-Mail → Configuration → Templates** → `default` (quota, ratelimit) ### 3 — Identity Provider LDAP **System → Configuration → Access → Identity Provider** 1. Pilih **LDAP** 2. Isi connection (lihat tabel parameter di atas) 3. **Connection Test** → harus OK 4. Set LDAP filter + attribute mapping 5. Aktifkan **Import Users** + **Periodic Full Sync** 6. Interval: 15 menit ### 4 — Grup AD ✅ (2026-07-03) | Item | Status | |------|--------| | Grup `Mail-Users` | ✅ | | Member `support` | ✅ | | `mail` = `support@geonet.co.id` | ✅ | Tambahkan member baru dengan aturan sama: masuk grup `Mail-Users` + atribut `mail` = `nama@geonet.co.id`. ### 5 — Uji 1. Login SOGo / Mailcow UI dengan user AD uji 2. Cek mailbox muncul di **E-Mail → Mailboxes** 3. Tes Outlook IMAP/SMTP 4. Cek log jika IMAP gagal: `System → Information → Logs` ### 6 — Admin Mailcow Pertahankan akun `admin` SQL terpisah — **jangan** pakai LDAP untuk admin panel. --- ## Troubleshooting | Gejala | Penyebab | Tindakan | |--------|----------|----------| | Web login OK, IMAP gagal | Filter LDAP tidak cocok AD | Ubah filter ke `objectClass=user`; cek log Dovecot | | User tidak ter-import | Tidak match filter / grup | Cek `memberOf`, atribut `mail` | | Email salah domain | `mail` di AD masih `@gisportal.id` | Update AD → `@geonet.co.id` | | Connection test gagal | Firewall / bind password | `nc` ke `.40:389`, cek bind DN | | Semua user AD dapat mailbox | Filter terlalu luas | Perketat `memberOf=CN=Mail-Users,...` | --- ## Roadmap LDAP Mailcow | # | Task | Status | |---|------|--------| | 1 | Install Mailcow di `.102` | ❌ | | 2 | Tes koneksi LDAP dari container | ❌ | | 3 | Buat grup AD `Mail-Users` | ✅ 2026-07-03 | | 4 | Member `support` + `mail` @ `geonet.co.id` | ✅ | | 5 | Konfigurasi Identity Provider | ✅ 2026-07-03 | | 6 | Uji Outlook + SOGo | ⏳ | | 7 | `docs/project-status.md` | ✅ | --- ## Referensi - [Mailcow LDAP docs](https://docs.mailcow.email/manual-guides/mailcow-UI/u_e-mailcow_ui-ldap/) - `Zammad/docs/notes/ldap-ad-setup.md` — parameter AD sama - `server-connection/docs/environment.md` — `LDAP_*` vars - `Mailcow/docs/notes/email-sync-migration-concept.md` — alur POP3 drain + Mailcow