Non existent host in HELO

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 11:44:48

Вот такой у меня красавчик в логах попался.
Jan 13 10:31:02 beta exim[52007]: H=(w0215.ignd.org) [109.123.165.40] I=[192.168.1.2]:25 Warning: ACL "warn" statement skipped: condition test deferred: failed to expand ACL string "${if !eq{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{$sender_host_address}{yes}{no}}": lookup of "a=w0215.ignd.org" gave DEFER:
Т.е. в HELO указан несуществующий хост.
Посоветуйте предварительную обработку поэлегантнее до этого ACL для таких случаев. А то неаккуратно как-то... :oops:
Собственно, само правило:

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

  # проверка соответствия IP HELO IP хоста отправителя
  warn   condition      = ${if !eq{${lookup dnsdb{a=$sender_helo_name}{$value}fa
         hosts          = !+relay_from_hosts : *
         set acl_c0     = ${eval:$acl_c0+20}
         logwrite       = SPAM score $acl_c0 for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not points to host address
IT voodoo blog https://kostikov.co

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2520 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 12:07:36

Ой, что-то кусок не влез выше.
Дублирую

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

  # проверка соответствия IP HELO IP хоста отправителя
  warn   condition      = ${if !eq{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{$sender_host_address}{yes}{no}}
         hosts          = !+relay_from_hosts : *
         set acl_c0     = ${eval:$acl_c0+20}
         logwrite       = SPAM score $acl_c0 for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not points to host address
IT voodoo blog https://kostikov.co

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение blade_007 » 2011-01-13 12:43:22

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

warn 
        !senders = :
        !hosts = +localadds : +relay_from_hosts
        !authenticated = * 
        condition = ${if !eq{$sender_helo_name}{$sender_host_name}{yes}{no}}
        logwrite = WARN: Host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - reverse zone not match with HELO

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 12:44:15

Сам ничего умнее вот этого предварительного правила не придумал

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

# запрет приёма почты от HELO с несуществующими доменами
  deny    message       = HELO is non exsistent domain. Access denied.
          hosts         = !+relay_from_hosts : *
          condition     = ${lookup dnsdb{a=$sender_helo_name}}
          delay         = 10s
IT voodoo blog https://kostikov.co

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 12:46:56

blade_007 писал(а):

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

warn 
        !senders = :
        !hosts = +localadds : +relay_from_hosts
        !authenticated = * 
        condition = ${if !eq{$sender_helo_name}{$sender_host_name}{yes}{no}}
        logwrite = WARN: Host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - reverse zone not match with HELO
Тут немного другое. Проверяется соответствие HELO имени хоста. У меня же - IP из HELO IP хоста отправителя.
Честно говоря я вообще смысла в вашей проверке не вижу, т.к. HELO может быть CNAME имени хоста.
IT voodoo blog https://kostikov.co

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 15:00:43

Поправка. Условие забыл :crazy:
Т.е. имеем сначала

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

  # запрет приёма почты от HELO с несуществующими доменами
  deny    message       = HELO is non exsistent domain. Access denied.
          hosts         = !+relay_from_hosts : *
          condition     = ${if eq{${lookup dnsdb{a=$sender_helo_name}}{}{yes}{no}}
          delay         = 10s
а где-то чуть позже

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

  # проверка соответствия IP HELO IP хоста отправителя
  warn   condition      = ${if !eq{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{$sender_host_address}{yes}{no}}
         hosts          = !+relay_from_hosts : *
         set acl_c0     = ${eval:$acl_c0+20}
         logwrite       = SPAM score $acl_c0 for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not points to host address
IT voodoo blog https://kostikov.co

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение blade_007 » 2011-01-13 15:38:56

Почти тоже самое что и в вашем первом пункте, только проверка по sender_host_name.. можно добавить задержку в 10 секунд

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

    warn 
        condition = ${if eq{$host_lookup_failed}{1}{yes}{no}}
        !hosts = +relay_from_hosts
        !senders = :
        !authenticated = * 
        logwrite = WARN: host = $sender_host_name [$sender_host_address] with HELO = $sender_helo_name - no reverse zone for host

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-13 15:48:10

blade_007 писал(а):Почти тоже самое что и в вашем первом пункте, только проверка по sender_host_name.. можно добавить задержку в 10 секунд

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

    warn 
        condition = ${if eq{$host_lookup_failed}{1}{yes}{no}}
        !hosts = +relay_from_hosts
        !senders = :
        !authenticated = * 
        logwrite = WARN: host = $sender_host_name [$sender_host_address] with HELO = $sender_helo_name - no reverse zone for host
Ну да. Только проверяется хостнэйм, а у меня HELO.
Кроме того, $host_lookup_failed это реверсная проверка (из IP в имя), а у меня - прямая (из имени в IP).
А аналогичное этому правило у меня идет уже в блоке начисления очков по СПАМу.
Т.е. сначала жёстко (с deny) разбирется HELO на корректность, затем отправитель (свой-чужой-аутентификация) и включенность в DNSBL, а после уже все остальное. Тут уже помягче правила.
IT voodoo blog https://kostikov.co

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение blade_007 » 2011-01-14 21:41:58

Добавление/исправление.. Что будете делать в случае резервирования IP с помощью ДНС?
Например,

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

> ${lookup dnsdb{a=yandex.ru}{$value}fail}
87.250.251.11
93.158.134.11
213.180.204.11
213.180.204.211
77.88.21.11
87.250.250.11
Т.е. если удаленныйпредставляется в EHLO именем, которое разрешается в 10-20 ипов. Яндекс просто как пример, но такая ситуация вполне возможна. Собственно, подставляя значения в ваше условие с WARN, получим (пусть EHLO=yandex.ru):

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

> ${if !eq{${lookup dnsdb{a=yandex.ru}{$value}fail}}{192.168.9.0}{yes}{no}}
yes
> ${if !eq{${lookup dnsdb{a=yandex.ru}{$value}fail}}{93.158.134.11}{yes}{no}}
yes
> ${if !eq{${lookup dnsdb{a=yandex.ru}{$value}fail}}{87.250.251.11}{yes}{no}}
yes
> ${if !eq{${lookup dnsdb{a=yandex.ru}{$value}fail}}{213.180.204.11}{yes}{no}}
yes
Теперь об изменении: функция sq действует как оператор замены (все \n заменяются на :), затем условный оператор match_ip сравнивает $sender_host_address с полученным ранее списком ипов. Если хост в списке - возвращается yes, если нет - no.
Проверка:

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

> ${if match_ip{192.168.0.1} { ${sg {${lookup dnsdb{a=yandex.ru}{$value}fail}} {\N\n\N} {:}} }  {yes}{no} }
no
> ${if match_ip{213.180.204.211} { ${sg {${lookup dnsdb{a=yandex.ru}{$value}fail}} {\N\n\N} {:}} }  {yes}{no} }
yes
> ${if match_ip{213.180.204.211} { ${sg {${lookup dnsdb{a=mxs.mail.ru}{$value}fail}} {\N\n\N} {:}} }  {yes}{no} }
no
> ${if match_ip{94.100.176.20} { ${sg {${lookup dnsdb{a=mxs.mail.ru}{$value}fail}} {\N\n\N} {:}} }  {yes}{no} }
yes
>
Как то так. Проверьте - может какие умные мысли предложите или просто покритикуете здраво.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2011-01-15 0:50:44

Мысль уловил. Очень верно.
Перекладываем его на нашу задачу:

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

beta# exim -be
> ${lookup dnsdb{a=ya.ru}}
77.88.21.3
87.250.250.3
87.250.251.3
93.158.134.3
213.180.204.3
> ${if match_ip{87.250.250.3}{${sg{${lookup dnsdb{a=ya.ru}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}
yes
> ${if match_ip{1.1.1.1}{${sg{${lookup dnsdb{a=ya.ru}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}
no
В итоге имеем вот такое второе правило

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

  # проверка соответствия IP HELO IP хоста отправителя
  warn   condition      = ${if !match_ip{$sender_host_address}{${sg{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}
         hosts          = !+relay_from_hosts : *
         set acl_c0     = ${eval:$acl_c0+20}
         logwrite       = SPAM score $acl_c0 for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not points to host address
IT voodoo blog https://kostikov.co

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Non existent host in HELO

Непрочитанное сообщение Stason » 2012-05-07 11:43:45

Спешу поделиться радостью:
Вот тоже настала пора как я убедил руководство перейти с постфикса на экзим, все как надо с тестово-промышленной эксплуатацией. Ставил exim 4.77, но конфиги у меня были еще от 4.68, где я обнаружил, что часть проверок не работает, оказалось это связано с изменением синтаксиса в версии 4.77.
Например, если проверять так, как вы рекомендуете, то получим unable to complete match against "${lookup dnsdb..., а это весьма опасно, об этом написано в http://ftp.exim.org/pub/exim/ChangeLogs/ChangeLog-4.77.
Так что правильнее в 4.77 будет так condition = ${if !inlist{$sender_host_address}{${sg{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Non existent host in HELO

Непрочитанное сообщение Stason » 2012-05-08 10:48:57

Stason писал(а):Спешу поделиться радостью
Эх рано я спешил, при использовании inlist проверка не отрабатывает, если кому интересно, я создал новую тему:
http://forum.lissyara.su/viewtopic.php?f=20&t=36540
там просто у меня еще ряд вопросов возник.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2012-08-26 21:25:15

Признаться, не знаю, в чем у вас проблема с этой проверкой.
У меня вот в таком варианте все отлично работает.

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

  # преобразование HELO в IP (если возможно)
  warn   condition      = ${if isip{$acl_m1}{no}{yes}}
         set acl_m1     = ${sg{${lookup dnsdb{defer_never,a=$sender_helo_name}}}{\N\n\N}{:}}

...

  # проверка соответствия IP HELO IP хоста отправителя
  warn   condition      = ${if match_ip{$sender_host_address}{$acl_m1}{no}{yes}}
         hosts          = !+relay_from_hosts : *
         set acl_c0     = ${eval:$acl_c0+20}
         logwrite       = SPAM score $acl_c0 for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not point to host address
Переменная, которая определяется в первом выражении, у меня еще используется в одном месте.
IT voodoo blog https://kostikov.co

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2012-08-26 22:24:15

Да, забыл, до первого условия выше есть еще такая штука

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

  # удаляем квадратные скобки из HELO (если есть)
  warn   set acl_m1     = ${lc:${sg{$sender_helo_name}{\N\[|\]\N}{}}}
В принципе, можно подставить напрямую.
IT voodoo blog https://kostikov.co

ASY
мл. сержант
Сообщения: 130
Зарегистрирован: 2011-02-21 12:50:03

Re: Non existent host in HELO

Непрочитанное сообщение ASY » 2012-09-06 21:55:45

xM писал(а):Вот такой у меня красавчик в логах попался.
Т.е. в HELO указан несуществующий хост.
Посоветуйте предварительную обработку поэлегантнее до этого ACL для таких случаев. А то неаккуратно как-то... :oops:
на всякий случай: http://www.rfc-editor.org/rfc/rfc2821.txt

An SMTP server MAY verify that the domain name parameter in the EHLO
command actually corresponds to the IP address of the client.
However, the server MUST NOT refuse to accept a message for this
reason if the verification fails: the information about verification
failure is for logging and tracing only.

в 5321 оно так же осталось.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2012-09-06 22:13:17

ASY писал(а):на всякий случай: http://www.rfc-editor.org/rfc/rfc2821.txt
An SMTP server MAY verify that the domain name parameter in the EHLO
command actually corresponds to the IP address of the client.
However, the server MUST NOT refuse to accept a message for this
reason if the verification fails: the information about verification
failure is for logging and tracing only.
в 5321 оно так же осталось.
У мну только скорринг, не более. Хотя, конечно, "клинику" а-ля localhost в HELO я рублю. Но, думаю, оно правильно и духу RFC не противоречит.
IT voodoo blog https://kostikov.co

ASY
мл. сержант
Сообщения: 130
Зарегистрирован: 2011-02-21 12:50:03

Re: Non existent host in HELO

Непрочитанное сообщение ASY » 2012-09-10 0:04:00

рубить localhost - это точно не противоречит, но в исходном сообщении w0215.ignd.org, я правильно понимаю ? Вообще, логов Exim не видел, но "H=" понял так.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1220
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Non existent host in HELO

Непрочитанное сообщение xM » 2012-09-10 9:42:47

ASY писал(а):рубить localhost - это точно не противоречит, но в исходном сообщении w0215.ignd.org, я правильно понимаю ? Вообще, логов Exim не видел, но "H=" понял так.
Да это история старая. Там ошибка была в конфиге.
IT voodoo blog https://kostikov.co