Страница 1 из 1
Exim + dovecot + ldap
Добавлено: 2009-12-07 18:18:45
Toboe
Приветствую
Решил поднять локальный почтовый сервер в связке exim+dovecot. Делал по одному из конфигов с сайта
Столкнулся со следующей проблемой - для того чтобы разобраться как это все работает, тестово решил поднять все с авторизацией в MySQL. Все работает и жизнь хороша, но мне требуется авторизация в АД через лдап. Сразу в довекоте я поддержку лдап не включал. Теперь не могу понять в чем причина. Сделал все в такой последовательности.
1. Удалил довекот. pkg_delete -x dovecot
2. make config выставил поддержку лдап. make install clean
3. Довекот собрался и в /usr/local/etc появился файл dovecot-ldap.conf
Привел к такому виду:
Код: Выделить всё
hosts = 172.16.4.101
#uris = ldap://192.168.0.7:3268
dn = CN=dovecot,CN=Users,DC=domain,DC=ru
dnpass = dovecot
#debug_level = 0
auth_bind = yes
#auth_bind_userdn = cn=%u,cn=users,dc=corp,dc=example,dc=ru
ldap_version = 3
base = cn=users, dc=domain, dc=ru
#deref = searching
scope = subtree
#user_attrs = uidNumber=mailnull,gidNumber=mail,homeDirectory=home=/var/mail/exim/%$
#user_filter = (&(objectClass=user)(name=%u))
#pass_attrs = name=user
#pass_filter = (&(objectClass=user)(name=%u))
user_attrs=mail=home
user_filter= (&(objectClass=user)(objectClass=person)(sAMAccountName=%u)(badPasswordTime=*))
pass_attrs=sAMAccountName=user
pass_filter = (&(objectClass=user)(objectClass=person)(sAMAccountName=%u)(badPasswordTime=*))
На что при запуске выдает:
Код: Выделить всё
dovecot: Info: Dovecot v1.2.4 starting up
auth(default): Error: Error in configuration file /usr/local/etc/dovecot-ldap.conf line 1: Unknown setting: hosts
dovecot: Fatal: Auth process died too early - shutting down
Складывается впечатление что довекот собрался без поддержки лдапа. Подскажите как посмотреть с какими флагами сейчас собран довекот или если я не прав, то куда копать...
Это мой первый опыт работы с FreeBSD. В гугле чего-то найти не смог
Заранее благодарен за помощь
Re: Exim + dovecot + ldap
Добавлено: 2009-12-07 18:26:25
Toboe
Прошу прощения за оффтоп, но проблема была банальная из-за невнимательности.
Код: Выделить всё
passdb sql {
args = /usr/local/etc/dovecot-ldap.conf
}
userdb sql {
args = /usr/local/etc/dovecot-ldap.conf
}
Но мне все также интересно как увидеть флаги
Появилось пара вопросов.
1. Довекот пытаюсь прикрутить к лдапу. При попытке
Код: Выделить всё
[root@mail /usr/ports/mail/dovecot]# ldapsearch -x -b "dc=domain,dc=ru" -D "dovecot@domain.ru" -h ad,domain.ru -W
запрос проходит и выдает много разной информации. Так вот, при попытке:
Код: Выделить всё
root@b419-toboe:/home/toboe# telnet domain.ru 143
Trying 172.16.20.15...
Connected to domain.ru.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN] dovecot MUA ready
1 login exim1@domain.ru 123456
1 NO [AUTHENTICATIONFAILED] Authentication failed.
Выше указан мой конфиг dovecot-ldap.conf. В чем может быть проблема? И еще очень хотелось бы узнать об авторизации екзима через довекот. Если есть полезные ссылки - буду очень рад почитать. За последние 3 дня в голове сплошная каша...
Заранее премного благодарен за любую помощь.
Re: Exim + dovecot + ldap
Добавлено: 2009-12-08 10:18:41
Toboe
Код: Выделить всё
Dec 08 16:44:16 auth(default): Error: userdb(shelapugin.ga@fentu.int,172.16.20.224): user not found from userdb ldap
Наковырял такую вот проблему. подскажите куда копать...
dovecot.conf
Код: Выделить всё
base_dir = /var/run/dovecot/
protocols = imap
ssl = no
protocol imap {
listen = *:143
}
log_path=/var/log/dovecot.log
disable_plaintext_auth = no
shutdown_clients = yes
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 64
login_greeting = dovecot MUA ready
#login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
verbose_proctitle = yes
first_valid_uid = 26
first_valid_gid = 6
mail_access_groups = mail
mail_location = maildir:/var/mail/exim/%h
# umask = 0077
protocol imap {
imap_client_workarounds = delay-newmail outlook-idle \
netscape-eoh tb-extra-mailbox-sep
}
protocol lda {
postmaster_address = postmaster@domain-ak.ru
auth_socket_path = /var/run/dovecot/auth-master
}
#auth_cache_size = 0
#auth_username_format = %Lu
auth default {
mechanisms = plain
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
}
}
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
user = root
}
plugin {
trash = /usr/local/etc/dovecot-trash.conf
}
dovecot-ldap.conf
Код: Выделить всё
hosts = 172.16.4.101:3268
#uris = ldap://172.16.4.101:3268
#dn = CN=dovecot,OU=Users,DC=domain,DC=ru
dn = dovecot@domain.ru
dnpass = password
debug_level = 1
auth_bind = yes
#auth_bind_userdn = CN=dovecot,CN=users,DC=domain,DC=ru
auth_bind_userdn = %n@domain.ru
ldap_version = 3
base = DC=domain,DC=ru
deref = searching
scope = subtree
user_attrs=mail=home=/var/mail/exim/%$
user_filter = (&(objectClass=top)(objectClass=user)(objectClass=organizationalPerson)(objectClass=person)(sAMAccountName=%u))
#pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=top)(objectClass=user)(objectClass=organizationalPerson)(objectClass=person)(sAMAccountName=%u))
Re: Exim + dovecot + ldap
Добавлено: 2009-12-10 14:18:02
Toboe
Проблема с довектом так и не решена. Решил запустить с дебагом, на что получаю:
Код: Выделить всё
Dec 10 21:16:42 dovecot: Info: Dovecot v1.2.4 starting up
Dec 10 21:16:42 auth(default): Error: ldap_bind
Dec 10 21:16:42 auth(default): Error: ldap_simple_bind
Dec 10 21:16:42 auth(default): Error: ldap_sasl_bind
Dec 10 21:16:42 auth(default): Error: ldap_send_initial_request
Dec 10 21:16:42 auth(default): Error: ldap_new_connection 1 1 0
Dec 10 21:16:42 auth(default): Error: ldap_int_open_connection
Dec 10 21:16:42 auth(default): Error: ldap_connect_to_host: TCP 172.16.4.101:3268
Dec 10 21:16:42 auth(default): Error: ldap_new_socket: 10
Dec 10 21:16:42 auth(default): Error: ldap_prepare_socket: 10
Dec 10 21:16:42 auth(default): Error: ldap_connect_to_host: Trying 172.16.4.101:3268
Dec 10 21:16:42 auth(default): Error: ldap_pvt_connect: fd: 10 tm: -1 async: 0
Dec 10 21:16:42 auth(default): Error: ldap_open_defconn: successful
Dec 10 21:16:42 auth(default): Error: ldap_send_server_request
Dec 10 21:16:42 auth(default): Error: ldap_result ld 0x11c4c020 msgid -1
Dec 10 21:16:42 auth(default): Error: wait4msg ld 0x11c4c020 msgid -1 (timeout 0 usec)
Dec 10 21:16:42 auth(default): Error: wait4msg continue ld 0x11c4c020 msgid -1 all 1
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Connections:
Dec 10 21:16:42 auth(default): Error: * host: 172.16.4.101 port: 3268 (default)
Dec 10 21:16:42 auth(default): Error: refcnt: 2 status: Connected
Dec 10 21:16:42 auth(default): Error: last used: Thu Dec 10 21:16:42 2009
Dec 10 21:16:42 auth(default): Error:
Dec 10 21:16:42 auth(default): Error:
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Outstanding Requests:
Dec 10 21:16:42 auth(default): Error: * msgid 1, origid 1, status InProgress
Dec 10 21:16:42 auth(default): Error: outstanding referrals 0, parent count 0
Dec 10 21:16:42 auth(default): Error: ld 0x11c4c020 request count 1 (abandoned 0)
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Response Queue:
Dec 10 21:16:42 auth(default): Error: Empty
Dec 10 21:16:42 auth(default): Error: ld 0x11c4c020 response count 0
Dec 10 21:16:42 auth(default): Error: ldap_chkResponseList ld 0x11c4c020 msgid -1 all 1
Dec 10 21:16:42 auth(default): Error: ldap_chkResponseList returns ld 0x11c4c020 NULL
Dec 10 21:16:42 auth(default): Error: ldap_int_select
Dec 10 21:16:42 auth(default): Error: read1msg: ld 0x11c4c020 msgid -1 all 1
Dec 10 21:16:42 auth(default): Error: read1msg: ld 0x11c4c020 msgid 1 message type bind
Dec 10 21:16:42 auth(default): Error: read1msg: ld 0x11c4c020 0 new referrals
Dec 10 21:16:42 auth(default): Error: read1msg: mark request completed, ld 0x11c4c020 msgid 1
Dec 10 21:16:42 auth(default): Error: request done: ld 0x11c4c020 msgid 1
Dec 10 21:16:42 auth(default): Error: res_errno: 0, res_error: <>, res_matched: <>
Dec 10 21:16:42 auth(default): Error: ldap_free_request (origid 1, msgid 1)
Dec 10 21:16:42 auth(default): Error: ldap_parse_result
Dec 10 21:16:42 auth(default): Error: ldap_msgfree
Dec 10 21:16:42 auth(default): Error: ldap_result ld 0x11c4c020 msgid -1
Dec 10 21:16:42 auth(default): Error: wait4msg ld 0x11c4c020 msgid -1 (timeout 0 usec)
Dec 10 21:16:42 auth(default): Error: wait4msg continue ld 0x11c4c020 msgid -1 all 1
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Connections:
Dec 10 21:16:42 auth(default): Error: * host: 172.16.4.101 port: 3268 (default)
Dec 10 21:16:42 auth(default): Error: refcnt: 1 status: Connected
Dec 10 21:16:42 auth(default): Error: last used: Thu Dec 10 21:16:42 2009
Dec 10 21:16:42 auth(default): Error:
Dec 10 21:16:42 auth(default): Error:
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Outstanding Requests:
Dec 10 21:16:42 auth(default): Error: Empty
Dec 10 21:16:42 auth(default): Error: ld 0x11c4c020 request count 0 (abandoned 0)
Dec 10 21:16:42 auth(default): Error: ** ld 0x11c4c020 Response Queue:
Dec 10 21:16:42 auth(default): Error: Empty
Dec 10 21:16:42 auth(default): Error: ld 0x11c4c020 response count 0
Dec 10 21:16:42 auth(default): Error: ldap_chkResponseList ld 0x11c4c020 msgid -1 all 1
Dec 10 21:16:42 auth(default): Error: ldap_chkResponseList returns ld 0x11c4c020 NULL
Dec 10 21:16:42 auth(default): Error: ldap_int_select
Подскажите в чем может быть проблема....
Re: Exim + dovecot + ldap
Добавлено: 2009-12-10 17:56:11
CrazyPilot
Такой dn не прокатит, имхо. DN должен быть нормальный, типа CN=bla,CN=Users,DC=domain,Dc=ru
С какой целью закомментировали?
user_filter у вас странный какой-то. имхо должно быть что-то типа:
Код: Выделить всё
user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u)(mail=*))
Если вы в ldap.conf определяете в user_attrs хомяк юзера, то в dovecot.conf надо поставить:
для auth сокета указали user, но забыли про group? Зачем удалили client socket?
Включите auth_debug в dovecot.conf, бывает полезно..
Покажите вывод
Re: Exim + dovecot + ldap
Добавлено: 2009-12-11 1:21:42
Toboe
Код: Выделить всё
[root@mail /home/toboe]# dovecot -n
# 1.2.4: /usr/local/etc/dovecot.conf
# OS: FreeBSD 7.2-RELEASE amd64 ufs
base_dir: /var/run/dovecot/
log_path: /var/log/dovecot.log
protocols: imap
listen: *:143
ssl: no
disable_plaintext_auth: no
login_dir: /var/run/dovecot/login
login_executable: /usr/local/libexec/dovecot/imap-login
login_greeting: dovecot MUA ready
login_max_processes_count: 64
verbose_proctitle: yes
first_valid_uid: 26
first_valid_gid: 6
mail_access_groups: mail
mail_location: maildir:/var/mail/exim/%h
imap_client_workarounds: delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
lda:
postmaster_address: postmaster@domain-ak.ru
auth_socket_path: /var/run/dovecot/auth-master
auth default:
username_format: %Lu
passdb:
driver: ldap
args: /usr/local/etc/dovecot-ldap.conf
userdb:
driver: ldap
args: /usr/local/etc/dovecot-ldap.conf
socket:
type: listen
master:
path: /var/run/dovecot/auth-master
mode: 384
user: mailnull
group: mail
dovecot.conf
Код: Выделить всё
[root@mail /home/toboe]# cat /usr/local/etc/dovecot.conf
base_dir = /var/run/dovecot/
protocols = imap
ssl = no
protocol imap {
listen = *:143
}
log_path = /var/log/dovecot.log
disable_plaintext_auth = no
shutdown_clients = yes
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 64
login_greeting = dovecot MUA ready
#login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
verbose_proctitle = yes
first_valid_uid = 26
first_valid_gid = 6
mail_access_groups = mail
mail_location = maildir:/var/mail/exim/%d/%u
auth_debug = yes
# umask = 0077
protocol imap {
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}
protocol lda {
postmaster_address = postmaster@domain-ak.ru
auth_socket_path = /var/run/dovecot/auth-master
}
#auth_cache_size = 0
auth_username_format = %Lu
auth default {
mechanisms = plain
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
group = mail
}
}
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
user = root
}
dovecot-ldap.conf
Код: Выделить всё
[root@mail /home/toboe]# cat /usr/local/etc/dovecot-ldap.conf
hosts = 172.16.4.101:3268
#debug_level = 1
# Distinguished Name - the username used to login to the LDAP server
dn = shelapugin.ga@domain.ru
#auth_bind_userdn = shelapugin.ga@domain.ru
#При попытке задать явно как dn=CN=shelapugin.ga,CN=Users,DC=domain,DC=ru ничего не работает
# Password for LDAP server
dnpass = pasword
# Биндинг пользователей можно не юзать, так как auth_bind = yes
auth_bind = yes
# LDAP protocol version to use. Likely 2 or 3.
ldap_version = 3
# LDAP base. %variables can be used here.
base = dc=domain, dc=ru
# Dereference: never, searching, finding, always
deref = searching
# Search scope: base, onelevel, subtree
scope = subtree
#user_attrs=mail=/var/mail/exim/%$
user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u)(mail=*))
pass_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u)(mail=*))
В результате экспериментов и курения дебага вот что накопал:
Код: Выделить всё
Dec 11 08:16:08 auth(default): Info: client in: AUTH 1 PLAIN service=imap secured lip=127.0.0.1 rip=127.0.0.1 lport=143 rport=60850 resp=<hidden>
Dec 11 08:16:08 auth(default): Info: client out: OK 1 user=shelapugin.ga@domain.ru
Dec 11 08:16:08 auth(default): Info: master in: REQUEST 1 34904 1
Dec 11 08:16:08 auth(default): Info: ldap(shelapugin.ga@domain.ru,127.0.0.1): user search: base=dc=domain, dc=ru scope=subtree filter=(&(objectClass=user)(!(objectClass=computer))(sAMAccountName=shelapugin.ga@domain.ru)(mail=*)) fields=homeDirectory,uidNumber,gidNumber
Dec 11 08:16:08 auth(default): Info: ldap(shelapugin.ga@domain.ru,127.0.0.1): Unknown user
Dec 11 08:16:08 auth(default): Error: userdb(shelapugin.ga@domain.ru,127.0.0.1): user not found from userdb ldap
Dec 11 08:16:08 auth(default): Info: master out: NOTFOUND 1
Dec 11 08:16:08 imap-login: Info: Internal login failure (auth failed, 1 attempts): user=<shelapugin.ga@domain.ru>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
Re: Exim + dovecot + ldap
Добавлено: 2009-12-11 9:02:27
CrazyPilot
Toboe писал(а):Код: Выделить всё
Dec 11 08:16:08 auth(default): Info: ldap(shelapugin.ga@domain.ru,127.0.0.1): user search: base=dc=domain, dc=ru scope=subtree filter=(&(objectClass=user)(!(objectClass=computer))(sAMAccountName=shelapugin.ga@domain.ru)(mail=*)) fields=homeDirectory,uidNumber,gidNumber
Это вам ни о чем не говорит? Думаю sAMAccountName
shelapugin.ga@domain.ru у вас в домене не существует...
Re: Exim + dovecot + ldap
Добавлено: 2009-12-11 19:52:41
Toboe
Да, вы правы. Просто я использовал
shelapugin.ga@domain.ru, когда нужно было использовать просто shelapugin.ga
Код: Выделить всё
[root@mail /home/toboe]# ldapsearch -x -b dc=fentu,dc=int -D shelapugin.ga@domain.ru -h 172.16.4.101 -W '(&(|(mail=*)(proxyAddresses=*))(sAMAccountName=shelapugin.ga))'
sAMAccountName: shelapugin.ga
Довекот вернул такую ошибку:
Код: Выделить всё
Dec 12 02:46:39 auth(default): Info: client in: AUTH 1 PLAIN service=imap lip=172.16.20.15 rip=172.16.20.224 lport=143 rport=46694 resp=<hidden>
Dec 12 02:46:39 auth(default): Info: ldap(shelapugin.ga,172.16.20.224): bind search: base=dc=domain, dc=ru filter=(&(objectClass=user)(!(objectClass=computer))(sAMAccountName=shelapugin.ga)(mail=*))
Dec 12 02:46:39 auth(default): Info: ldap(shelapugin.ga,172.16.20.224): no fields returned by the server
Dec 12 02:46:39 auth(default): Info: client out: OK 1 user=shelapugin.ga
Dec 12 02:46:39 auth(default): Info: master in: REQUEST 1 4226 1
Dec 12 02:46:39 auth(default): Info: ldap(shelapugin.ga,172.16.20.224): user search: base=dc=domain, dc=ru scope=subtree filter=(&(objectClass=user)(!(objectClass=computer))(sAMAccountName=shelapugin.ga)(mail=*)) fields=homeDirectory,uidNumber,gidNumber
Dec 12 02:46:39 auth(default): Info: ldap(shelapugin.ga,172.16.20.224): no fields returned by the server
Dec 12 02:46:39 auth(default): Info: master out: USER 1 shelapugin.ga
Dec 12 02:46:39 dovecot: Error: User shelapugin.ga is missing UID (see mail_uid setting)
Dec 12 02:46:39 imap-login: Info: Internal login failure (auth failed, 1 attempts): user=<shelapugin.ga>, method=PLAIN, rip=172.16.20.224, lip=172.16.20.15
Понятно, что поиск не дал результатов по данной выборке. Но поле mail у меня заполнено, что настораживает. Есть ли доки по поводу структуры лдап сервера. Как проводить подобные выборки и какие поля какими переменными определяются.
Заранее спасибо
Re: Exim + dovecot + ldap
Добавлено: 2009-12-12 4:27:44
Toboe
Изменил выборку на:
Код: Выделить всё
user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u))
pass_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u))
И теперь довекот выдает такое. Попытки нагуглить адекватный ответ на эту ошибку пали крахом.
Код: Выделить всё
Dec 12 03:31:08 auth(default): Info: client in: AUTH 1 PLAIN service=imap lip=172.16.20.15 rip=172.16.20.224 lport=143 rport=57547 resp=<hidden>
Dec 12 03:31:08 auth(default): Info: ldap(shelapugin.ga,172.16.20.224): bind search: base=dc=domain, dc=ru filter=(&(objectClass=user)(!(objectClass=computer))(sAMAccountName=shelapugin.ga))
Dec 12 03:31:08 auth(default): Error: ldap(shelapugin.ga,172.16.20.224): Multiple replies found for user
Dec 12 03:31:10 auth(default): Info: client out: FAIL 1 user=shelapugin.ga temp
Dec 12 03:34:08 imap-login: Info: Disconnected: Inactivity (auth failed, 1 attempts): user=<shelapugin.ga>, method=PLAIN, rip=172.16.20.224, lip=172.16.20.15
Re: Exim + dovecot + ldap
Добавлено: 2009-12-12 17:50:25
CrazyPilot
Мда, multiple replies это конечно интересно. А вы приведите результаты ldapsearch для последнего фильтра. А насчет предпоследнего (где в фильте mail=* был)
Toboe писал(а):Код: Выделить всё
Dec 12 02:46:39 dovecot: Error: User shelapugin.ga is missing UID (see mail_uid setting)
Он вам говорит, что у пользователя не uid. И запрос из userdb не вернул ни home,ни uid,ни gid,ни mailLocation. Вы можете их в user_attrs прописать...
Re: Exim + dovecot + ldap
Добавлено: 2009-12-15 3:33:43
Toboe
В проблеме разобрался и научил довекот ходить в лдап...
Проблема с
правда так и не решилась. Другие пользователи логинятся нормально.
CrazyPilot, огромное спасибо

Re: Exim + dovecot + ldap
Добавлено: 2009-12-15 9:09:21
CrazyPilot
you are welcome
А на счет multiple replies - возможно из-за точки в sAMAccountName. Фиг знает, но вероятно что AD ее воспринимает как регулярку "любой символ", и у вас есть еще один аккаунт, удовлетворяющий этому условию.
Re: Exim + dovecot + ldap
Добавлено: 2009-12-18 11:04:53
Toboe
Приветствую вас снова!
Возникла следующая проблема. Поднятый почтовик является заменой тому что был - старый был в связке Dovecot + Exim + Openldap. И вот в старом лдапе учетки для почтовика не соответствуют нашей политике - логин АД = логин почтовика. Я вижу два варианта:
1. Либо использование старых учеток, дабы не мучать пользователей. Но возникает проблема с довекотом, который начинает пытаться авторизоваться под несуществующей учеткой.
2. Либо перенос всей почты со старого сервера на новый, с переходом на новые логины. Но возможно ли такое?
Надеюсь на вашу помощь, заранее спасибо