exim + dovecot + авторизация win2003

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 10:54:38

Настраивал по статье http://www.lissyara.su/articles/freebsd ... d_win2003/
Авторизация в оутлуке проходит,письма отправляются. Но пользователям в локалке не доходят.

Debug Exim'а выдает:

Код: Выделить всё

10:31:13  1779 --------> dovecot_user router <--------
10:31:13  1779 local_part=sev domain=em.ru
10:31:13  1779 checking "condition"
10:31:13  1779 expanding: $local_part@$domain
10:31:13  1779    result: sev@em.ru
10:31:13  1779 expanding: @$domain
10:31:13  1779    result: @em.ru
10:31:13  1779 expanding: SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'
10:31:13  1779    result: SELECT `goto` FROM `alias` WHERE `address`='sev@oem.ru' OR `address`='@oem.ru'
10:31:13  1779 search_open: mysql "NULL"
10:31:13  1779   cached open
10:31:13  1779 search_find: file="NULL"
10:31:13  1779   key="SELECT `goto` FROM `alias` WHERE `address`='sev@em.ru' OR `address`='@em.ru'" partial=-1 affix=NULL starflags=0
10:31:13  1779 LRU list:
10:31:13  1779 internal_search_find: file="NULL"
10:31:13  1779   type=mysql key="SELECT `goto` FROM `alias` WHERE `address`='sev@em.ru' OR `address`='@em.ru'"
10:31:13  1779 cached data used for lookup of SELECT `goto` FROM `alias` WHERE `address`='sev@em.ru' OR `address`='@em.ru'
10:31:13  1779 lookup failed
10:31:13  1779 expanding: yes
10:31:13  1779    result: yes
10:31:13  1779 skipping: result is not used
10:31:13  1779 expanding: no
10:31:13  1779    result: no
10:31:13  1779 expanding: ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}{yes}{no}}
10:31:13  1779    result: no
10:31:13  1779 dovecot_user router skipped: condition failure
10:31:13  1779 no more routers
10:31:13  1779 post-process sev@em.ru (2)
10:31:13  1779 LOG: MAIN
10:31:13  1779   ** sev@em.ru: Unrouteable address
Подскажите почему он не находит пользователей. 4ый день уже голову ломаю.

вот мои конфиги:
конфиг exim'а

Код: Выделить всё

primary_hostname = mailgw.kolsk.em.ru
hide mysql_servers = localhost/exim/exim/exim
domainlist local_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}
hostlist   relay_from_hosts = localhost:127.0.0.0/8:192.168.0.0/16
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
qualify_domain = em.ru
qualify_recipient = em.ru
allow_domain_literals = true

exim_user = mailnull
exim_group = mail
never_users = root

rfc1413_query_timeout = 0s


sender_unqualified_hosts = +relay_from_hosts
recipient_unqualified_hosts = +relay_from_hosts

ignore_bounce_errors_after = 45m
timeout_frozen_after = 7d
freeze_tell = sev@em.ru
helo_accept_junk_hosts = 10.10.0.0/24:10.10.1.0/24:192.168.6.0/24
auto_thaw = 1h

smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"
smtp_accept_max = 50
smtp_accept_max_per_connection = 30
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20

split_spool_directory = true
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 10M
helo_allow_chars = _
smtp_enforce_sync = true

log_selector = \
	+all_parents \
	+connection_reject \
	+incoming_interface \
	+lost_incoming_connection \
	+received_sender \
	+received_recipients \
	+smtp_confirmation \
	+smtp_syntax_error \
	+smtp_protocol_error \
	-queue_run
	
syslog_timestamp = no

begin acl
acl_check_rcpt:

    accept hosts = :
    
	deny    message = "incorrect symbol in address"
		domains = +local_domains
		local_parts = ^[.] : ^.*[@%!/|]
	
	deny	message = "incorrect symbol in addres"
		domains = !+local_domains
		local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./


 

