Частина 8. Налаштування аутентифікації поштового сервера через OpenLDAP
- Деталі
- Категорія: Поштовий сервер
- Опубліковано: Середа, 26 червня 2019, 10:06
- Автор: Super User
- Перегляди: 6816
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.l
a
Далі виконаємо команду:
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 Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
В результаті ми маємо отримати вивід:
study.local/user/
Для того, щоб пересвідчитися в коректності роботи з псевдонімами виконаємо:
postmap -q Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її. ldap:/etc/postfix/ldapalias
На виході має бути:
Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Якщо дані повернулися правильні, то на цьому налаштування 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"
В електронному вигляді