Автор Тема: Postfix + ldap  (Прочитано 40981 раз)

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #15 : 09 Ноябрь 2018, 10:09:23 »
postmap -q test3@post.com ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
test3/

postmap -q new@post.com ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
new/

.:
итого 8
drwx------ 3 10003 10000 4096 ноя  9 07:35 new
drwx------ 3 10002 10000 4096 ноя  9 07:36 test3

./new:
итого 4
drwx------ 6 10003 10000 4096 ноя  9 10:07 Maildir

./new/Maildir:
итого 36
drwx------ 2 10003 10000 4096 ноя  9 07:35 cur
-rw------- 1 10003 10000  392 ноя  9 07:36 dovecot.index.log
-rw------- 1 10003 10000   24 ноя  9 10:07 dovecot.mailbox.log
-rw------- 1 10003 10000   51 ноя  9 07:36 dovecot-uidlist
-rw------- 1 10003 10000    8 ноя  9 10:07 dovecot-uidvalidity
-r--r--r-- 1 10003 10000    0 ноя  9 07:35 dovecot-uidvalidity.5be50eae
drwx------ 2 10003 10000 4096 ноя  9 07:35 new
drwx------ 5 10003 10000 4096 ноя  9 10:08 Sent
-rw------- 1 10003 10000    5 ноя  9 10:07 subscriptions
drwx------ 2 10003 10000 4096 ноя  9 07:35 tmp

./new/Maildir/cur:
итого 0

./new/Maildir/new:
итого 0

./new/Maildir/Sent:
итого 24
drwx------ 2 10003 10000 4096 ноя  9 10:07 cur
-rw------- 1 10003 10000 1440 ноя  9 10:08 dovecot.index.cache
-rw------- 1 10003 10000  680 ноя  9 10:08 dovecot.index.log
-rw------- 1 10003 10000   96 ноя  9 10:07 dovecot-uidlist
drwx------ 2 10003 10000 4096 ноя  9 10:07 new
drwx------ 2 10003 10000 4096 ноя  9 10:07 tmp

./new/Maildir/Sent/cur:
итого 4
-rw------- 1 10003 10000 377 ноя  9 10:07 1541747269.M997263P21816.mail,S=377,W=391:2,S

./new/Maildir/Sent/new:
итого 0

./new/Maildir/Sent/tmp:
итого 0

./new/Maildir/tmp:
итого 0

./test3:
итого 4
drwx------ 6 10002 10000 4096 ноя  9 07:38 Maildir

./test3/Maildir:
итого 36
drwx------ 2 10002 10000 4096 ноя  9 07:36 cur
-rw------- 1 10002 10000  392 ноя  9 07:38 dovecot.index.log
-rw------- 1 10002 10000   24 ноя  9 07:36 dovecot.mailbox.log
-rw------- 1 10002 10000   51 ноя  9 07:38 dovecot-uidlist
-rw------- 1 10002 10000    8 ноя  9 07:36 dovecot-uidvalidity
-r--r--r-- 1 10002 10000    0 ноя  9 07:36 dovecot-uidvalidity.5be50ecf
drwx------ 2 10002 10000 4096 ноя  9 07:36 new
drwx------ 5 10002 10000 4096 ноя  9 10:08 Sent
-rw------- 1 10002 10000    5 ноя  9 07:36 subscriptions
drwx------ 2 10002 10000 4096 ноя  9 07:36 tmp

./test3/Maildir/cur:
итого 0

./test3/Maildir/new:
итого 0

./test3/Maildir/Sent:
итого 24
drwx------ 2 10002 10000 4096 ноя  9 10:07 cur
-rw------- 1 10002 10000 1844 ноя  9 10:07 dovecot.index.cache
-rw------- 1 10002 10000  976 ноя  9 10:08 dovecot.index.log
-rw------- 1 10002 10000  141 ноя  9 10:07 dovecot-uidlist
drwx------ 2 10002 10000 4096 ноя  9 07:36 new
drwx------ 2 10002 10000 4096 ноя  9 10:07 tmp

./test3/Maildir/Sent/cur:
итого 8
-rw------- 1 10002 10000 380 ноя  9 07:36 1541738210.M598020P20493.mail,S=380,W=393:2,S
-rw------- 1 10002 10000 378 ноя  9 10:07 1541747276.M750096P20563.mail,S=378,W=392:2,S

./test3/Maildir/Sent/new:
итого 0

./test3/Maildir/Sent/tmp:
итого 0

./test3/Maildir/tmp:
итого 0

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #16 : 10 Ноябрь 2018, 14:27:08 »
в общем с такими настройками:

