EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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
}
}
}
sev
-
Хостинг HostFood.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
-
Контактная информация:
Непрочитанное сообщение
blade_007 » 2011-02-25 11:22:32
Сделайте так, чтоб в этом запросе (SELECT `goto` FROM `alias` WHERE `address`='
sev@oem.ru' OR `address`='@oem.ru') возвращалось значение и будет вам счастье.
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
sev » 2011-02-25 11:29:27
Да не очень то хочется каждого пользователя в алиасах прописывать. Может все таки можно как нибудь по другому?
sev
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
blade_007 » 2011-02-25 11:32:58
Конечно можно. Только у вас 3 роутера, 2 из которых используют один и тот же запрос!!!
БД пользователей может храниться в mysql, либо можно вытягивать поле mail из AD, либо в файлах, либо ...
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
sev » 2011-02-25 11:43:14
Я понимаю что роутер dovecot_user использует неправильный запрос. Как сделать чтобы он проверял существование пользователя в AD? авторизация же проходит нормально. на основе этого нельзя никак сделать?
sev
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
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
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
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)))
только правильно распорядитесь.
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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
sev
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
blade_007 » 2011-02-25 12:04:17
список серверов GC - с глобальным каталогом, если несколько.
3 макроса, в которых определяется непривилегированный пользователь, способный соединяться с AD и искать есть пользователь по переданному e-mail адресу.
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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' у
sev
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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
sev
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
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
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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?
sev
-
blade_007
- ст. прапорщик
- Сообщения: 571
- Зарегистрирован: 2010-03-12 12:59:08
-
Контактная информация:
Непрочитанное сообщение
blade_007 » 2011-02-25 15:25:04
ищется пользователь с ящиком USER@DOMAIN, затем dovecot жде т возврата OK/NOT OK от ldap-сервера, в данном случае AD. Вы пытаетесь авторизоваться от USER. Естественно, в AD в поле mail должно быть USER@DOMAIN и вам нужно авторизоваться от USER@DOMAIN
blade_007
-
sev
- рядовой
- Сообщения: 20
- Зарегистрирован: 2011-02-25 10:36:48
Непрочитанное сообщение
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