Частенько на форумах по Exchange 2007 звучит вопрос о переполненности очередей сообщениями в домены со странными именами. Если очередь очистить, то эти сообщения появляются вновь. Релей вроде закрыт, но сообщений в очередях огромное количество. Откуда взялись эти сообщения? Пользователи их явно не отправляли. Что делать?
Давайте рассмотрим как происходит разбор адреса получателя принимающим сервером? Обычно система проверяет существование адреса получателя и если его нет, то в SMTP сессии генерируется отбой «5.1.1 User unknown». Exchange же долгое время не умел этого делать, но с версии 2003(? я могу ошибаться) он научился проверять получателей в Active Directory(Filter recipients who are not in the directory) и генерировать отбой в SMTP сессии. Если же проверку в AD не включать, то сообщение будет полностью принято и отправителю будет сгенерирован NDR. А если адреса отправителя не существует или это адрес не имеет никакого отношения к реальному отправителю? Тогда это сообщение повиснет в очереди, а smtp сервер будет его пытаться доставить несуществующему получателю на несуществующий сервер. Подобных ситуаций нужно избегать.
Как проверить, проверяет ли ваш сервер получателей в AD? Используем telnet.
>C:\telnet ваш_сервер.ru 25
<220 myserver.exchangerus.ru Microsoft ESMTP MAIL Service ready at Fri, 15 Aug 2008
>ehlo test.ru
<250-myserver.exchangerus.ru Hello [x.x.x.x]<250-SIZE
<250-PIPELINING
<250-DSN
<250-ENHANCEDSTATUSCODES
<250-STARTTLS
<250-AUTH NTLM
<250-8BITMIME
<250-BINARYMIME
<250 CHUNKING
>mail from:pavel.nagaev@test.com (адрес отправителя не важен)
<250 2.1.0 Sender OK
>rcpt to:nonexistentuser@exchangerus.ru
<250 2.1.5 Recipient OK
Вот тут внимание. Если ваш сервер выдает “250 2.1.5 Recipient OK”, но пользователя nonexistentuser@exchangerus.ru в вашем домене exchangerus.ru — нет, то это значит что никакой проверки в AD не выполняется и ваш сервер “всасывает” все сообщения для вашего домена, а потом будет пытаться отослать NDR.
После включения проверки в AD две последние строки будут выглядеть так:
>rcpt to:nonexistentuser@exchangerus.ru
<550 5.1.1 User unknown
В Exchange 2007 проверка получателей в AD включена на Edge сервере. А если у Вас нет EDGE сервера, а только HUB сервер, что тогда? Транспортные агенты можно установить и на HUB сервер и они будут работать, но с некоторыми ограничениями.
Проверка получателей в AD включается следующей командой:
Set-RecipientFilterConfig -RecipientValidationEnabled:$true
Заработало? Cкорее всего да. В моем случае не заработало, т.к. у меня AcceptedDomain создавался, как ExternalRelay, а для него значение AddressBookEnabled установлено в $false и при изменении на Authorative значение не изменилось. Поэтому пришлось включить AddressBookEnabled на обслуживаемых доменах вручную.
AddressBookEnabled — этот параметр используется для разрешения фильтрации получателей в роли пограничного транспортного сервера, принимающей почту для принятого домена.
Get-AcceptedDomain | select Name,DomainType,AddressBookEnabled
Если параметр AddressBookEnabled стоит в False, то нужно его установить в True, например так.
Get-AcceptedDomain | set-AcceptedDomain –AddressBookEnabled:$true
Потом проверяйте с помощью telnet, как я описал выше. Вы должны получить «550 5.1.1 User unknown» для не существующего адреса в вашем домене и количество писем в очередях значительно сократится. А то сейчас мода на отключение NDR на серверах 🙂 Жуть какая 🙂