dnl dnl проверка адресов хостов отправителя на принадлежность к relay_from_hosts, dnl если в MAIL FROM и RCPT TO указаны одинаковые адреса из локальных доменов dnl NO - не проводить проверку dnl REJECT - возврата клиенту кода 5xx dnl DROP - отказ в приеме сообщения с обрывом соединения dnl DEFER - возврата клиенту кода 451 dnl WARN - вывод в лог файл предупреждения dnl GREYLIST:XX - добавить XX баллов к счетчику опционального грейлистинга dnl REJECT:XX - добавить XX баллов к счетчику опционального reject'а dnl DELAY:XX - задержка XX секунд перед ответом на RCPT TO dnl define(`confCHECK_FAKE_LOCAL', `WARN')dnl dnl dnl исключение из проверки dnl NO - не делать исключений (по умолчанию делаются исключения для хостов из +relay_from_hosts) dnl AUTH - исключения для аутентифицированных отправителей dnl SPF_PASS - исключения для хостов, успешно прошедших проверку SPF записи dnl define(`confCHECK_FAKE_LOCAL_SKIP', `AUTH')dnl dnl dnl домены, подвергаемые вышеуказанно проверке dnl define(`confCHECK_FAKE_LOCAL_DOMAINS', `+local_domains')dnl dnl define(`confCHECK_FAKE_LOCAL_DOMAINS', `+local_domains : +relay_to_domains')dnl dnl # Проверка хоста отправителя на принадлежность к relay_from_hosts, если адреса # отправителя и получателя совпадают и домен в них является локальным warn set acl_m1 = hosts = +relay_from_hosts set acl_m1 = skip ifelse_strstr(confCHECK_FAKE_LOCAL_SKIP, `AUTH', `dnl warn authenticated = * set acl_m1 = skip ') dnl ifelse_strstr(confCHECK_FAKE_LOCAL_SKIP, `AUTH', `') ifelse_strstr(confCHECK_FAKE_LOCAL_SKIP, `SPF_PASS', `dnl ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `dnl warn acl = acl_spf_pass condition = ${if eq{$acl_m_spf_result}{pass}{yes}{no}} set acl_m1 = skip ')') dnl ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `')') ') dnl ifelse_strstr(confCHECK_FAKE_LOCAL_SKIP, `SPF_PASS', `') warn condition = ${if eq{$acl_m1}{skip}{no}{yes}} domains = confCHECK_FAKE_LOCAL_DOMAINS condition = ${if eq{$sender_address}{$local_part@$domain}{yes}{no}} set acl_m1 = confCHECK_FAKE_LOCAL acl = normalize_action set acl_m1 = ${sg{$acl_m1 }{\N\b([^=\s\d]+)(\s)\N}{\$1=00\$2}} set acl_m0 = The same local addresses in MAIL FROM and RCPT TO from nonlocal relay set acl_m2 = Access denied 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 deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} log_message = $acl_m0 message = $acl_m2 defer condition = ${if match{$acl_m1}{defer}{yes}{no}} log_message = $acl_m0 message = $acl_m2 drop condition = ${if match{$acl_m1}{drop}{yes}{no}} log_message = $acl_m0 message = $acl_m2 warn condition = ${if match{$acl_m1}{warn}{yes}{no}} log_message = $acl_m0 add_header = X-Warn-Local: $acl_m0 ifelse(confGREYLIST, `OPTIONAL', `dnl 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 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', `', `')')