Страница 1 из 1

Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 4:49:08
Laa
Здравствуйте.

Значительно переделал конфиг exim-а. Сделал баллы для входящих сообщений. Сделал целую кучу изменений. Вижу -- все работает как надо. Но не совсем. Стал замечать в очереди mailq странные письма:

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

64h  2.1K 1LB4BZ-000FSY-MJ <nuy@bramblesartretreat.com>
        D greek@domain.ru
          tnwuffvjwchwgtbfnup@domain.ru
          wnrxklugtkuwycumlxt@domain.ru
          sqbkqodxvirhgpdikgc@domain.ru
        D inv@domain.ru
Их достаточно много...

При этом:

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

04:26:55 root@relay $ exim -bt tnwuffvjwchwgtbfnup@domain.ru
tnwuffvjwchwgtbfnup@domain.ru is undeliverable: Unknown account tnwuffvjwchwgtbfnup@domain.ru
    <-- tnwuffvjwchwgtbfnup@domain.ru
04:27:01 root@relay $
Попробовал сам отправить:

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

220 smtp.domain.ru esmtp ready Mon, 15 Dec 2008 04:39:45 +0300
helo net186-46.nn.ertelecom.ru
250 smtp.domain.ru Hello domain.ru [x.x.x.x]
mail from: <kwb@bom.tv18online.com>
250 OK
rcpt to: <validuser@domain.ru>
250 Accepted
rcpt to: <invalid@domain.ru>
550 Unknown account <invalid@domain.ru>
rcpt to: <invalid2@domain.ru>
550 Unknown account <invalid2@domain.ru>
data
...
Письмо тестовое пришло только пользователю <validuser@domain.ru>, в очередь с инвалидюзерами не стало, как выше.

Ладно, думаю, разберусь. Делаю exim -bh со всеми параметрами из сообщения helo, mail from... отлуп. Т.е. все работает как надо.

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

Внимание, вопрос -- КАК это письмо прошло? :st:

Еще, покажите, пожалуйста, у кого как реализована проверка локального получателя. Я пока решил поставить drop там где !verify=recipient и понаблюдать.

Заранее спасибо.

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 9:15:13
Alex Keda
логи смотри

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 10:29:12
Laa
Спасибо, но в логах все нормально. Пришло соединение и в нем получатели. Когда один, когда несколько не существующих.

