dnl dnl проверка страны рилея отправителя в blacklist'ах dnl NO - не проводить проверку dnl REJECT - возврата по умолчанию клиенту кода 5xx dnl DEFER - возврата по умолчанию клиенту кода 4xx dnl WARN - вывода по умолчанию в лог файл предупреждения dnl PAUSE:XX - пауза XX секунд dnl GREYLIST:XX - добавить XX баллов к счетчику опционального greylisting'а dnl REJECT:XX - добавить XX баллов к счетчику опционального reject'а dnl define(`confCHECK_RELAY_COUNTRY_ACCESS', `NO')dnl dnl dnl действия WARN, PAUSE:XX, GREYLIST:XX, REJECT:XX можно указывать через пробел dnl dnl в файле CONFDIR/access-relay можно указать необходимые действия для страны dnl хоста отправителя в виде: dnl NN : action : message : log_message dnl dnl где dnl NN - двубуквенный код страны dnl action - действие dnl message - ответ SMTP клиенту (может отсутствовать) dnl log_message - сообщение в лог файл (может отсутствовать) dnl dnl возможные значения для action: dnl ok - исключение из проверки для указанного хоста dnl warn - вывод в лог файл предупреждения dnl reject - отказ в приеме сообщения dnl deny - синоним для reject dnl defer - возврат временной ошибки dnl greylist=X - добавление X баллов к счетчику опционального грейлистинга dnl reject=X - добавление X баллов к счетчику опционального reject'а dnl dnl ответ SMTP будет использован в случае указания reject/deny или defer в dnl качестве значения для action. если текст ответа не будет указан, будет dnl использован текст сообщения об ошибке по умолчанию dnl dnl если параметр action не будет указан, будет использоваться действие, указанное dnl в переменной confCHECK_RELAY_COUNTRY_ACCESS dnl dnl пример: dnl CN : defer : message defered. contact postmaster@$qualify_domain dnl MX : pause=20 warn dnl dnl исключения для данного фильтра указываются в файле CONFDIR/access-relay в виде dnl IP адресов или сетей в виде CIDR, в качестве действия указав skip или ok dnl dnl механизм определения страны по IP адресу можно указать в переменной confIP2COUNTRY_BACKEND dnl define(`confIP2COUNTRY', `YES')dnl define(`_CHECK_RELAY_COUNTRY_ACCESS_TMP', `NORMALIZE_ACTION(confCHECK_RELAY_COUNTRY_ACCESS)')dnl define(`confCHECK_RELAY_COUNTRY_ACCESS', _CHECK_RELAY_COUNTRY_ACCESS_TMP)dnl ifelse(SECTION, `ACL_CHECK_RCPT', ` # Проверка рилея отправителя в списке стран warn set acl_m1 = set acl_m0 = ${lookup{$sender_host_address}iplsearch{CONFDIR/access-relay}{$value}{}} condition = ${if eq{$acl_m0}{}{yes}{no}} set acl_m_IP = $sender_host_address acl = acl_ip2country condition = ${if eq{$acl_m_country}{UNKNOWN}{no}{yes}} set acl_m0 = ${lookup{$acl_m_country}\ wildlsearch{CONFDIR/access-relay}\ {${if eq{$value}{}{confCHECK_RELAY_COUNTRY_ACCESS}{$value}}}\ {\ ${lookup{country_$acl_m_country}\ wildlsearch{CONFDIR/access-relay}\ {${if eq{$value}{}{confCHECK_RELAY_COUNTRY_ACCESS}{$value}}}\ {no}\ }\ }\ } condition = ${if eq{$acl_m0}{no}{no}{yes}} set acl_m1 = ${extract{1}{:}{$acl_m0}} acl = normalize_action set acl_m1 = ${sg{$acl_m1 }{\N\b([^=\s\d]+)(\s)\N}{\$1=00\$2}} # message = $acl_m2 # log_message = $acl_m0 set acl_m2 = ${expand:${sg{${extract{2}{:}{$acl_m0}}}{\N^\s+\N}{}}} set acl_m0 = ${expand:${sg{${extract{3}{:}{$acl_m0}}}{\N^\s+\N}{}}} set acl_m0 = ${if eq{$acl_m0}{}{relay $sender_host_name blacklisted${if eq{$acl_m2}{}{}{: $acl_m2}}}{$acl_m0}} # set acl_m2 = ${if eq{$acl_m2}{}{Access from relay $sender_host_name denied according to the local policy}{$acl_m2}} # Pause в случае принадлежности хоста рилея к blacklisted сетям # Pause if sender host in blacklisted network warn condition = ${if eq{${extract{pause}{$acl_m1}}}{}{no}{yes}} delay = ${extract{pause}{$acl_m1}}s set acl_m15 = ${acl_m15}\t\ delay=${extract{pause}{$acl_m1}}s\t\t\ $acl_m0\n # Reject в случае принадлежности хоста рилея к blacklisted сетям # Reject if sender host in blacklisted network deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} message = ${if eq{$acl_m2}{}{Access from relay $sender_host_name denied according to the local policy}{$acl_m2}} log_message = $acl_m0 # Defer в случае принадлежности хоста рилея к blacklisted сетям # Defer if sender host in blacklisted network defer condition = ${if match{$acl_m1}{defer}{yes}{no}} message = ${if eq{$acl_m2}{}{Access from relay $sender_host_name defered according to the local policy}{$acl_m2}} log_message = $acl_m0 # Drop в случае принадлежности хоста рилея к blacklisted сетям # Drop if sender host in blacklisted network drop condition = ${if match{$acl_m1}{drop}{yes}{no}} message = ${if eq{$acl_m2}{}{Access from relay $sender_host_name droped according to the local policy}{$acl_m2}} log_message = $acl_m0 # Warning в случае принадлежности хоста рилея к blacklisted сетям # Warning if sender host in blacklisted network warn condition = ${if match{$acl_m1}{warn}{yes}{no}} add_header = X-Warn-Relay-BlackListed: ${if eq{$acl_m2}{}{relay $sender_host_name is blacklisted}{$acl_m2}} log_message = $acl_m0 ifelse(confGREYLIST, `OPTIONAL', `dnl # greylist в случае принадлежности хоста рилея к blacklisted сетям # greylist if sender host in blacklisted network warn condition = ${if eq{${extract{greylist}{$acl_m1}}}{}{no}{yes}} set acl_c8 = \ scores=${eval:${extract{scores}{$acl_c8}}+${extract{greylist}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_c8}} $acl_m0;" set acl_m15 = ${acl_m15}\t\ greylist scores=${extract{greylist}{$acl_m1}}\t\ $acl_m0\n ') dnl ifelse(confGREYLIST, `OPTIONAL', `') ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `dnl', `dnl # optional reject в случае принадлежности хоста рилея к blacklisted сетям # optional reject if sender host in blacklisted network warn condition = ${if eq{${extract{reject}{$acl_m1}}}{}{no}{yes}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{no}{yes}} set acl_c6 = \ scores=${eval:${extract{scores}{$acl_c6}}+${extract{reject}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_c6}} $acl_m0;" set acl_m15 = ${acl_m15}\t\ reject scores=${extract{reject}{$acl_m1}}\t\t\ $acl_m0\n ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')') ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `')