URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 79655
[ Назад ]

Исходное сообщение
"Exim, несуществующий локальный пользователь"

Отправлено melmaxnvk , 05-Апр-08 07:41 
Доброго времени суток.

Имеется FreeBSD 6.2
EXIM 4.67

Настраивал по статье http://www.lissyara.su/?id=1200
Несуществующие локальные пользователи, почему то не отрубаются ACL, а проходят до роутера и уже там отваливаются с ошибкой Unknown User.

Части из конфига:

acl_check_rcpt:
# Allow all LOCAL rcpt, using standart IO
accept  hosts = :

# Проверяем недопустимые символы для локальных получателей:
deny    local_parts     = ^[.] : ^.*[@%!/|]
        domains         = +local_domains
        message         = "Incorrect symbol in address"

# Проверяем недопустимые символы для нелокальных получателей:
deny    local_parts     = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
        domains         = !+local_domains
        message         = "Incorrect symbol in address"

accept  local_parts     = postmaster
        domains         = +local_domains

# Принимаем сообщения от тех, кто аутентифицировался:
accept  authenticated   = *

# Рубим тех, кто в блеклисте
deny    message       = "you in blacklist - $dnslist_domain \n $dnslist_text"
        dnslists      = opm.blitzed.org : \
                        cbl.abuseat.org : \
                        bl.csma.biz : \
                        dynablock.njabl.org

# Запрещаем тех, кто не обменивается приветственными сообщениями (HELO/EHLO)
deny    message       = "HELO/EHLO require by SMTP RFC"
        condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

# Рубаем нах, тех, кто подставляет свой IP в HELO
deny    message       = "Your IP in HELO - access denied!"
        hosts         =  * : !+relay_from_hosts
        condition     = ${if eq{$sender_helo_name}\
                        {$sender_host_address}{true}{false}}
# Рубаем тех, кто в HELO пихает мой IP
deny    message       = "main IP in your HELO! Access denied!"
        condition     = ${if eq{$sender_helo_name}\
                        {$interface_address}{yes}{no}}
        hosts         = !127.0.0.1 : !localhost : *

# Рубаем тех, кто в HELO пихает только цифры (не бывает хостов ТОЛЬКО из цифр)
deny    message       = "can not be only number in HELO!"
        condition     = ${if match{$sender_helo_name}\
                        {\N^\d+$\N}{yes}{no}}
        hosts         = !127.0.0.1 : !localhost : *

# Рубаем хосты типа *adsl*; *dialup*; *pool*;....
# Нормальные люди с таких не пишут. Если будут
# проблемы - уберёте проблемный пункт (у меня клиенты
# имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
        condition     = ${if match{$sender_host_name} \
                        {adsl|dialup|pool|peer|dhcp} \
                        {yes}{no}}

warn
    # ставим дефолтовую задержку в 30 секунд
    set acl_m0 = 30s

warn
    # ставим задержку в 0 секунд своим хостам
    hosts = +relay_from_hosts
    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

# Если отправитель сообщения может быть проверен, то Next, иначе - deny
require verify  = sender
        message = "Unknown Sender"

# Как я понял, письма, которые идут на несуществующих локальных пользователей
# должны рубиться здесь
accept
        domains = +local_domains
        endpass
        verify = recipient
        message = "This user is not exist on this MailServer"
# Final Rule
deny
        message = "This server is not open relay"


Содержание

Сообщения в этом обсуждении
"Exim, несуществующий локальный пользователь"
Отправлено melmaxnvk , 06-Апр-08 08:52 
up!

"Exim, несуществующий локальный пользователь"
Отправлено melmaxnvk , 07-Апр-08 08:44 
up!

"Exim, несуществующий локальный пользователь"
Отправлено Hetzer , 07-Апр-08 09:32 
>up!

проверка получателя осуществляется в роутерах. если вам необходимо своё сообщение, в роутере проверки используйте cannot_route_message