virtual_uid_maps = static:10003
virtual_gid_maps = static:10000
virtual_minimum_uid = 10000

только на new  приходят письма
как сделать, например, что бы от new на test3 приходило?

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #17 : 10 Ноябрь 2018, 16:08:23 »
Параметр virtual_uid_maps содержит идентификатор пользователя, от имени которого мы будем записывать сообщения, virtual_gid_maps делает тоже самое, но для группы. Если их несколько можно перечислить их через запятую.

Пробовал делать так:
virtual_uid_maps = static:10001, static:1002, static:1003
virtual_gid_maps = static:10001, static:1002, static:1003
virtual_minimum_uid = 10000

Все равно будет приходить только одному, кто первый казан по uid

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #18 : 12 Ноябрь 2018, 14:05:57 »
Наконец-то дошли руки до Вашей проблемы. С правами пользователей как раз всё очевидно. Электронная почта -- это не только правильная маршрутизация сообщений между серверами, но и вполне конкретные директории и файлы в файловой системе сервера. И если у postfix или dovecot нет прав на чтение/запись этих директорий и файлов, то никакой почты рассылаться/доставляться не будет просто потому, что программа не сможет поместить сообщение в файл в почтовой директории. postfix и dovecot -- очень гибкие в плане настроек программы и, в принципе, можно добиться, чтобы каждая из них по отдельности корректно соблюдала права каждого почтового пользователя, но зачем? Обычно поступают одним из двух путей: либо всю работу с файловой системой (доставкой почты в почтовые ящики и последующую работу с этими ящиками) перекладывают на плечи dovecot, а точнее, его сервиса lmtp (о чём я пытался сказать в своём самом первом посте в этой теме), либо всю работу с файловой системой осуществляют от имени одного и того же пользователя, мне в этом отношении нравится системный пользователь mail (uid -- 8, gid -- 8 ), но подойдёт и совершенно любой пользователь с правами на запись в корневую почтовую директорию. Второй путь -- стандартный для публичных почтовых сервисов, типа mail.ru: не будут же, честное слово, для каждого из миллионов почтовых ящиков заводить учётку с отдельными правами.

Ладно, перейдём к делу. Я собрал связку postfix и dovecot на своём ноутбуке с минимальными настройками (без tls и аутентификации SMTP), и с привязкой к каталогу по Вашему образцу:
dn: dc=ldaptest,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldaptest.com
dc: ldaptest

# People, ldaptest.com
dn: ou=People,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: People

# group, ldaptest.com
dn: ou=group,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: group

# users, group, ldaptest.com
dn: cn=users,ou=group,dc=ldaptest,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: users

# new, People, ldaptest.com
dn: cn=new,ou=People,dc=ldaptest,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
uid: new
cn: new
uidNumber: 10003
gidNumber: 10000
sn: new
userPassword: newPassword
homeDirectory: /home/mail/new
mail: new@post.com

dn: cn=test3,ou=People,dc=ldaptest,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
uid: test3
cn: test3
uidNumber: 10002
gidNumber: 10000
sn: test3
userPassword: test3Password
homeDirectory: /home/mail/test3
mail: test3@post.com

Для работы с почтовыми директориями и файлами я специально завёл фиктивного пользователя virtual-mail (uid -- 999, gid -- 999). Директория /home/mail принадлежит этому пользователю.

Настройки postfix: минимальный файл /etc/postfix/main.cf:
mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

virtual_mailbox_domains = post.com
virtual_transport = virtual
virtual_mailbox_base = /home/mail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
virtual_uid_maps = static:999
virtual_gid_maps = static:999
virtual_minimum_uid = 999
Файл /etc/postfix/ldap_virtual_mailbox_maps.cf:
server_host = ldap://127.0.0.1:389
search_base = ou=People,dc=ldaptest,dc=com
version = 3
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = uid
result_format = %s/

Настройки dovecot: чуть более развёрнутый (для дебага) файл /etc/dovecot/dovecot.conf:
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_debug = yes
auth_debug = yes
auth_verbose = yes

ssl = no
protocols = imap

namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = no
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    auto = no
    special_use = \Sent
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix =
}

mail_uid = 999
first_valid_uid = 999
last_valid_uid = 999
mail_gid = 999
first_valid_gid = 999
last_valid_gid = 999

passdb {
    driver = ldap
    args = /etc/dovecot/dovecot-ldap-bind-auth.conf
}

userdb {
    driver = static
    args = uid=999 gid=999 home=/home/mail/%n mail=maildir:/home/mail/%n
}
Файл с настройками аутентификации через каталог LDAP /etc/dovecot/dovecot-ldap-bind-auth.conf:
hosts = 127.0.0.1:389
ldap_version = 3
base = ou=People,dc=ldaptest,dc=com
auth_bind = yes
pass_attrs = uid=user
pass_filter = (&(objectClass=inetOrgPerson)(uid=%n))

С такими настройками thunderbird принимает и отправляет почту для пользователей new@post.com и test3@post.com, проходит аутентификацию по протоколу IMAP с паролем из каталога и без проблем работает с файловой системой. Правда, капризничает при первоначальной настройке, если не созданы каталоги /home/mail/new и /home/mail/test3, но это решается путём отправки первого тестового письма этим пользователям.

На этот минимальный костяк уже можно наращивать дополнительные навороты по своему вкусу.

Егор
« Последнее редактирование: 12 Ноябрь 2018, 14:07:37 от egor »

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #19 : 12 Ноябрь 2018, 17:37:31 »
Еще раз спасибо за развернутый ответ.
Но у меня снова проблемы.
Старался все делать как вы изложили. Ранее проходила авторизация в thunderbird по логину и паролю, сейчас и этого нет((
cat /var/log/dovecot.log
Цитировать
auth: Fatal: ldap uid=10000 gid=10000 home=/home/mail/%n mail=maildir:/home/mail/%n: Can't open configuration file uid=10000 gid=10000 home=/home/mail/%n mail=maildir:/home/mail/%n: No such file or directory
папки с пользаками там есть:
ls /home/mail/
Цитировать
new  test2  test3

Вывод dovecot-ldap.conf.ext
Цитировать
hosts = 192.168.*.*
ldap_version = 3
base = dc=ldaptest,dc=com
deref = never
scope = subtree

pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=inetOrgPerson)(uid=%u))

Далее делаю
Цитировать
mail_uid = 10000
first_valid_uid = 10000
last_valid_uid = 10010
mail_gid = 10000
first_valid_gid = 10000
last_valid_gid = 10010
и
Цитировать
userdb {
 driver = ldap
   args = uid=10000 gid=10000 home=/home/mail/%n mail=maildir:/home/mail/%n
}
passdb {
 driver = ldap
 args = /etc/dovecot/dovecot-ldap.conf.ext
}

В Postfix:
Цитировать
virtual_alias_domains = post.com
virtual_gid_maps = static:10000
virtual_mailbox_base = /home/mail/
virtual_mailbox_domains = post.com
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
virtual_minimum_uid = 10000
virtual_transport = virtual
virtual_uid_maps = static:10000
ldap_virtual_mailbox_maps.cf :
Цитировать
server_host = ldap://192.168.*.*:389
search_base = ou=People,dc=ldaptest,dc=com
version = 3
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = uid
result_format = %s/
« Последнее редактирование: 12 Ноябрь 2018, 17:42:34 от cosmostools »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #20 : 12 Ноябрь 2018, 22:33:59 »
Вместо
userdb {
 driver = ldap
   args = uid=10000 gid=10000 home=/home/mail/%n mail=maildir:/home/mail/%n
}
Укажите
userdb {
 driver = static
   args = uid=10000 gid=10000 home=/home/mail/%n mail=maildir:/home/mail/%n
}
Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #21 : 13 Ноябрь 2018, 07:33:00 »
Действительно, не внимательно прочитал. Dovecot  пропустил
Но...
Вот ошибки от dovecot:
Цитировать
imap(new): Error: opendir(/home/mail/new) failed: Permission denied (euid=10000(<unknown>) egid=10000(<unknown>) missing +r perm: /home/mail/new, dir owned by 0:0 mode=0777
Смотрю в /home/mail/ у mail/ права 777  владелец root группа root, у вложенных файлов, например у new права 755 владелец 10003 группа 10000, у других так же только меняется владелец соответственно.
Пробую менять chmod 755 -R mail/ входящие письма  появляются, но ошибка сохраняется:
Цитировать
imap(new): Error: file_dotlock_create(/home/mail/new/dovecot-uidlist) failed: Permission denied (euid=10000(<unknown>) egid=10000(<unknown>) missing +w perm: /home/mail/new, dir owned by 10003:10000 mode=0755)
и снова эта ошибка от postfix:
Цитировать
mail postfix/submission/smtpd[6943]: NOQUEUE: reject: RCPT from unknown[192.168.*.*]: 550 5.1.1 <test3@post.com>: Recipient address rejected: User unknown in virtual alias table; from=<new@post.com> to=<test3@post.com> proto=ESMTP helo=<[192.168.*.*]>
Это есть:
Цитировать
   mail   new@post.com

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #22 : 13 Ноябрь 2018, 09:11:07 »
Наверное, лучше всего просто очистить папку /home/mail (чтобы избавиться от последствий предыдущих экспериментов), поменять ей владельца на 10000:10000
rm -r /home/mail/*
chown 10000:10000 /home/mail
chmod 770 /home/mail
и начать эксперимент заново.

Можно попробовать установить корректные права на уже существующие файлы:
chown -R 10000:10000 /home/mail
chmod -R 770 /home/mail
find /home/mail -type f -exec chmod 660 {} \;
find /home/mail -type d -exec chmod 770 {} \;

Лучше завести пользователя с uid 10000 и gid 10000 -- просто чтобы dovecot не ругался на его отсутствие.

и снова эта ошибка от postfix:
Цитировать
mail postfix/submission/smtpd[6943]: NOQUEUE: reject: RCPT from unknown[192.168.*.*]: 550 5.1.1 <test3@post.com>: Recipient address rejected: User unknown in virtual alias table; from=<new@post.com> to=<test3@post.com> proto=ESMTP helo=<[192.168.*.*]>
В main.cf уберите
virtual_alias_domains = post.com
В записи пользовталя test3 в каталоге есть атрибут mail со значением test3@post.com? Покажите вывод команды
ldapsearch -xLLL -b ou=People,dc=ldaptest,dc=com '(uid=test3)'
Егор
« Последнее редактирование: 13 Ноябрь 2018, 10:25:35 от egor »

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #23 : 14 Ноябрь 2018, 10:30:51 »
Благодаря тебе все получилось !!!
Спасибо за труды и за то что терпел меня)
Теперь буду ковырять как настроить в ldap  разные домены и фильтры содержимого в dovecot и postfix ...
Если есть желание помочь буду только рад)

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #24 : 14 Ноябрь 2018, 12:57:29 »
Рад, что у Вас всё получилось.

Теперь буду ковырять как настроить в ldap  разные домены и фильтры содержимого в dovecot и postfix ...
Если есть желание помочь буду только рад)
Фильтры содержимого настраивать не приходилось. Если такое вообще возможно, попробуем разобраться. Пишите.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #25 : 15 Ноябрь 2018, 08:48:16 »
А приходилось ли делать несколько доменов на одном серваке?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #26 : 15 Ноябрь 2018, 09:38:46 »
А приходилось ли делать несколько доменов на одном серваке?
Это несложно, нужно указать дополнительные домены в virtual_mailbox_domains файла main.cf:
virtual_mailbox_domains = post.com, mail.org, mycompany.ru
и продумать систему хранения почты в файловой системе сервера. Допустим, в корневой почтовой директории создать директории с доменами:
/home/mail/post.com/
/home/mail/mail.org/
/home/mail/mycompany.ru/

и организовать доставку писем для почтовых ящиков определённого домена в папку этого домена. Например, письмо для new@post.com будет доставляться в папку /home/mail/pots.com/new/, а письмо для адресата ivan@mycompany.ru -- в папку /home/mail/mycompany.ru/ivan/ . Надеюсь, идея понятна.

Для такой системы хранения почтовых сообщений в LDAP-карте postfix указывается такое значение параметра result_format:
result_format = %d/%s/

а в dovecot.conf заменить настройку userdb на:
userdb {
    driver = static
    args = uid=10000 gid=10000 home=/home/mail/%d/%n mail=maildir:/home/mail/%d/%n
}

Решение, на мой вкус, вполне симпатичное. Само собой, можно настроить под Ваши нужды.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #27 : 15 Ноябрь 2018, 16:38:25 »
Мне тут пояснили что это должно выглядеть не так...
в ldap есть дерево
Цитировать
DN: dc=ldaptest,dc=com
Далее есть
Цитировать
DN: cn=admin,dc=ldaptest,dc=com
Надо создать как бы поддомен на основе текущего дерева, т.е. есть дерево
Ты говорил с человеком об этом тут https://pro-ldap.ru/forum/index.php?topic=63.0
Замысел наверное такой

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #28 : 15 Ноябрь 2018, 23:58:40 »
Я имел ввиду настройку почтовой системы (postfix+dovecot). Как будут представлены данные в каталоге (так называемая "структура каталога") -- это отдельная тема. Но какая бы не была эта самая структура, настройки программ (тех же postfix и dovecot) можно под неё адаптировать в любом случае.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #29 : 16 Ноябрь 2018, 09:38:41 »
как же быть с поддоменами в ldap?