Проблема с Exim + MS Exchange 2003.

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Pep
проходил мимо
Сообщения: 3
Зарегистрирован: 2007-02-07 13:05:43
Контактная информация:

Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Pep » 2007-02-07 13:49:12

Доброго времени суток!

Что есть. FreeBSD 6.1: Exim-4.66+openldap-client-2.3.33. Exim собран с поддержкой openldap. Exim принимает почту для группы доменов и роутит ее на MSE2003. Все замечательно, но много левых писем со спамом.
Хочу сделать проверку получателей в AD.

Воспользовался http://www.exim.org/eximwiki/MsExchange ... rification
(Оригинал: http://www.exim.org/mail-archives/exim- ... 00119.html )

Настройки сделал соответственно хауту на сайте exim'а.
Завел соответствующего пользователя в AD (ldap, пароль ldap123) с минимальными правами.

Результат: верификация пользователя не проходит.
В mainlog'е:

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

2007-02-06 23:14:01 1HEWhV-0002Qr-7c == cooluser@my.domen.ru R=adsi_check defer (-1): failed to expan
d "${lookup ldap {user="CN=ldap,OU=Users,DC=my,DC=domen,DC=ru" pass=xxxxxxxxx ldap:///"DC=my,DC=domen,DC=ru"?mail?sub?(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=grou
p))(proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}}))}{${local_part}@${domain}}{:fail: Use
r unknown}}": lookup of "user="CN=ldap,OU=Users,DC=my,DC=domen,DC=ru" pass="ldap123" ldap:///"DC=my,DC=domen,DC=ru"?mail?sub?(&(|(objectClass=user)(objectClass=publicFolder)(objectCla
ss=group))(proxyAddresses=SMTP:cooluser%40my.domen.ru))" gave DEFER: failed to bind the LDAP connection to server 192.168.0.1 - LDAP error 49: Invalid credentials
Т.е., как я понял, запросы к серверу не проходят.
Тем не менее, с консоли FreeBSD-сервера, сервер с AD виден и отвечает на вопросы:

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

ldapsearch -D ldap -w ldap123 -LLL "(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))(proxyAddresses=SMTP:cooluser@my.domen.ru))"
Вся инфа прекрасно видна.
Ошибка, возможно, синтаксическая в запросе или не совпадение версии протоколов openldap.

Прошу дельного совета и помощи 8)
Я прекрасно понимаю, что, да, можно вести базу получателей в постгрессе или мускуле, но у меня есть, то что есть и хочется заставить это работать :)

WBR, Pep.

Хостинговая компания 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/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-07 14:22:21

дебаг включи - может запросы покажет...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-07 14:56:05

написал знакомый по моей просьбе - тока ему запостить недоало и-за мыла в листинге :)))
=======================================
У меня нет прямых запросов к ЛДАП - побоялся что и так перегруженный контроллер домена вообще загнется.

В кроне 2 раза в сутки выполняется задание (скрипт не является надежным, т.к. при неудачном поиске в ЛДАП у меня встанет входящая почта - надо дописывать)
Поэтому скрипт сообщает кол-во строк и дифф между предыдущей версией файла - типа успею среагировать, когда мне придет письмо с нулем :)

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

#!/bin/sh 
 
CNAME='ldap сабака nb.local' 
FNAME='/usr/local/etc/exim/allusers.txt' 
 
cp ${FNAME} ${FNAME}.bak 
 
/usr/local/bin/ldapsearch -D ${CNAME} -w пароль -u "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" proxyAddresses | grep '[sS][mM][tT][pP]:' | cut -d: -f3 > ${FNAME} 
/usr/local/bin/ldapsearch -D ${CNAME} -w пароль -u "(objectclass=group)" proxyAddresses | grep '[sS][mM][tT][pP]:' | cut -d: -f3 >> ${FNAME} 
 
wc -l ${FNAME} 
 
diff ${FNAME}.bak ${FNAME} 


Кусок конфига Экзим

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

acl_check_rcpt: 
... 
  deny    message       = "In my mailserver not stored this user" 
          condition     = ${lookup{$local_part@$domain} \ 
                          lsearch{/usr/local/etc/exim/allusers.txt} \ 
                          {no}{yes}} 
          verify        = recipient 
          domains       = +local_domains 
Убей их всех! Бог потом рассортирует...

