dnl dnl проверка адресов хостов отправителя на принадлежность к relay_from_hosts, dnl если в MAIL FROM и RCPT TO указаны одинаковые адреса из локальных доменов dnl NO - не проводить проверку dnl REJECT - возврата клиенту кода 5xx dnl DROP - отказ в приеме сообщения с обрывом соединения dnl DEFER - возврата клиенту кода 451 dnl WARN - вывод в лог файл предупреждения dnl QUARANTINE - принять письмо с сохранением в карантин без доставки получателям 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 TRUSTED_HOSTS - исключения для хостов из trusted сетей 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, `TRUSTED_HOSTS', `dnl warn hosts = +trusted_hosts set acl_m1 = skip ') dnl ifelse_strstr(confCHECK_FAKE_LOCAL_SKIP, `TRUSTED_HOSTS', `') 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{${lc:$sender_address}}{${lc:$local_part@$domain}}{yes}{no}} acl = acl_normalize_action "confCHECK_FAKE_LOCAL" set acl_m1 = ${sg{$acl_m_normalize_action_result }{\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_m_spam_action = ${acl_m_spam_action}\t\ delay=${extract{pause}{$acl_m1}}s\t\t\ $acl_m0\n # quarantine and !reject warn condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{no}{yes}} add_header = X-Quarantine-Fake-Local: $acl_m0 log_message = message will be quarantined: $acl_m0 set acl_m_add_x_orig_rcpt = yes set acl_m_quarantined = $acl_m_quarantined envelope accept condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{no}{yes}} # quarantine and reject accept condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} log_message = message will be quarantined and rejected: fake local message blacklisted set acl_m_fakereject = \ message will be quarantined and rejected: $acl_m0\ |X-Quarantine-Fake-Local: $acl_m0\ |$acl_m2 set acl_m_add_x_orig_rcpt = yes set acl_m_quarantined = $acl_m_quarantined envelope # !quarantine and reject deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{no}{yes}} 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_m_optional_greylist = \ scores=${eval:${extract{scores}{$acl_m_optional_greylist}}+${extract{greylist}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_m_optional_greylist}} $acl_m0;" set acl_m_spam_action = ${acl_m_spam_action}\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_m_optional_reject = \ scores=${eval:${extract{scores}{$acl_m_optional_reject}}+${extract{reject}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_m_optional_reject}} $acl_m0;" set acl_m_spam_action = ${acl_m_spam_action}\t\ reject scores=${extract{reject}{$acl_m1}}\t\t\ $acl_m0\n ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')')