Здравствуйте.

pkg info | grep exim
exim-4.85_1                    High performance MTA for Unix systems on
the Internet

Есть такие правила в acl_check_rcpt:

  warn    condition     = ${if match{$sender_host_name}\
                          {\N^здесь регулярное выражение для нехороших
хостов$\N}\
                          {yes}{no}}
  log_message           = Access from dsl/dialup/cable relays
  set acl_c_bouncemessage = $acl_c_bouncemessage\nAccess from
dsl/dialup/cable relays
  set acl_c_spamscore = ${eval:$acl_c_spamscore+20}

  warn    condition     = ${if match{$sender_host_name}{}{yes}{no}}
          condition     = ${if match{$acl_c_reverse_zone}\
                          {\N^здесь регулярное выражение для нехороших
хостов$\N}\
                          {yes}{no}}
  log_message           = Access from dsl/dialup/cable relays
  set acl_c_bouncemessage = $acl_c_bouncemessage\nAccess from
dsl/dialup/cable relays
  set acl_c_spamscore = ${eval:$acl_c_spamscore+20}

Из шпаргалки:

=============================================================================
Exim выполняет 2 проверки: имя хоста по ip, а затем проверяет ip по
найденному имени хоста.
В случае, если он не может определить ip по найденному имени хоста, то
$sender_host_name
не определено.

Другими словами.
Если нет записи в прямой зоне, или она не соответствует записи в реверной
зоне, то значение
$sender_host_name не определено, что явно указано в документации.

Сделано это для того, чтобы $sender_host_name невозможно было
сфальсифицировать изменив лишь
запись в реверсной зоне.
=============================================================================

Имеем хост 94.247.31.252, резолвится он одинаково в обеих зонах:

host 94.247.31.252
252.31.247.94.in-addr.arpa domain name pointer vps2671-cloud.comalis.net.
host vps2671-cloud.comalis.net
vps2671-cloud.comalis.net has address 94.247.31.252


Запускаем для него exim -bhc 94.247.31.252, нужный нам фрагмент:

>>> processing "warn"
>>> check condition = ${if match{$sender_host_name}{\N^здесь регулярное
выражение для нехороших хостов$\N}{yes}{no}}
>>>                 = yes
>>> l_message: Access from dsl/dialup/cable relays
>>> check set acl_c_bouncemessage = $acl_c_bouncemessage\nAccess from
dsl/dialup/cable relays
>>>                              =
>>> Access from dsl/dialup/cable relays
>>> check set acl_c_spamscore = ${eval:$acl_c_spamscore+20}
>>>                           = 20
>>> warn: condition test succeeded in ACL "acl_check_rcpt"
LOG: H=vps2671-cloud.comalis.net [94.247.31.252] Warning: Access from
dsl/dialup/cable relays
>>> processing "warn"
>>> check condition = ${if match{$sender_host_name}{}{yes}{no}}
>>>                 = yes
>>> check condition = ${if match{$acl_c_reverse_zone}{\N^здесь регулярное
выражение для нехороших хостов$\N}{yes}{no}}
>>>                 = yes
>>> l_message: Access from dsl/dialup/cable relays
>>> check set acl_c_bouncemessage = $acl_c_bouncemessage\nAccess from
dsl/dialup/cable relays
>>>                              =
>>> Access from dsl/dialup/cable relays
>>> Access from dsl/dialup/cable relays
>>> check set acl_c_spamscore = ${eval:$acl_c_spamscore+20}
>>>                           = 40
>>> warn: condition test succeeded in ACL "acl_check_rcpt"

Очевидно, что $sender_host_name не пустое (vps2671-cloud.comalis.net) и
попадает в первое правило (первый warn). Но как тогда понимать, что оно
попадает в во второе правило (второй warn), где есть условие:

${if match{$sender_host_name}{}{yes}{no}}

Ткните пальцем, где меня глючит или, всё таки, это Exim ведёт себя
неадекватно.

P.S. Год назад такая логика работала как и задумано, но с того времени
версия Exim не раз обновлялась.

-- 
WBR, Alexander Sheiko


_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users

Ответить