Pep
проходил мимо
Сообщения: 3
Зарегистрирован: 2007-02-07 13:05:43
Контактная информация:

Непрочитанное сообщение Pep » 2007-02-07 18:20:29

lissyara писал(а):написал знакомый по моей просьбе - тока ему запостить недоало и-за мыла в листинге :)))
=======================================
У меня нет прямых запросов к ЛДАП - побоялся что и так перегруженный контроллер домена вообще загнется.

В кроне 2 раза в сутки выполняется задание (скрипт не является надежным, т.к. при неудачном поиске в ЛДАП у меня встанет входящая почта - надо дописывать)
Поэтому скрипт сообщает кол-во строк и дифф между предыдущей версией файла - типа успею среагировать, когда мне придет письмо с нулем :)

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

#!/bin/sh 
 
CNAME='ldap сабака nb.local' 
FNAME='/usr/local/etc/exim/allusers.txt' 
 
cp ${FNAME} ${FNAME}.bak 
 
/usr/local/bin/ldapsearch -D ${CNAME} -w пароль -u "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" proxyAddresses | grep '[sS][mM][tT][pP]:' | cut -d: -f3 > ${FNAME} 
/usr/local/bin/ldapsearch -D ${CNAME} -w пароль -u "(objectclass=group)" proxyAddresses | grep '[sS][mM][tT][pP]:' | cut -d: -f3 >> ${FNAME} 
 
wc -l ${FNAME} 
 
diff ${FNAME}.bak ${FNAME} 


Кусок конфига Экзим

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

acl_check_rcpt: 
... 
  deny    message       = "In my mailserver not stored this user" 
          condition     = ${lookup{$local_part@$domain} \ 
                          lsearch{/usr/local/etc/exim/allusers.txt} \ 
                          {no}{yes}} 
          verify        = recipient 
          domains       = +local_domains 
Большое спасибо за помощь!
Чуть позже попробую :)
Пока в дебагмоде скрины парсю 8)

WBR, Pep.

yanis
проходил мимо

Непрочитанное сообщение yanis » 2007-02-07 20:22:05

Pep писал(а):Большое спасибо за помощь!
Чуть позже попробую :)
Пока в дебагмоде скрины парсю 8)

WBR, Pep.
Ну как прямые обращения к ЛДАП распробуешь - тоже напиши, всем пригодится!

Аватара пользователя
bakake
сержант
Сообщения: 265
Зарегистрирован: 2006-11-21 14:04:58

Непрочитанное сообщение bakake » 2007-02-08 10:52:21

А у меня такие же грабли были. Дошел до просмотра ldap запросов tcpdump'ом, выяснилась какая то непонятная дребедень. Вкраце глюк такой -- ексим биндится к ldap микрософта, посылает запрос, получает (на мой взгляд) правильный ответ, сразу после этого почему то шлет запрос повторно, причем не прибиндившись. Получает ошибку про неправильную аутентикацию и тихо отбрыкиывается с сообщением ldap lookup failed (или что то в этом роде). Что за хрень, понять не могу по сей день. Может ldap клиент нужен не 2.3 а какой то другой, х его з. Если вдруг Вам повезет больше, и вы поделитесь своим решением с миром (тут например) то я буду очень Вам признателен.
Теперь значит, мой солюшн.
в /usr/local/etc/exim/exim.pl написано следующее

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

#!/usr/bin/perl -w

use strict;
use Net::LDAP;
use Net::LDAP::Message;

my $ldap_server = 'dc.mydomain.local';
my $bind_dn = 'cn=mailauth,cn=Users,dc=mydomain,dc=local';
my $bind_passwd = 'mypasswd';

my $DEBUG = 1;

sub print_error
{
  my ($message) = @_;
  Exim::log_write('ERROR: ' . $message);
}

sub ldap_lookup
{
  my ($local_part, $domain) = @_;
  my $email = $local_part . '@' . $domain;
  my $ldap;
  my $mesg;
  my @entries;
  my @mail;

  $ldap = Net::LDAP->new($ldap_server);
  unless ($ldap)
  {
    print_error("Unable connect to ldap server $ldap_server");
    return ":defer:";
  }

  $mesg = $ldap->bind($bind_dn, password => $bind_passwd);
  unless ($mesg && $mesg->code == 0)
  {
    print_error("Unable bind \"$bind_dn\" to $ldap_server");
    return ":defer:";
  }

  $mesg = $ldap->search(scope => 'sub',
                      filter => '(&(objectClass=user)(proxyAddresses=smtp:' . $email . '))',
                      base => 'ou=regular_users,dc=mydomain,dc=local', 
                      attrs => ['cn','proxyAddresses'],
  );
  unless ($mesg && $mesg->code == 0)
  {
    print_error("Unable to search ldap");
    return ":defer:";
  }

  @entries = $mesg->entries;

  foreach my $entry (@entries)
  {
    @mail = $entry->get_value("proxyAddresses");
    if (@mail)
    {
      undef(@mail);
      return "1";
    }
  }
  return "";
}
Тут стоит обратить внимание на корень поиска (base => 'ou=regular_users,dc=mydomain,dc=local'), прописать есессно надо будет свой. Ну и надо будет создать пользователя которым подключаться к ldap. Тут он обозван как mailauth и лежит в другом OU нежели получатели почты (ему не надо прав администратора, просто чтоб коннектился). Ну соответсвенно ldap_server bind_dn и пароль свои подставить. Права на скрипт у меня 600.


соответсвенно в конфиге ексима (/usr/local/etc/exim/configure) в разделе глобальной конфигурации прописываем

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

perl_startup = do '/usr/local/etc/exim/exim.pl'
Далее вызываем процедуру где нам надо. У меня она в роутере стоит (не совсем так как я ниже написал, у меня не только эксчендж, а еще и несколько других почтовиков), но если используется только как релей на экчендж (не используются алиасы, итп) то наверно можно и в acl прикрутить.
В роутере можно так вызвать

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

exchange:
  driver = manualroute
  domains = +local_domains
  condition = ${perl{ldap_lookup}{$local_part}{mydomain.ru}}
  route_list = * dc.mydomain.local byname
  transport = remote_smtp

Pep
проходил мимо
Сообщения: 3
Зарегистрирован: 2007-02-07 13:05:43
Контактная информация:

Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Pep » 2007-02-08 18:42:14

Доброго времени суток!

Привожу кусок конфига, который копипаст с сайта exim'a.

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

ldap_default_servers = 192.168.1.1::3268
LDAP_AD_BINDDN = "cn=ldap,ou=Users,dc=my,dc=domen,dc=ru"
LDAP_AD_PASS = "ldap123"
LDAP_AD_BASE_DN = dc=my,dc=domen,dc=ru
LDAP_AD_MAIL_RCPT = \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE_DN?mail?sub?\
(&(|(objectClass=user)(objectClass=group))\
(proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}}))
Роутер:

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

tut_check:
driver = redirect
data = ${lookup ldap {LDAP_AD_MAIL_RCPT}\
  {${local_part}@${domain}}{:fail: User unknown}}
domains = +relay_to_domains
allow_fail
allow_defer
forbid_file
forbid_pipe
verify_recipient
redirect_router = tut_router

tut_router:
driver = manualroute
domains = +relay_to_domains
route_list = !+local_domains 192.168.1.1
transport = remote_smtp
Вся схема заработала только после того как заменил

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

LDAP_AD_BINDDN = "cn=ldap,ou=Users,dc=my,dc=domen,dc=ru"
на

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

LDAP_AD_BINDDN = ldap
(Хотя мне это не кажется правильным 8) )

После чего AD c MS Exchange стал отвечать на запросы, а Exim проверять адреса на валидность.

Большое спасибо вам коллеги за помощь и добрый совет 8)

WBR, Pep.

klin2
рядовой
Сообщения: 12
Зарегистрирован: 2007-02-09 20:12:25
Откуда: Germany

Непрочитанное сообщение klin2 » 2007-02-09 20:18:45

Ispolsuju drugoe reshenie:
po cron (1 ras v den, 4as?)sapuskaju script kotoryi brosaet users & group in virtual.txt

exim.conf:

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

# route to exchange server
exchange:
    driver = manualroute
    transport = remote_smtp
    domains = yourdomain.org
    condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/virtual.txt}{yes}{no}}
 
getadsmtp.pl:

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

#!/usr/bin/perl -w

# This script will pull all users' SMTP addresses from your Active Directory
# (including primary and secondary email addresses) and list them in the
# format "user@example.com".
# Be sure to double-check the path to perl above.

# This requires Net::LDAP to be installed.  To install Net::LDAP, at a shell
# type "perl -MCPAN -e shell" and then "install Net::LDAP"

