Сразу оговорюсь - exim и dovecot ставлю в первый раз, раньше все как-то сендмейлом обходился. Читаю сейчас доку на exim.org, но просветления что-то не наступает. Поэтому, если вопросы подобного характера задавались тысячу раз и обсосаны со всех сторон - просьба не пинать, можно кидаться ссылками. И да, поиск я пользовал
Объясните, плз, по возможности, что к чему.
Итак.
Код: Выделить всё
[root@flanker ~]# uname -r
7.0-RELEASE
[root@flanker ~]# pkg_info | grep exim
exim-4.69 High performance MTA for Unix systems on the Internet
[root@flanker ~]# pkg_info | grep dovecot
dovecot-1.1.2_1 Secure and compact IMAP and POP3 servers
Итак, довекот я настроил. Он работает по imap, лезет в ad через ldap и авторизовывает пользователей по auth_bind. Все ок. Поле mail выдирается из ad.
Прекрасно. Теперь надо настроить exim, и тут возник затык. Если авторизовывать пользователей в exim'e через довекот - то он берет с его помощью из ad поле mail и все ок. При доставке письма допустим на superman@domain.com exim по проверяет существование такого mail у какого-нить юзера в ad. Такой mail есть, допустим у аккаунта crazypilot. Все ок, exim отдает довекоту письмо на доставку:
Код: Выделить всё
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
Код: Выделить всё
2008-08-14 10:45:18 [1221] SMTP connection from [10.10.1.211]:3268 I=[10.10.1.213]:25 (TCP/IP connection count = 1)
2008-08-14 10:45:24 [1432] 1KTWaK-0000N6-Rm <= superman@domain.com H=([10.10.1.211]) [10.10.1.211]:3268 I=[10.10.1.213]:25 P=esmtpa A=dovecot_plain: S=590 id=48A3D47E.5010705@domain.com T="sdfs" from <superman@domain.com> for superman@domain.com
2008-08-14 10:45:24 [1432] SMTP connection from ([10.10.1.211]) [10.10.1.211]:3268 I=[10.10.1.213]:25 closed by QUIT
2008-08-14 10:45:24 [1433] cwd=/var/spool/exim 3 args: /usr/local/sbin/exim -Mc 1KTWaK-0000N6-Rm
2008-08-14 10:45:25 [1433] 1KTWaK-0000N6-Rm ** superman@domain.com F=<superman@domain.com> P=<superman@domain.com> R=dovecot_user T=dovecot_delivery: Child process of dovecot_delivery transport returned 67 (could mean user nonexistent) from command: /usr/local/libexec/dovecot/deliver
2008-08-14 10:45:25 [1437] cwd=/var/spool/exim 7 args: /usr/local/sbin/exim -t -oem -oi -f <> -E1KTWaK-0000N6-Rm
2008-08-14 10:45:25 [1437] 1KTWaL-0000NB-2e <= <> R=1KTWaK-0000N6-Rm U=mailnull P=local S=1388 T="Mail delivery failed: returning message to sender" from <> for superman@domain.com
2008-08-14 10:45:25 [1433] 1KTWaK-0000N6-Rm Completed QT=1s
2008-08-14 10:45:25 [1439] cwd=/var/spool/exim 3 args: /usr/local/sbin/exim -Mc 1KTWaL-0000NB-2e
2008-08-14 10:45:25 [1439] 1KTWaL-0000NB-2e ** superman@domain.com F=<> P=<> R=dovecot_user T=dovecot_delivery: Child process of dovecot_delivery transport returned 67 (could mean user nonexistent) from command: /usr/local/libexec/dovecot/deliver
2008-08-14 10:45:25 [1439] 1KTWaL-0000NB-2e Frozen (delivery error message)
Вопрос - как настроить exim, чтобы это работало? Честно говоря, не совсем догоняю, как это вообще сделать.
По-моему надо настроить exim так, чтобы он лазил в AD, искал там поле mail - забирал sAMAccountName и отдавал это значение на доставку довекоту, который в свою очередь лез в ad...Какая-то мутная схема получается.
Подскажите как сделать лучше, или как решить проблему с пользователями.
И еще вопрос: что значит condition в роутерах, и как используются результаты раскрытия строки в condition. В документации написано что результаты используются в работе роутера, но как я не понял.
Вот конфиг exim: (обрезанный)
Код: Выделить всё
LDAP_AD_BINDDN = "CN=ldap ldap,CN=Users,DC=domain,DC=com"
LDAP_AD_PASS = 12345678
LDAP_AD_BASE_DN = "CN=Users,DC=domain,DC=com"
LDAP_AD_MAIL_RCPT =\
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///DC=domain,DC=com?mail?sub?(&(|(objectClass=top)(objectClass=user)\
(objectClass=organizationalPerson)(objectClass=person))\
(mail=${quote_ldap:${local_part}@${domain}}))
........
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
adsi_check:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
forbid_pipe
forbid_file
data = ${lookup ldap{LDAP_AD_MAIL_RCPT}{${local_part}@${domain}}{:fail: User unknown}}
redirect_router = dovecot_user
dovecot_user:
driver = accept
condition = ${lookup ldap{LDAP_AD_MAIL_RCPT}{yes}{no}}
transport = dovecot_delivery
cannot_route_message = Unknown user
begin transports
remote_smtp:
driver = smtp
local_delivery:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
user = $local_part
mode = 0660
no_mode_fail_narrower
dovecot_delivery:
driver = pipe
delivery_date_add
envelope_to_add
return_path_add
check_string =
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
user = mailnull
group = mail
message_prefix = ""
message_suffix = ""
log_output
begin authenticators
dovecot_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/comn/dovecot/auth-client
server_set_id = $auth1
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/comn/dovecot/auth-client
server_set_id = $auth2
Код: Выделить всё
protocols = imap
listen = *
disable_plaintext_auth = no
ssl_disable = yes
mail_location = maildir:%h
mail_access_groups = mail
verbose_proctitle = yes
first_valid_uid = 26
last_valid_uid = 26
first_valid_gid = 6
last_valid_gid = 6
maildir_copy_with_hardlinks = yes
log_path = /var/log/dovecot.log
mail_uid = 26
mail_gid = 6
mail_executable = /usr/local/etc/dov_prog.sh
protocol imap {
imap_client_workarounds = delay-newmail outlook-idle tb-extra-mailbox-sep
}
protocol lda {
postmaster_address = superman@domain.com
sendmail_path = /usr/sbin/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
auth_cache_size = 0
auth_username_format = %Lu
auth default {
mechanisms = plain
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
group = mail
}
client {
path = /var/run/dovecot/auth-client
mode = 0666
user = mailnull
group = mail
}
}
}
Код: Выделить всё
hosts = boss2.domain.com:3268
auth_bind = yes
ldap_version = 3
base = dc=domain, dc=com
deref = searching
scope = subtree
user_attrs=mail=home=/var/mail/%$
user_filter = (&(objectClass=top)(objectClass=user)(objectClass=organizationalPerson)(objectClass=person)(sAMAccountName=%u))
pass_filter = (&(objectClass=top)(objectClass=user)(objectClass=organizationalPerson)(objectClass=person)(sAMAccountName=%u))
Если что надо еще - спросите, жду любой помощи