#  deny    message       = Restricted characters in address
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

    deny	message		= "HELO/EHLO require by SMTP RFC"
		condition	= ${if eq{$sender_helo_name}{}{yes}{no}}

  accept  authenticated = *

    deny	message		= "Your IP in HELO - access denied!"
		hosts		= * : !+relay_from_hosts : !81-10.autoem.ru
		condition	= ${if eq{$sender_helo_name}\
	{$sender_host_address}{true}{false}}

    deny 	condition	= ${if eq{$sender_helo_name}\
    {$interface_address}{yes}{no}}
		hosts		= !127.0.0.1: !localhost : *
		message		= "main IP in your HELO! Access denied!"

    deny	condition	= ${if match{$sender_helo_name}\
    {\N^\d+$\N}{yes}{no}
		hosts		= !127.0.0.1 : !localhost : *
		message		= "can not be only number in HELO!"

    deny	condition	= ${if eq{$sender_address}{}{yes}{no}}
		hosts		= !127.0.0.1 : !localhost : *
		message		= "Sender address is empty?! not for RFC..."

    deny	condition	= ${if match{$sender_helo_name}{mail.co.ru}{no}{yes}}
		hosts		= !127.0.0.1 : !localhost : *
		message		= "Access deny!"

 warn
    set acl_m0 = 10s
 warn
    hosts = +relay_from_hosts : 127.0.0.1/8 : 10.10.0.0/24 : 10.10.1.0/24 : 192.168.6.0/24 
    set acl_m0 = 0s
 warn
    logwrite = Delay $acl_m0 for $sender_host_name \
      [$sender_host_address] with HELO=$sender_helo_name. Mail \
      from $sender_address to $local_part@$domain.
                                                                                                      
      delay = $acl_m0

  accept domains	= +local_domains
         endpass
         message	= "In my mailserver not stored this user"
         verify		= recipient
                                    
    accept  domains	= +relay_to_domains
    endpass
    message		= "main server not know how relay to this address"
    verify		= recipient

    deny    message	= you in blacklist: $dnslist_domain --> $dnslist_text
            dnslists	= opm.blitzed.org : \
                          cbl.abuseat.org : \
                          bl.csma.biz : \
                          dynablock.njabl.org

    accept	hosts	= +relay_from_hosts
  
    deny	message	= "relay not permitted"

acl_check_data:

  accept

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

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
               `address`='${quote_mysql:$local_part@$domain}' OR \
                               `address`='${quote_mysql:@$domain}'}}

dovecot_user:
  driver = accept
    condition = ${lookup mysql{SELECT `goto` FROM \
      `alias` WHERE \
        `address`='${quote_mysql:$local_part@$domain}' OR \
          `address`='${quote_mysql:@$domain}'}{yes}{no}}
            transport = dovecot_delivery
 
begin transports

remote_smtp:
  driver = smtp

dovecot_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull

address_pipe:
  driver = pipe
  return_output

address_reply:
  driver = autoreply

begin authenticators

plain_pam:
    driver		= plaintext
    public_name		= PLAIN
    server_prompts	= :
    server_condition	= ${if pam{$auth2:${sg{$auth3}{:}{::}}}}
    server_set_id	= $auth2
                                        
login_pam:
    driver		= plaintext
    public_name		= LOGIN
    server_prompts	= Username:: : Password::
    server_condition	= ${if pam{$auth1:${sg{$auth2}{:}{::}}}}
    server_set_id           = $auth1
dovecot.conf

Код: Выделить всё

protocols = imap
listen = *
disable_plaintext_auth = no
ssl = no
mail_location = maildir:~
mail_privileged_group = 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
login_greeting = dovecot MUA ready
log_path = /var/log/dovecot.log
mail_debug = yes
auth_cache_size = 0
auth_username_format = %Lu
mail_uid = 26
mail_gid = 6

protocol imap {
    imap_client_workarounds = delay-newmail outlook-idle tb-extra-mailbox-sep
}

protocol lda {
    postmaster_address = sev@autoem.ru
    sendmail_path = /usr/sbin/sendmail
    auth_socket_path = /var/run/dovecot/auth-master
}

auth default {
 mechanisms = plain
 passdb pam {
 args = exim
 }
 
 userdb static {
 args = uid=26 gid=6 home=/var/mail/exim/%Lu allow_all_users=yes
 }
 user = root
 
 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
 }
}
}

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 11:22:32

Сделайте так, чтоб в этом запросе (SELECT `goto` FROM `alias` WHERE `address`='sev@oem.ru' OR `address`='@oem.ru') возвращалось значение и будет вам счастье.

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 11:29:27

Да не очень то хочется каждого пользователя в алиасах прописывать. Может все таки можно как нибудь по другому?

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 11:32:58

Конечно можно. Только у вас 3 роутера, 2 из которых используют один и тот же запрос!!!
БД пользователей может храниться в mysql, либо можно вытягивать поле mail из AD, либо в файлах, либо ...

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 11:43:14

Я понимаю что роутер dovecot_user использует неправильный запрос. Как сделать чтобы он проверял существование пользователя в AD? авторизация же проходит нормально. на основе этого нельзя никак сделать?

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 11:50:27

Вы не поверите, но вы используете в качестве БД - файл с паролями (pam сервис).
Как пример:

Код: Выделить всё

В основную часть, до acl (естественно подставьте свои данные)

ldap_default_servers = <;  172.27.1.2:3268 ; 10.1.11.3:3268 
LDAP_AD_BINDDN =${quote_ldap:CN=exim,CN=Users,DC=******,DC=*****,DC=com}
LDAP_AD_PASS =PASSWORD
LDAP_AD_BASE =DC=******,DC=***,DC=com

LDAP_AD_RCPT =user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?mail?sub?\
(&\
    (|\
    (objectclass=user)(objectclass=person)\
    )\
    (!(userAccountControl:1.2.840.113556.1.4.803:=2))\
    (mail=${quote_ldap:$local_part}@${quote_ldap:$domain})\
)

В роутеры
ldapuser:
        driver = accept
        domains = +local_domains
        condition = ${if !eq{}{${lookup ldapdn{LDAP_AD_RCPT}}}{yes}{no}}
        transport = dovecot_delivery

В транспорты
dovecot_delivery:
        driver = pipe
        command = /usr/libexec/dovecot/deliver -d $local_part@$domain
        message_prefix = 
        message_suffix =
        log_output
        delivery_date_add
        envelope_to_add
        return_path_add
        user = mailnull
        group = mail


blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 11:58:44

Теперь dovecot:
в dovecot.conf

Код: Выделить всё

passdb {
  driver = ldap
  args = /etc/dovecot/dovecot-ldap.conf.ext
}
userdb {
  driver = ldap
  args = /etc/dovecot/dovecot-ldap.conf.ext
}

Собственно dovecot-ldap.conf.ext

hosts = 10.1.11.3:3268 172.27.1.2:3268
dn = cn=exim,cn=Users,dc=******,dc=****,dc=com
dnpass = PASSW
auth_bind = no
ldap_version = 3
base = dc=********, dc=***, dc=com
deref = searching
scope = subtree

user_filter = (&(objectclass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=%u)(otherMailbox=%u)))
pass_filter = (&(objectclass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=%u)(otherMailbox=%u)))
только правильно распорядитесь.

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 12:00:49

я плохо в этом разбираюся. вот учуся потихоньку.
а вы бы не могли обьяснить вот эти строчки:
ldap_default_servers = <; 172.27.1.2:3268 ; 10.1.11.3:3268
LDAP_AD_BINDDN =${quote_ldap:CN=exim,CN=Users,DC=******,DC=*****,DC=com}
LDAP_AD_PASS =PASSWORD
LDAP_AD_BASE =DC=******,DC=***,DC=com

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 12:04:17

список серверов GC - с глобальным каталогом, если несколько.
3 макроса, в которых определяется непривилегированный пользователь, способный соединяться с AD и искать есть пользователь по переданному e-mail адресу.

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 13:11:02

сделал все как написали.получил:

Код: Выделить всё

failed to expand condition "${if !eq{}{${lookup ldapdn{user=$ {quote_ldap:CN=exim,CN=Users,DC=kolsk,DC=em,DC=ru} pass=***** ldap:///DC=kolsk,DC=em,DC=ru?mail?sub?(&(|(objectclass=user)(objectclass=person))(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=${quote_ldap:$local_part}@${quote_ldap:$domain}))}}}{yes}{no}}" for ldapuser router: $ not followed by letter, digit, or {
sev@em.ru: Unrouteable address


sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 13:33:34

Спасибо в логах exima'а пропали ошибки.
привел dovecot к такому виду:

Код: Выделить всё

protocols = imap
listen = *
disable_plaintext_auth = no
ssl = no
mail_location = maildir:~
mail_privileged_group = 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
login_greeting = dovecot MUA ready
log_path = /var/log/dovecot.log
mail_debug = yes
auth_cache_size = 0
auth_username_format = %Lu
mail_uid = 26
mail_gid = 6

protocol imap {
    imap_client_workarounds = delay-newmail outlook-idle tb-extra-mailbox-sep
}

protocol lda {
    postmaster_address = sev@em.ru
    sendmail_path = /usr/sbin/sendmail
    auth_socket_path = /var/run/dovecot/auth-master
}


auth default {
 mechanisms = plain


passdb {
    driver = ldap
    args = /usr/local/etc/dovecot-ldap.conf
    }
    
userdb {
    driver = 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
 }
}
}
и dovecot-ldap.conf

Код: Выделить всё

hosts = 10.10.0.201
dn = cn=exim,cn=Users,dc=kolsk,dc=em,dc=ru
dnpass = *****
auth_bind = no
ldap_version = 3
base = dc=kolsk,dc=em,dc=ru
deref = searching
scope = subtree
#user_attrs=mail=home=/var/mail/%$
user_filter = (&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=%u)(otherMailBox=%u)))
pass_filter = (&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=%u)(otherMailbox=%u)))
Оутлук перестал авторизовываться по IMAP' у

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 14:09:02

для dovecot важен порт.. укажите 10.10.0.201:3268

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 14:27:16

порт то я указал просто здесь на форуме забыл его указать. авторизацию не проходит все равно.в логах довекота выдает:

Код: Выделить всё

imap-login: Info: Disconnected (auth failed, 2 attempts): user=<sevtest>, method=PLAIN, rip=10.10.0.125, lip=10.10.0.144

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 14:31:28

Код: Выделить всё

auth_debug=yes
auth_verbose = yes
auth_debug_passwords = yes
log_path = /var/log/dovecot/dovecot.log
debug_log_path = /var/log/dovecot/debug.log

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 15:23:00

борюсь с аутентификацией. в логах выдает:

Код: Выделить всё

 auth(default): Info: client in: AUTH    3       PLAIN   service=imap    lip=10.10.0.144 rip=10.10.0.125 lport=143       rport=4163      resp=AHNldnRlc3QAbE43QnZoM0c=
 auth(default): Info: ldap(sev,10.10.0.125): pass search: base=dc=kolsk,dc=em,dc=ru scope=subtree filter=(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=sev)(otherMailbox=sev))) fields=uid,userPassword
 auth(default): Info: ldap(sev,10.10.0.125): unknown user
 auth(default): Info: client out: FAIL   3       user=sev
 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<sev>, method=PLAIN, rip=10.10.0.125, lip=10.10.0.144
а не может быть эта проблема в том что домен KOLSK.EM.RU,а почта у пользователей настроена как user@em.ru?

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение blade_007 » 2011-02-25 15:25:04

ищется пользователь с ящиком USER@DOMAIN, затем dovecot жде т возврата OK/NOT OK от ldap-сервера, в данном случае AD. Вы пытаетесь авторизоваться от USER. Естественно, в AD в поле mail должно быть USER@DOMAIN и вам нужно авторизоваться от USER@DOMAIN

sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 15:54:45

при попытке авторизоваться от sev@em.ru выдает

Код: Выделить всё

 auth(default): Info: ldap(sevt@em.ru,10.10.0.125): pass search: base=dc=kolsk,dc=em,dc=ru scope=subtree filter=(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(mail=sev@em.ru)(otherMailbox=sev@em.ru))) fields=uid,userPassword
 auth(default): Info: ldap(sev@em.ru,10.10.0.125): no fields returned by the server
 auth(default): Info: ldap(sev@em.ru,10.10.0.125): No password returned (and no nopassword)
auth(default): Info: client out: FAIL   2       user=sev@em.ru


sev
рядовой
Сообщения: 20
Зарегистрирован: 2011-02-25 10:36:48

Re: exim + dovecot + авторизация win2003

Непрочитанное сообщение sev » 2011-02-25 16:28:52

спасибо большое