use Net::LDAP;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );

# Enter the path/file for the output
$VALID = "/etc/exim/virtual.txt";
open VALID, ">$VALID" or die "CANNOT OPEN $VALID $!";

# Enter the FQDN of your Active Directory domain controllers below
$dc1="server1.w2k3-dom.local";
$dc2="server2.w2k3-dom.local";
$domain="yourdomain.org";

# Enter the LDAP container for your userbase.
# The syntax is CN=Users,dc=example,dc=com
# This can be found by installing the Windows 2000 Support Tools
# then running ADSI Edit.
# In ADSI Edit, expand the "Domain NC [domaincontroller1.example.com]" &
# you will see, for example, DC=example,DC=com (this is your base).
# The Users Container will be specified in the right pane as
# CN=Users depending on your schema (this is your container).
# You can double-check this by clicking "Properties" of your user
# folder in ADSI Edit and examining the "Path" value, such as:
# LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
# which would be $hqbase="cn=Users,dc=example,dc=com"
# Note:  You can also use just $hqbase="dc=example,dc=com"
$hqbase="dc=w2k3-dom,dc=local";

# Enter the username & password for a valid user in your Active Directory
# with username in the form cn=username,cn=Users,dc=example,dc=com
# Make sure the user's password does not expire.  Note that this user
# does not require any special privileges.
# You can double-check this by clicking "Properties" of your user in
# ADSI Edit and examining the "Path" value, such as:
# LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
# which would be $user="cn=user,cn=Users,dc=example,dc=com"
# Note: You can also use the UPN login: "user\@example.com"
$user="cn=user,cn=Users,dc=w2k3-dom,dc=local";
$passwd="secret";

# Connecting to Active Directory domain controllers
$noldapserver=0;
$ldap = Net::LDAP->new($dc1) or
   $noldapserver=1;
if ($noldapserver == 1)  {
   $ldap = Net::LDAP->new($dc2) or
      die "Error connecting to specified domain controllers $@ \n";
}

$mesg = $ldap->bind ( dn => $user, password =>$passwd);
#$mesg = $ldap->bind ;


if ( $mesg->code()) {
    die ("error:", $mesg->error_text((),"\n"));
}

# How many LDAP query results to grab for each paged round
# Set to under 1000 for Active Directory
$page = Net::LDAP::Control::Paged->new( size => 100 );

@args = ( base     => $hqbase,
# Play around with this to grab objects such as Contacts, Public Folders, etc.
# A minimal filter for just users with email would be:
# filter => "(&(sAMAccountName=*)(mail=*))"
         filter => " (| (&(objectClass=user) (proxyAddresses=smtp*)(!(name=SystemMailbox*)))
                        (&(objectClass=group)(proxyAddresses=smtp*)(!(name=SystemMailbox*)))
                        ) ",
          control  => [ $page ],
          attrs  => "proxyAddresses",
);

my $cookie;
while(1) {
  # Perform search
  my $mesg = $ldap->search( @args );

# Filtering results for proxyAddresses attributes
  foreach my $entry ( $mesg->entries ) {
    my $name = $entry->get_value( "cn" );
    # LDAP Attributes are multi-valued, so we have to print each one.
    foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
     if ( $mail =~ s/^(smtp|SMTP)://gs && $mail =~ /$domain/ ) {
       print VALID $mail."\n";
     }
    }
  }

  # Only continue on LDAP_SUCCESS
$mesg->code and last;
 # Get cookie from paged control
my($resp)  = $mesg->control( LDAP_CONTROL_PAGED ) or last;
  $cookie    = $resp->cookie or last;
# Set cookie in paged control
  $page->cookie($cookie);
 }

if ($cookie) {
# We had an abnormal exit, so let the server know we do not want any more
 $page->cookie($cookie);
 $page->size(0);
 $ldap->search( @args );
# Also would be a good idea to die unhappily and inform OP at this point
 die("LDAP query unsuccessful");
}


close VALID;

yanis - guest
проходил мимо

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение yanis - guest » 2007-02-09 21:17:35

Pep писал(а): ldap:///LDAP_AD_BASE_DN?mail?sub?\
(&(|(objectClass=user)(objectClass=group))\
(proxyAddresses=SMTP:${quote_ldap:${local_part}сабака${domain}}))

... а Exim проверять адреса на валидность.
Это не совсем корректный запрос (точнее, их нужно все-таки два!)

