Частина 8. Налаштування аутентифікації поштового сервера через OpenLDAP

Налаштування поштового сервера на базі Postfix, Dovecot та RoundCube. Зміст



OpenLDAP — це відкрита реалізація LDAP, розроблена проектом OpenLDAP, поширюється під власною вільною ліцензією OpenLDAP Public License.

OpenLDAP складається з трьох головних компонентів:

  • slapd -— незалежний демон LDAP і відповідні оверлеї і інструменти;

  • бібліотеки, що реалізують протокол LDAP;

  • утиліти, інструменти та допоміжні клієнти

Встановлення сервера OpenLDAP

Для встановлення виконаємо команду:

# apt install slapd ldap-utils

 

Та на запит введемо адміністративний пароль.

Для роботи нам будуть потрібні два модуля. Перший для бази даних mdb, а другий модуль — monitor, який потрібен для створення та динамічної підтримки гілки про поточний статус демона slapd.

Для цього створимо файл add-mod.ldif та запишемо в нього:

dn: cn=module,cn=config

objectClass: olcModuleList

cn: module

olcModulePath: /usr/lib/ldap

olcModuleLoad: back_mdb.la

olcModuleLoad: back_monitor.la

Далі виконаємо команду:

ldapadd -QY EXTERNAL -H ldapi:/// -f add-mod.ldif

Додавання схем даних

Для подальшої роботи нам в OpenLDAP будуть потрібні наступні схеми:

  • core.ldif
  • cosine.ldif
  • nis.ldif
  • inetorgperson.ldif
  • openldap.ldif
  • misc.ldif

Якщо якоїсь схеми не вистачає, її можна підключити командою на зразок:

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif

Файли за необхідними схемами знаходяться в теці /etc/ldap/schema/

Подивитись, які схеми вже підключені можна в теці /etc/ldap/slapd.d/cn=config/cn=schema

Ініціалізація бази даних

Створимо власну базу даних для домену. Для цього робимо файл db.ldif та записуємо в нього:

dn: olcDatabase=mdb,cn=config

objectClass: olcMdbConfig

olcDatabase: mdb

olcSuffix: dc=study,dc=local

olcDbDirectory: /var/lib/ldap

olcDbMaxsize: 1073741824

olcRootDN: cn=admin,dc=study,dc=local

olcRootPW: password

olcDbIndex: cn,sn,mail pres,eq,approx,sub

olcAccess: {0}to *

  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage

  by * break

olcAccess: {1}to attrs=userPassword

  by self write

  by anonymous auth

  by * none

olcAccess: {2}to *

  by self write

  by * read

dn: olcDatabase=monitor,cn=config

objectClass: olcDatabaseConfig

olcDatabase: monitor

Далі заносимо дані з нього до LDAP командою:

ldapadd -QY EXTERNAL -H ldapi:/// -f db.ldif

Для зміни прав доступу створюємо файл acl-mod.ldif та заповнюємо його:

dn: olcDatabase={-1}frontend,cn=config

changetype: modify

add: olcAccess

olcAccess: {0}to *

 by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage

  by * break

olcAccess: {1}to dn.base=""

  by * read

olcAccess: {2}to dn.base="cn=subschema"

  by * read

olcAccess: {1}to attrs=userPassword

  by self write

  by anonymous auth

olcAccess: {2}to *

  by * read

Далі командою

ldapadd -QY EXTERNAL -H ldapi:/// -f acl-mod.ldif

Вносимо ці дані до LDAP

Пересвідчимось, що обліковий запис адміністратора має доступ до служби каталогів:

ldapwhoami -WD cn=admin,dc=study,dc=local

Enter LDAP Password:

Тепер створимо дерево нашого домену створимо файл tree.ldif та занесемо в нього:

dn: dc=study,dc=local

dc: study

objectClass: top

objectClass: domain

dn: ou=users,dc=study,dc=local

ou: Users

objectClass: top

objectClass: organizationalUnit

description: Central location for UNIX users

dn: ou=groups,dc=study,dc=local

ou: Groups

objectClass: top

objectClass: organizationalUnit

description: Central location for UNIX groups

І додамо ці дані командою:

ldapmodify -a -xWD cn=admin,dc=study,dc=local -f tree.ldif

PhpLDAPAdmin

PhpLDAPadmin — це веб-додаток для адміністрування серверів Lightweight Directory Access Protocol (LDAP). Він написаний на мові програмування PHP, і розповсюджується під ліцензією GNU General Public License. Додаток доступний на 14 мовах і підтримує кодування UTF-8 для вмісту каталогу.

Встановимо веб-консоль керування LDAP командою:

# apt install phpldapadmin

Для первинного налаштування в файлі конфігурації /etc/phpldapadmin/config.phpзмінимо рядки

$servers→setValue('server','base',array('dc=example,dc=com'));

на

$servers→setValue('server','base',array('dc=study,dc=local'));

та

$servers→setValue('login','bind_id','cn=admin,dc=example,dc=com');

на

$servers→setValue('login','bind_id','cn=admin,dc=study,dc=local');

Створення користувачів та псевдонімів

Підготовка

Перед тим, як створити будь якого користувача потрібно в контейнері groups створити групу з довільною назвою. Це пов'язано з тим, що будь який користувач має належати хоча б до однієї групи.

За посиланням http://server-ip/phpldapadmin заходимо в інтерфейс phpldapadmin.Далі переміщуємось у гілку users, та натиснувши на «Create new entry here»створюємо новий об'єкт типу “Generic: Posix Group”

Далі даємо назву нашій групі, наприклад All

Наступним кроком підтверджуємо внесення даних до LDAP.

Створення користувачів

Тепер створимо нашого першого користувача — це буде користувач з іменемmailadmin, з правами якого наша поштова система буде вичитувати дані з LDAP

Для цього в розділі users тиснемо на «Create new entry here» створюємо новий об'єкт типу

«Generic: User Account»

В наступному вікні заповнюємо всі обов'язкові поля та вводимо пароль. З усіх полів для нас важливими будуть Common Name та Password. Інші поля, навіть обов'язкові, можна заповнювати довільною інформацією.

Створимо першого користувача поштового сервера з іменем user. Він створюється так само, як і користувач mailadmin, але по закінченню потрібно вписати ще йогоemail-адресу. Для цього згори вікна тиснемо на “Add new attribute” та у випадаючому списку додаємо атрибут email.

В новому полі вводимо поштову адресу користувача.

Аналогічним чином створюються і інші користувачі.

Створення псевдонімів.

Поштові псевдоніми зручніше за все створювати як групи користувачів. В інтерфейсі phpLDAPAdmin є шаблон об'єкту типу Generic: Posix Group, але нас цей шаблон не влаштовує. В ньому члени груп визначаються за uid, а Postfixостанніх версій не вміє з uid отримати dn користувача. Тому ми будемо використовувати групи типу groupofnames.

Для цього можна створити файл gr.ldif і записати в нього:

dn: cn=mygroup,ou=groups,dc=study,dc=local

objectClass: groupofnames

objectClass: inetLocalMailRecipient

cn: mygroup

description: All users

member: cn=user,ou=users,dc=study,dc=local

Далі дані з цього файлу можна занести до LDAP і через веб-інтерфейс додати поле mailRoutingAddress і внести в нього поштову адресу псевдоніму командою.

ldapadd -x -D cn=admin,dc=study,dc=local -W -f gr.ldif

Але, на мою думку, набагато зручніше створити власний шаблон дляphpLDAPAdmin і надалі користуватися саме ним. Для цього в теці/etc/phpldapadmin/templates/creation створимо файл groupOfNames.xml з вмістом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE template SYSTEM "template.dtd">

<template>

<title>Mail Aliase Group</title>

<!-- <regexp>^ou=.*,</regexp> -->

<icon>images/ou.png</icon>

<description>New groupOfNames</description>

<askcontainer>1</askcontainer>

<rdn>cn</rdn>

<visible>1</visible>

<objectClasses>

<objectClass id="groupOfNames"></objectClass>

<objectClass id="inetLocalMailRecipient"></objectClass>

</objectClasses>

<attributes>

<attribute id="cn">

<display>Group</display>

<order>1</order>

<page>1</page>

</attribute>

<attribute id="member">

<display>member</display>

<hint></hint>

<order>2</order>

<page>1</page>

<spacer>1</spacer>

</attribute>

<attribute id="mailRoutingAddress">

<display>mailRoutingAddress</display>

<hint></hint>

<order>3</order>

<page>1</page>

<spacer>1</spacer>

</attribute>

</attributes>

</template>

Після перелогіну в інтерфейсі з'явиться шаблон об'єкту з назвою “Mail Aliase Group”

При створенні групи за допомогою цього шаблону ми зразу можемо вказати email-адресу групи та внести до неї необхідних користувачів у потрібному нам форматі.

Налаштування Postfix

У файлі /etc/postfix/ldap_virtual_mailbox_maps.cf записуємо:

server_host = 127.0.0.1

bind = yes

bind_dn = cn=mailadmin,ou=users,dc=study,dc=local

bind_pw = mailadmin

search_base = ou=users,dc=study,dc=local

query_filter = (&(mail=%s))

result_attribute = mail

result_format = %d/%u/

А в файл /etc/postfix/ldapalias

server_host = 127.0.0.1

bind = no

bind_dn = cn=mailadmin,ou=users,dc=study,dc=local

bind_pw = mailadmin

search_base = dc=study,dc=local

query_filter = (&(objectclass=inetLocalMailRecipient)(mailRoutingAddress=%s))

special_result_attribute = member

leaf_result_attribute = mail

Перевірка коректності налаштувань Postfix

Після того, як ми зробили налаштування з'єднання з LDAP потрібно перевірити дані, які повернуться до Postfix.

Для перевірки роботи з поштовими скриньками виконаємо команду:

postmap -q user@study.local ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf

В результаті ми маємо отримати вивід:

study.local/user/

Для того, щоб пересвідчитися в коректності роботи з псевдонімами виконаємо:

postmap -q postmaster@study.local ldap:/etc/postfix/ldapalias

На виході має бути:

user@study.local

Якщо дані повернулися правильні, то на цьому налаштування Postfixзавершено.

Налаштування Dovecot

У файл /etc/dovecot/dovecot-ldap.conf.ext записуємо

hosts = 127.0.0.1

auth_bind = yes

ldap_version = 3

base = dc=study,dc=local

dn = cn=mailadmin,ou=users,dc=study,dc=local

dnpass = mailadmin

deref = never

scope = subtree

user_attrs = uidNumber=5000,gidNumber=5000,mail=mail=maildir:/var/mail/%d/%n

user_filter = (&(objectClass=inetOrgPerson)(mail=%u))

pass_attrs = uidNumber=5000,gidNumber=5000,mail=mail=maildir:/var/mail/%d/%n

pass_filter = (&(objectClass=inetOrgPerson)(mail=%u))

Для перевірки налаштування Dovecot потрібно зв'язатися з сервером по протоколуIMAP за допомогою поштового клієнта, або утиліти telnet.

Налаштування поштового сервера на базі Postfix, Dovecot та RoundCube. Зміст

Возврат к списку