"Exim, несуществующий локальный пользователь"
Отправлено melmaxnvk , 07-Апр-08 10:07 
>>up!
>
>проверка получателя осуществляется в роутерах. если вам необходимо своё сообщение, в роутере
>проверки используйте cannot_route_message

Как мне тогда узнать сколька реального спама я отсеял?

PS Под реальным спамом я понимаю спамовые сообщения пришедшие на существующих пользователей. Ведь при нынешнем подходе у меня в лог в основном валятся сообщения, что пойман спам на пользователя xxxxx@xxxx.ru ( а его то и нет). Хотя по логике неплохо было бы вначале проверить существование пользователя, а потом уже всякие HELO/EHLO, header, и тем более уж тело письма


"Exim, несуществующий локальный пользователь"
Отправлено Hetzer , 07-Апр-08 10:19 
>>>up!
>>
>>проверка получателя осуществляется в роутерах. если вам необходимо своё сообщение, в роутере
>>проверки используйте cannot_route_message
>

Смотрите документацию как работает verify и в частности verify recipient.
Повторяю, <<проверка получателя осуществляется в роутерах.>>
Вам туда, куда вы давали ссылку.

Для того чтобы сделать проверку, этому acl нужен роутер (обычно accept и обычно тот роутер, который вызывает транспорт доставки) который и проверит существование пользователя.

>Как мне тогда узнать сколька реального спама я отсеял?
>

как хотите, exim безграничен

>PS Под реальным спамом я понимаю спамовые сообщения пришедшие на существующих пользователей.
>Ведь при нынешнем подходе у меня в лог в основном валятся
>сообщения, что пойман спам на пользователя xxxxx@xxxx.ru ( а его то
>и нет). Хотя по логике неплохо было бы вначале проверить существование
>пользователя, а потом уже всякие HELO/EHLO, header, и тем более уж
>тело письма

У каждого спамборца своя логика :)
Где проверять и когда, это ваше личное дело, поставьте проверку пользователя в самом начале acl_smtp_rcpt


"Exim, несуществующий локальный пользователь"
Отправлено melmaxnvk , 07-Апр-08 10:37 
>У каждого спамборца своя логика :)

Это точно.

>Где проверять и когда, это ваше личное дело, поставьте проверку пользователя в
>самом начале acl_smtp_rcpt

Я и хотел так сделать.
Получается что мне надо вначале acl передать письмо роутеру, а потом вернуться в acl(в случае если пользователь есть) и продолжить проверку?

т.е. acl как то привязывается к роутеру? Я просто не доконца понял схему acl-router-transport.


"Exim, несуществующий локальный пользователь"
Отправлено Hetzer , 07-Апр-08 10:47 
>[оверквотинг удален]
>
>>Где проверять и когда, это ваше личное дело, поставьте проверку пользователя в
>>самом начале acl_smtp_rcpt
>
>Я и хотел так сделать.
>Получается что мне надо вначале acl передать письмо роутеру, а потом вернуться
>в acl(в случае если пользователь есть) и продолжить проверку?
>
>т.е. acl как то привязывается к роутеру? Я просто не доконца понял
>схему acl-router-transport.

Почитайте наконец документацию, слишком много нюансов чтобы утверждать тут коротко и однозначно. И ещё смотрите в дебаге на процесс, это даст вам чёткую картинку когда, по какому поводу и зачем вызываются роутеры именно в вашей конфигурации


"Exim, несуществующий локальный пользователь"
Отправлено XSoft , 03-Апр-09 10:11 
>>т.е. acl как то привязывается к роутеру? Я просто не доконца понял
>>схему acl-router-transport.

У меня exim работает с мускулом.

Написал вот такое правило в "acl_check_rcpt":

  deny  
        message  = "Sorry, the user was not found. Try again."
        domains  = +local_domains
        condition = ${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
             WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{yes}{no}}
        condition = ${if eq{}{${lookup mysql{SELECT `address` FROM `alias` \
             WHERE `address`='${quote_mysql:$local_part@$domain}'}}}{yes}{no}}

Соответственно е-мейлы которые пришли на несуществующий ящик - рубятся