Страница 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 письмо получает баллы и проходит дальше до финальной проверки, вот там уже решается судьба этого письма.
Внимание, вопрос -- КАК это письмо прошло?
Еще, покажите, пожалуйста, у кого как реализована проверка локального получателя. Я пока решил поставить 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, спасибо за то, что разжевали!
Тем не менее валят и дальше, а воспроизвести не получается.
Уже начинаю грешить и на mysql...
Хотя поток не такой и больше, до 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 никто не отменял, все отбивается. Но фактически иногда письмо принимается и стоит в очереди на неизвестных получателей.
Re: Exim принимает почту, которую не должен.
Добавлено: 2008-12-18 14:31:35
Laa
Всем спасибо.
Особенно lissyara, dikens3!
Ошибка моя была, не совсем корректно понял endpass/verify
Починил. Все работает как и ожидалось.
Но до сих пор не понимаю, почему мои тесты exim -bh обламываются, а спамботы пробиваются...
Но сейчас уже все ок.