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

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #30 : 16 Ноябрь 2018, 09:54:32 »
Вы планируете использовать каталог только для организации почтовой системы, или для чего-то ещё?

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #31 : 16 Ноябрь 2018, 10:33:14 »
Пока еще не ясно. Возможно в перспективе будет организовано в виде схемы разделения организации по подразделениям, а так же доступ к данным по samba (где-то эту тему я видел).
Там было организовано по такому принципу https://www.ibm.com/support/knowledgecenter/en/SSDV85_4.1.0/Admin/tasks/installingldap_server_existing.html

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #32 : 16 Ноябрь 2018, 10:35:55 »
В общем сделал так:
Цитировать
dn: uid=Admin,dc=admin,dc=ldaptest,dc=com
objectclass: posixAccount
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
gidNumber: 10000
sn: Admin
displayName: Admin
uid: Admin
homeDirectory: /home/mail/admin
cn: Admin
uidNumber: 10010
userPassword: {SSHA}sAN8GSAGDW+GDJcUasjoiQN8tBJmZhQI
loginShell: /bin/shell

Пробую добавить схему:
Цитировать
ldapadd -x -W -D "cn=admin,dc=admin,dc=ldaptest,dc=com" -f sub.ldif

Не прокатывает ((
Цитировать
ldap_bind: Invalid credentials (49)

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #33 : 16 Ноябрь 2018, 14:06:09 »
Если Вы хотите, чтобы я Вам помог решить Вашу задачу, придётся сначала её сформулировать. Глупо начинать с выполнения каких-то команд, смысл которых Вы не понимаете -- они заведомо не дадут никакого результата. И читать выдернутые из контекста куски чужих HOWTO-шек тоже бессмысленно -- человек давным-давно решал свою задачу, которая абсолютно не связана с Вашей, пытаться их воспроизвести механически, не вникая в суть, тоже глупо.

Давайте всё-таки разберёмся, что Вы собираетесь хранить в каталоге. Будет ли это одна организация с отделами, или несколько организаций. Как будут называться эти отделы (организации)? Будут ли в каталоге полноценные учётные записи пользователей (чтобы, например, подключаться по ssh к серверу) с разными правами доступа, или достаточно только функционала приёма-отправки электронной почты? Как будут называться Ваши почтовые домены (то, что после "собаки")? Зачем Вам нужна samba (не в плане того, что она делает, это я и сам знаю, а с какой целью Вы собираетесь её использовать)? Без ответа на эти базовые вопросы структуру каталога не спроектировать, а без этого дальше двигаться нет смысла.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #34 : 16 Ноябрь 2018, 15:26:08 »
в общем у меня ряд задач:
1. Установка dovecot  и  postfix
2. ssl/tls
3. Антиспам фильтр (spamassasin)
4. Фильтр содержимого (об этом я говорил ранее)
5. Несколько доменов и пересылка между ними
6. Web-интерфейс
7. Антивирус
8. Установка и привязка ldap

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #35 : 16 Ноябрь 2018, 15:53:47 »
1. Сделано (без престрастий)
2. Стандартные ssl (pem), пока что так
3. Установлен и настроен blacklist
4. В процессе
5. У меня было реализовано  так:
Цитировать
mydestination = $myhostname, post.com, other.com,  mail.post.com, mail.other.com, localhost.post.com, localhost

ты мне подал другую мысль но смысл тот же примерно, а надо в ldap реализовать
6. Сделано
7. Сделано (ну почти, установлено, но не настроено)
8. Ты помог сделать

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #36 : 18 Ноябрь 2018, 09:27:12 »
Здравствуйте. Посидел сегодня над Вашей задачей, сформулировав её так: на сервере обслуживается два почтовых домена post.com и other.com, настройки почтовых ящиков этих доменов берутся из каталога LDAP. Если письмо приходит на ящик some_user@mail.post.com, оно доставляется в ящик some_user@post.com, если письмо приходит на ящик some_user@mail.other.com, оно доставляется в ящик some_user@other.com. В итоге у меня получилось следующее.

Подготовка почтовой директории:
mkdir /home/mail/post.com
mkdir /home/mail/other.com
chown -R 10000:10000 /home/mail

Содержимое каталога LDAP:
# Корневая запись каталога
dn: dc=ldaptest,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldaptest.com
dc: ldaptest

# Контейнер для настроек почтовой системы
dn: ou=Mail,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: Mail

# Контейнер для почтовых ящиков домена post.com
dn: cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: applicationProcess
cn: post.com

# Контейнер для почтовых ящиков домена other.com
dn: cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: applicationProcess
cn: other.com

# Настройки почтового ящика new@post.com
dn: uid=new,cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: new
cn: new
sn: new
userPassword: newPassword
mail: new@post.com

# Настройки почтового ящика test3@post.com
dn: uid=test3,cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: test3
cn: test3
sn: test3
userPassword: test3Password
mail: test3@post.com

# Настройки почтового ящика user1@other.com
dn: uid=user1,cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: user1
cn: user1
sn: user1
userPassword: user1Password
mail: user1@other.com

# Настройки почтового ящика user2@other.com
dn: uid=user2,cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: user2
cn: user2
sn: user2
userPassword: user2Password
mail: user2@other.com

Настройки postfix. Файл /etc/postfix/main.conf:
mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination

virtual_mailbox_domains = post.com other.com
virtual_alias_domains = mail.post.com mail.other.com
virtual_transport = virtual
virtual_mailbox_base = /home/mail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_multi_domain_mailbox_maps.cf
virtual_alias_maps = hash:/etc/postfix/virtual_alias_domains_rewrite_map
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_minimum_uid = 10000

Файл /etc/postfix/ldap_virtual_multi_domain_mailbox_maps.cf:
server_host = ldap://127.0.0.1:389
search_base = ou=Mail,dc=ldaptest,dc=com
version = 3
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = mail
result_format = %d/%u/

Файл /etc/postfix/virtual_alias_domains_rewrite_map:
@mail.post.com @post.com
@mail.other.com @mail.other.com
Для него нужно сформировать файл virtual_alias_domains_rewrite_map.db:
postmap /etc/postfix/virtual_alias_domains_rewrite_map

Настройки 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 = 10000
first_valid_uid = 10000
last_valid_uid = 10000
mail_gid = 10000
first_valid_gid = 10000
last_valid_gid = 10000

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

userdb {
    driver = static
    args = uid=10000 gid=10000 home=/home/mail/%d/%n mail=maildir:/home/mail/%d/%n
}

Файл /etc/dovecot/dovecot-ldap-bind-auth.conf:
hosts = 127.0.0.1:389
ldap_version = 3
base = ou=Mail,dc=ldaptest,dc=com
auth_bind = yes
pass_attrs = mail=user
pass_filter = (&(objectClass=inetOrgPerson)(mail=%u))

Будьте внимательны -- изменения внесены ВО ВСЕ файлы и структуру каталога. При настройках thunderbird в качестве имени пользователя для аутентификации нужно использовать полное название почтового ящика, то есть не new, а new@post.com, во избежание путаницы, которая может возникнуть, когда в разных доменах будут почтовые ящики с одинаковым именем пользователя, например, new@post.com и new@other.com.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #37 : 19 Ноябрь 2018, 11:34:27 »
Все это здорово, но все же не совсем то что я хотел....
Сказали надо что бы было в ldap  схема в виде главного домена дерева
Цитировать
dc=ldaptest,dc=com
и поддоменов
Цитировать
dc=test,dc=ldaptest,dc=com
Главная ветка у нас есть, а как добавить подветку не пойму.  При создании выбираем класс объекта

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #38 : 19 Ноябрь 2018, 13:15:09 »
Все это здорово, но все же не совсем то что я хотел....
Сказали надо что бы было в ldap  схема в виде главного домена дерева
Цитировать
dc=ldaptest,dc=com
и поддоменов
Цитировать
dc=test,dc=ldaptest,dc=com

Я у Вас спрашивал, что Вы хотите от каталога, Вы мне ничего не ответили. Вы мне сказали, что Вам нужно от почтовой системы, я сделал, как Вы просили. Если Вы и дальше будете играть в кошки-мышки, то результата не получите. Нужно яснее формулировать свои задачи.

Главная ветка у нас есть, а как добавить подветку не пойму.  При создании выбираем класс объекта

Проблема в том, что атрибут dc есть только во вспомогательном объектном классе dcObject, а на вспомогательном классе запись не построить. Нужен какой-нибудь структурный объектный класс, обычно используют объектный класс organization:
dn: dc=test,dc=ldaptest,dc=com
objectClass: organization
objectClass: dcObject
o: test
dc: test

Нужно иметь хотя бы минимальное представление о каталогах LDAP, чтобы с ними работать. Крайне рекомендую почитать хотя бы 2-ю и 3-ю главы учебника LFRS.

Егор

cosmostools

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #39 : 21 Ноябрь 2018, 10:42:30 »
привет, все получилось теперь надо с фильтрами что-то делать, через sieve

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #40 : 22 Ноябрь 2018, 00:33:50 »
привет, все получилось теперь надо с фильтрами что-то делать, через sieve
Рад, что у Вас всё получилось. С sieve работать не приходилось, но даже самые первые ссылки в google говорят о том, что это не сложно, по крайней мере на базовом уровне. Самому сейчас экспериментировать с этим, к сожалению, времени нет.

Егор

icom

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #41 : 11 Декабрь 2018, 12:07:29 »
Вопрос в догонку: связка postfix+docecot+ldap
При получении письма постфикс смотрит в каталоге AD windows сервера находит учетку, имя пользователя его устраивает - принимаем почту, можно ли к ней привязать несколько виртуальных доменов?

есть: User@mydomain.ru
а хочется чтоб было User@mydomain.ru=User@mydomain1.ru=User@mydomain2.ru=User@mydomainX.ru

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #42 : 11 Декабрь 2018, 15:57:16 »
Вопрос в догонку: связка postfix+docecot+ldap
При получении письма постфикс смотрит в каталоге AD windows сервера находит учетку, имя пользователя его устраивает - принимаем почту, можно ли к ней привязать несколько виртуальных доменов?

есть: User@mydomain.ru
а хочется чтоб было User@mydomain.ru=User@mydomain1.ru=User@mydomain2.ru=User@mydomainX.ru

В теории можно. На практике же многое зависит от того, как у Вас сейчас postfix привязывается к AD. Покажите Ваши настройки, попробуем сделать.
Егор

icom

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #43 : 12 Декабрь 2018, 03:52:34 »
main.cf
virtual_mailbox_maps = ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf
virtual_mailbox_maps.cf
server_host = fdqn имя ближайшего контроллера
search_base = dc=домен, dc=домен, dc=домен
bind = yes
bind_dn = cn=учетка,cn=Users,dc=домен,dc=домен,dc=домен
bind_pw = пароль
domain = домен
start_tls = no
scope = sub
query_filter = (&(objectClass=Person)(sAMAccountName=%u)(!(userAccountControl=66050)))
result_attribute = mail
leaf_result_attribute = mail
cache = no

Все это запущено на debian 9.6, postfix 3.1.8, используемый контроллер домена win2k16, уровень домена 2k3

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Postfix + ldap
« Ответ #44 : 12 Декабрь 2018, 20:29:58 »
Предлагаю сделать через алиасы, примерно так:
virtual_mailbox_domains = mydomain.ru
virtual_alias_domains = mydomain1.ru mydomain2.ru mydomainX.ru
virtual_mailbox_maps = ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf
virtual_alias_maps = hash:/etc/postfix/virtual_alias_domains_rewrite_map

Файл /etc/postfix/virtual_alias_domains_rewrite_map:
@mydomain1.ru @mydomain.ru
@mydomain2.ru @mydomain.ru
@mydomainX.ru @mydomain.ru

Не забудьте сформировать файл virtual_alias_domains_rewrite_map.db:
postmap /etc/postfix/virtual_alias_domains_rewrite_map

Файл /etc/postfix/ldap/virtual_mailbox_maps.cf остаётся без изменений.

Егор