1. (&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Выбирает всех юзеров и кажется контакты (не помню уже), исключая задизабленных юзеров. То есть у тебя экзим будет принимать почту для задизабленного юзера, а футболить почту - уже эксчейндж.
И еще. В класс в твоем примере (objectClass=user) контакты кажись не входят.

2. (objectclass=group)
Выбирает группы рассылки - отдельно, потому что кажется (ой, креститься надо) у них нет атрибута userAccountControl

Фильтрация, разумеется, по proxyAddresses и там и там...

link
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-03-24 16:21:30

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение link » 2009-03-24 16:25:34

Здравствуйте дорогая редакция.
Все бы ничего, с лдапом exim я склеил, только вот задача пошла дальше.
Необходимо проверять есть пользователь последовательно в нескольких ldap серверах.
Если нету в первом, проверяем во втором и т.д.
Есть ли возможность указать в строке data = ${lookup ldap ...... ip и порт сервера ?

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение buryanov » 2009-03-24 20:56:01

Hi All
у меня была такая задача и она решина следующим образом:
1. ldapsearch вытягивает пользователей из AD и помещает их в MySQL с флагом exchange
2. локальные пользователи(скорее это почтовые ящики или алиасы), их гдето десяток или полтора, помещаются в MySQL с соответствующим флагом
3. exim получает запрос на приём сообщения и сразу проверяет получателя в MySQL, если нет - в лог и в топку, если есть - принять и переслать на exchange или положить локально, в зависимости от типа.
В данной связке получается 2 сервера, и вы спакойно можете перегрузить exchаnge, сделать ему профилактику и не боятся, чт какаято почта к вам недойдёт. В случае с прямой проверкой ldap'ом получается, что если exchange неответил - то письму даётся пользователь ненайден
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

link
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-03-24 16:21:30

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение link » 2009-03-24 23:58:04

у меня сложнее. у меня 3 ексченджа и 3 AD
и в зависимости от того какой ldap вернет положительный результат надо редироектнуть письмо на соотвествующий ексчендж.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Alex Keda » 2009-03-25 1:16:54

buryanov писал(а):В случае с прямой проверкой ldap'ом получается, что если exchange неответил - то письму даётся пользователь ненайден
у меня везде defer стоит а не deny
поэтому письмо всегда дойдёт без всяких сложных схем.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение buryanov » 2009-03-25 12:52:28

link писал(а):у меня сложнее. у меня 3 ексченджа и 3 AD
и в зависимости от того какой ldap вернет положительный результат надо редироектнуть письмо на соотвествующий ексчендж.
это тоже решаемо,нужно делать 3 проверки на существование пользователей в каждом из AD и писать 3 роутера, для каждого из exchange
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

link
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-03-24 16:21:30

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение link » 2009-03-25 13:22:21

Это понятно. Вопрос был в том можно ли указать ip ldap сервера прямо в лукапе.
Ответ я уже получил из exim-users
Теперь возник вопрос как надо исправить роутер, что-бы он при пустом лукапе отправлял сообщение на следующий роутер.

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение buryanov » 2009-03-25 13:39:03

у меня exim, ldap,AD недружат, поэтому у меня раз в сутки пользователи тянутся в мускул(ldapsearch), а там уже по флагу (полю типа пользователя) в роутерах можно всё разруливать
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
Aust
мл. сержант
Сообщения: 135
Зарегистрирован: 2007-11-28 12:27:22
Откуда: Україна, Київ

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Aust » 2009-03-30 15:46:26

У меня, наконец, получилось организовать проверку юзеров в AD, только вот проблема, у каждого пользователя - несколько ящиков на разных доменах, а запрос возвращает один, дефолтовый адрес пользователя, так что если проверять так:

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

condition       = ${if !eq{${lookup ldap {LDAP_AD_MAIL_RCPT}}}{${local_part}@${domain}}{yes}{no}}
то будут рубатся все письма которые приходят не на дефолтовое мымо...

Сделал проще, если возвращает хоть что-то, значит пользователь есть и можно доставлять, написал так:

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

condition             = ${if eq{${lookup ldap {LDAP_AD_MAIL_RCPT}}}{}{yes}{no}}
Но уж очень как-то странно оно в таком варианте работает, в дебаге Экзим пишет что

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

14:41:49  1072 after ldap_url_parse: host=192.168.1.1 port=0
14:41:49  1072 ldap_initialize with URL ldap://192.168.1.1:389/
14:41:49  1072 initialized for LDAP (v3) server 192.168.1.1:389
14:41:49  1072 LDAP_OPT_X_TLS_TRY set
14:41:49  1072 binding with user=exim password=******
14:41:49  1072 Start search
14:41:49  1072 ldap_result loop
14:41:49  1072 LDAP entry loop
14:41:49  1072 LDAP attr loop mail:user@domain.com
и в таком положении повисает пока у клиента не отваливается по таймауту соединение.... При этом если вернуть первый вариант проверки, то лукап проходит мгновенно....
Может кто подскажет в чем тут косяки?

ЗЫ: Тестирую уже не первый час, теперь и с первым вариантом лукапа тоже виснет...... :st:
Компьютер должен работать, человек - думать.

Аватара пользователя
Aust
мл. сержант
Сообщения: 135
Зарегистрирован: 2007-11-28 12:27:22
Откуда: Україна, Київ

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Aust » 2009-03-31 12:00:47

Результаты тестирования продолжают удивлять, кондишены работают правильно, письма уходят, только вот некоторые уходят сходу, а некоторые после 2-х таймаутов.....
Причем на какой адрес шлю - без разницы....
Может кто знаком с особеностями запросов к AD? В чем косяк может быть?
Компьютер должен работать, человек - думать.

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение princeps » 2009-03-31 12:08:39

На контроллерах домена AD ошибок типа 1030 и 1058 не наблюдается, случаем?
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru

Аватара пользователя
Aust
мл. сержант
Сообщения: 135
Зарегистрирован: 2007-11-28 12:27:22
Откуда: Україна, Київ

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Aust » 2009-03-31 12:34:59

princeps писал(а):На контроллерах домена AD ошибок типа 1030 и 1058 не наблюдается, случаем?
А Вы случайно не телепат, батенька? :smile: Были такие ошибки, правда 3 дня назад и больше не повторялись..... У Вас есть какие-то предположения?
Компьютер должен работать, человек - думать.

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение princeps » 2009-03-31 13:48:54

Просто я несколько раз с такими ошибками имел дело :) Не помню точно что они означают, но что-то очень плохое - у меня один раз из-за них вся AD раком встала. И поиск по каталогу происходит в точности как у тебя - то нормально, то криво. Но если больше не повторялись, то дело не в них, наверное. Должны сыпаться вместе с интервалом в пять минут.
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru

Аватара пользователя
Aust
мл. сержант
Сообщения: 135
Зарегистрирован: 2007-11-28 12:27:22
Откуда: Україна, Київ

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Aust » 2009-03-31 14:13:20

Хм..... В чем же ж тогда может быть проблема? Я не очень разбираюсь в AD, так что даже не знаю в каком направлении рыть... Может есть возможность посмотреть дебаг запросов к АД?
Компьютер должен работать, человек - думать.

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение princeps » 2009-03-31 14:41:15

У тебя других аномалий не наблюдается? Юзеры нормально логинятся, по полчаса не ждут?
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru

Аватара пользователя
Aust
мл. сержант
Сообщения: 135
Зарегистрирован: 2007-11-28 12:27:22
Откуда: Україна, Київ

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение Aust » 2009-03-31 15:05:09

Вроде нет... Никто не жаловался, в логах за последние 2 дня ничего необычного не наблюдал.... Хотя может я не понял что тут необычно.... :oops:
Компьютер должен работать, человек - думать.

princeps
майор
Сообщения: 2684
Зарегистрирован: 2007-09-25 10:20:59
Откуда: Сочи, Москва
Контактная информация:

Re: Проблема с Exim + MS Exchange 2003.

Непрочитанное сообщение princeps » 2009-03-31 15:12:08

Необычное обычно помечается красными и желтыми значками :) Теоретически запросы твоего экзима к АД можно отследить по журналам security на контроллерах, кто там когда аутентифицировался. Но их, наверное, надо через политику безопасности сначала настроить - чтоб писал то, что нужно в лог, а то он по умолчанию не все пишет. Кроме того, могу посоветовать скачать какой-нибудь ldapadmin и посмотреть, как он себя будет вести, поставить на сервер с фрей лдап-клиент и с его помощью поискать что-нибудь в каталоге
Deus quos vult perdere dementat prius
http://www.itforum-sochi.ru