Заметил, что такое возникает уже несколько раз у отправителей, которые в одной отправке пытаются доставить почту нескольким получателям. Вот в последнем случае видел что отправитель передал почту для существующих получателей, потом, без QUIT доставил и существующим и несуществующим, а потом вообще тройке несуществующих. И оно стоит в очереди не зная куда доставиться. :(

Вот как сейчас:

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

...
        drop    !verify         = recipient
                set acl_c_dictinsert= ${lookup mysql{MYSQL_Q_DICTONARY_ATTACK_INSERT}}
                domains         = +local_domains : +relay_to_domains
                message         = Unknown account <$local_part@$domain>
                log_message     = Unknown account <$local_part@$domain>
...
Складывается впечатление, что проверка получателя не всегда отрабатывается. Ну то есть когда сам тестирую -- то все нормально, отбивается, но иногда проходит.

Вот роутеры:

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

...
spamd_router:
  driver                = accept
  transport             = spamd_delivery
  cannot_route_message  = Unknown account $local_part@$domain
  condition             = ${if >={$spam_score_int}{SPAM_SCORE_MAX}}
...
mysql_account:
  driver = accept
  condition = ${lookup mysql{MYSQL_Q_MYSQLUSER}{$value}fail}
  transport = Mysql_delivery
  cannot_route_message  = Unknown account $local_part@$domain
...

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 12:57:16
dikens3
Помогите, помогите.. А сам свои мысли высказывает?

Если у тебя мысли верные(что в логах всё ок), тогда и проблемы быть не должно, не так ли?
lissyara писал(а):логи смотри

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 13:06:27
Laa
Ладно-ладно... замолкаю.

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 13:40:11
dikens3
Laa писал(а):Ладно-ладно... замолкаю.
Складывается впечатление, что проверка получателя не всегда отрабатывается. Ну то есть когда сам тестирую -- то все нормально, отбивается, но иногда проходит.
В фильтрах приёма(accept) должна быть проверка получателя.
# Принимаем, если IP-Адрес в белом списке
accept domains = +local_domains
hosts = mysql; MYSQL_WHITELISTIP
endpass
message = "Unknown user"
verify = recipient

# Принимаем, если E-Mail в белом списке
accept domains = +local_domains
senders = mysql; MYSQL_WHITELISTEMAILS
endpass
message = "Unknown user"
verify = recipient
...
...

accept domains = +local_domains
endpass
message = "Unknown user"
verify = recipient

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

# Проверка существования E-Mail'a отправителя для внешних клиентов (Мои авторизованы)
deny      log_message   = Сообщение
          !senders       = :
          !authenticated = *
          !verify       = sender/callout=120s,defer_ok,maxwait=180s,random

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 14:33:39
Laa
А разжуйте мне почему стоит accept и message = "Unknown user" ?
В фильтрах приёма(accept) должна быть проверка получателя.
# Принимаем, если IP-Адрес в белом списке
accept domains = +local_domains
hosts = mysql; MYSQL_WHITELISTIP
endpass
message = "Unknown user"
verify = recipient
Тут у меня практически также. Только не deny, а warn с начислением баллов.

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

# Проверка существования E-Mail'a отправителя для внешних клиентов (Мои авторизованы)
deny      log_message   = Сообщение
          !senders       = :
          !authenticated = *
          !verify       = sender/callout=120s,defer_ok,maxwait=180s,random
Спасибо, буду пробовать.

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 15:36:06
dikens3
Laa писал(а):А разжуйте мне почему стоит accept и message = "Unknown user" ?
http://www.lissyara.su/?id=1207

accept domains = +local_domains
endpass
verify = recipient

Это утверждение принимает входящий адрес, если домен - один из локальных доменов, но тока если подтверждён адрес. Проверка локальных адресов, обычно, заключается в проверке локальной и доменной частей. Строка “endpass” нуждается в некотором пояснении: если условие выше “endpass” неудачно, т.е. в данном случае, получатель не в локальном домене, управление передаётся следующей ACL. Однако, если условие ниже “endpass” неудачно, т.е. если получатель в локальном домене не может быть подтверждён, то доступ запрещается и получатель отклоняется.
Короче, если пользователь в твоём домене письмо будет принято на этом этапе при существовании пользователя, если пользователя нет - клиента в лес в соответственным сообщением. Тем самым это предпоследний фильтр. Последний сам знаешь какой.

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 23:13:41
Laa
dikens3, спасибо за то, что разжевали! :drinks:

Тем не менее валят и дальше, а воспроизвести не получается.
Уже начинаю грешить и на mysql... :sorry: Хотя поток не такой и больше, до 250 коннектов к exim в часы пик, всреднем 20-50 одновременных. Сервер достаточно мощный. Все крутится на freebsd 6.4, все (exim, mysql) последнее из последних портов.

Вот выкладываю несколько покусанный конфиг acl_check_rcpt:

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

acl_check_rcpt:

        accept  hosts           = :

        warn    ratelimit       = 0 / 1h / strict
                log_message     = Sender rate $sender_rate / $sender_rate_period

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

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

        require verify          = recipient

        drop    !verify         = recipient
                set acl_c_dictinsert= ${lookup mysql{MYSQL_Q_DICTONARY_ATTACK_INSERT}}
                domains         = +local_domains : +relay_to_domains
                message         = Unknown account <$local_part@$domain>
                log_message     = Unknown account <$local_part@$domain>

        warn    hosts           = +relay_from_hosts : +white_hosts
                verify          = recipient
                log_message     = WARN:: OK white host and verified rcpt

        accept  hosts           = +relay_from_hosts : +white_hosts
                endpass
                verify          = recipient
                message         = Unknown account <$local_part@$domain>

        accept  hosts           = +relay_from_hosts : +white_hosts
                control         = submission
                verify          = recipient
                message         = Unknown account <$local_part@$domain>

        warn    authenticated   = *
                log_message     = OK:: authenticated sender

        accept  sender_domains  = +local_domains
                authenticated   = *
                set acl_c_sndrrcptins   = ${lookup mysql{MYSQL_Q_SNDRRCPT_INS}}
                endpass

        accept  authenticated   = *
                endpass

        deny    local_parts     = postmaster
                condition       = ${if>{$recipients_count}{1}{yes}}
                log_message     = Message to postmaster and others.
                message         = Please, send messages to postmaster without other recipients.

        warn    sender_domains  = +local_domains
                local_parts     = postmaster
                log_message     = WARN:: +20 -- bad sender AND postmaster
                set     acl_c_rejpoints  = ${eval:$acl_c_rejpoints+20}

...
тут куча warn которые добавляют баллы, если нужно, и тут нет accept/deny/defer/require
...

        deny    condition       = ${if >={$acl_c_rejpoints}{47}{yes}{no}}
                set acl_c_iprejinsert= ${lookup mysql{MYSQL_Q_ADD_IP_REJECTED}}
                log_message     = WARN:: Reject and add sender -- acl_c_rejpoints too big ($acl_c_rejpoints)
                message         = Too much mistakes/spam probes from this host. Looks like your are spammer. ASK_POSTMASTER

        accept  recipients      = +white_rcpts
                endpass
                verify          = recipient
                log_message     = 2-WARN:: white rcpt and NOT verified rcpt

        accept  domains         = +local_domains : +relay_to_domains
                endpass
                verify          = recipient
                log_message     = 2-WARN:: NOT verified rcpt from within local domains

        accept  senders         = +white_sndrs
                endpass
                verify          = recipient
                log_message     = 2-WARN:: white sndr and NOT verified rcpt

        deny    message         = Relay not permitted. ASK_POSTMASTER

acl_check_predata:


Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-15 23:39:03
dikens3
В логах что?
Отладка (в полезных скриптах) что говорит? Какой кондишен пропускает?

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-16 8:08:19
Laa
Да говорю ж что не пропускает в отладке.
Не могу воспроизвести.
Все работает четко. Но гады пролазят.

вот что в логах:

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

2008-12-16 06:24:04 1LCQXQ-00098X-SK H=(WWW-F7B9F097B55) [121.28.126.38]:1425 Warning: spamassasin: X-Spam-Score: 7.1 (+++++++)
2008-12-16 06:24:04 1LCQXQ-00098X-SK <= bullfrogsbrrn5@gmail.com H=(WWW-F7B9F097B55) [121.28.126.38]:1425 P=esmtp S=2006 id=01c95f70$caca4800$267e1c79@bullfrogsbrrn5 from <bullfrogsbrrn5@gmail.com> for nika8@domain.ru nickvel@domain.ru nika@domain.ru ahxqbbidiibkmnfdhfu@domain.ru prezident@domain.ru olegoleg@domain.ru irina@domain.ru pop.mail.rufordmfordm@domain.ru master@domain.ru
2008-12-16 06:24:04 1LCQXQ-00098X-SK => gk <master@domain.ru> F=<bullfrogsbrrn5@gmail.com> P=<bullfrogsbrrn5@gmail.com> R=spamd_router T=spamd_delivery QT=4s DT=0s
2008-12-16 06:24:04 1LCQXQ-00098X-SK => nika8 <nika8@domain.ru> F=<bullfrogsbrrn5@gmail.com> P=<bullfrogsbrrn5@gmail.com> R=spamd_router T=spamd_delivery QT=4s DT=0s
2008-12-16 06:24:04 1LCQXQ-00098X-SK => nickvel <nickvel@domain.ru> F=<bullfrogsbrrn5@gmail.com> P=<bullfrogsbrrn5@gmail.com> R=spamd_router T=spamd_delivery QT=4s DT=0s
2008-12-16 06:24:04 1LCQXQ-00098X-SK => nika <nika@domain.ru> F=<bullfrogsbrrn5@gmail.com> P=<bullfrogsbrrn5@gmail.com> R=spamd_router T=spamd_delivery QT=4s DT=0s
2008-12-16 06:24:04 1LCQXQ-00098X-SK Failed to find group "" from expanded string "${lookup mysql {SELECT gid FROM accounts WHERE login='${quote_mysql:$local_part@$domain}'} {$value} }" for the spamd_delivery transport

Я эти логи понимаю так -- проверки acl_check_rcpt проходят успешно и дальше дело передается в acl_check_data, а там уже выясняется что некуда ложить письмо.... :(

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-16 9:16:05
Alex Keda
be вас есть адрес, письмо с заголовками - и вы не можете воспроизвести ситуацию?

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-16 9:53:04
Laa
Воспроизвожу в полной последовательности, благо exim -d -bh никто не отменял, все отбивается. Но фактически иногда письмо принимается и стоит в очереди на неизвестных получателей. :sorry:

Re: Exim принимает почту, которую не должен.

Добавлено: 2008-12-18 14:31:35
Laa
Всем спасибо.
Особенно lissyara, dikens3! :drinks:
Ошибка моя была, не совсем корректно понял endpass/verify
Починил. Все работает как и ожидалось.
Но до сих пор не понимаю, почему мои тесты exim -bh обламываются, а спамботы пробиваются...

Но сейчас уже все ок. :good: