dnl dnl Проверка рилея отправителя в blacklist'ах dnl 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_ACCESS', `WARN')dnl dnl dnl действия WARN, PAUSE:XX, GREYLIST:XX, REJECT:XX можно указывать через пробел dnl dnl в файле access-relay-blacklist перечисляются A записи хостов и сети в виде CIDR dnl для хостов и сетей, перечисленных в файле access-relay-blacklist, применяется dnl действие, указанное в переменной confCHECK_RELAY_ACCESS dnl dnl в файле access-relay перечисляются A записи хостов, сети в виде CIDR, dnl PTR записи хостов, доменные зоны в виде wildcard или регулярных выражений dnl dnl в файле access-relay можно указать необходимое действие для данного dnl хоста в виде: dnl host : action : message : log_message dnl dnl где dnl host - A запись хоста, сеть в виде CIDR, PTR запись хоста или доменная зона dnl в виде wildcard или регулярного выражения 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 submit_mysql - занесение записи о хосте в базу MySQL dnl submit_sqlite - занесение записи о хосте в базу SQLite dnl submit_rbl - занесение записи о хосте в DNSBL dnl dnl ответ SMTP будет использован в случае указания reject/deny или defer в dnl качестве значения для action. если текст ответа не будет указан, будет dnl использован текст сообщения об ошибке по умолчанию dnl dnl если параметр action не будет указан, будет использоваться действие, указанное dnl в переменной confCHECK_RELAY_ACCESS dnl dnl пример: dnl A.B.C.D : defer : message defered. contact postmaster@$qualify_domain dnl A.B.C.0/24 : deny : sender network blacklisted dnl host.domain.tld : warn dnl host2.domain.tld : ok dnl *.domain.tld dnl \N^.+\.zuper-ISP\..+$\N : reject : message from zuper-ISP rejected dnl dnl ############################################## dnl dnl проверка A записи рилея на принадлежность к dial-up/dsl/cable сетям 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_DIALUP', `WARN')dnl dnl dnl действия WARN, PAUSE:XX, GREYLIST:XX, REJECT:XX можно указывать через пробел dnl dnl списки dial-up/dsl/cable хостов и сетей можно указывать в виде A записей и номеров сетей dnl указываются в файле CONFDIR/access-relay-dynamic dnl dnl confCHECK_RELAY_DIALUP используется только при использовании confCHECK_RELAY_ACCESS dnl ifelse(confCHECK_RELAY_ACCESS, `YES', `define(`confCHECK_RELAY_ACCESS', `REJECT')') define(`_CHECK_RELAY_ACCESS_TMP', `NORMALIZE_ACTION(confCHECK_RELAY_ACCESS)')dnl define(`confCHECK_RELAY_ACCESS', _CHECK_RELAY_ACCESS_TMP)dnl ifelse(SECTION, `MAIN', `dnl hostlist hosts_blacklisted = CONFDIR/access-relay-blacklist ifelse(confCHECK_RELAY_DIALUP, `NO', `dnl', `dnl hostlist hosts_blacklist_dialup = CONFDIR/access-relay-dynamic ') dnl ifelse(confCHECK_RELAY_DIALUP, `NO', `dnl', `' ') dnl ifelse(SECTION, `MAIN', `') ifelse(SECTION, `ACL_CHECK_RCPT', ` # Проверка рилея отправителя в blacklist-ах warn set acl_m1 = set acl_m0 = ${lookup{$sender_host_address}\ iplsearch{CONFDIR/access-relay}\ {${if eq{$value}{}{confCHECK_RELAY_ACCESS}{$value}}}\ {\ ${lookup{$sender_host_name}\ wildlsearch{CONFDIR/access-relay}\ {${if eq{$value}{}{confCHECK_RELAY_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}} ifdef(`confENTERPRISE_USER', `dnl warn condition = ${if match{$acl_m1}{submit_mysql}{yes}{no}} ENTERPRISE(`mysql', `submit', `sender_host_address', `blacklisted', `$sender_host_name', `0') warn condition = ${if match{$acl_m1}{submit_sqlite}{yes}{no}} ENTERPRISE(`sqlite', `submit', `sender_host_address', `blacklisted', `$sender_host_name', `0') warn condition = ${if match{$acl_m1}{submit_rbl}{yes}{no}} dnl ENTERPRISE(`rbl', `update', `mx.org.ua', `sender-host-name.rbl.mx.org.ua', `blacklisted', `$sender_host_name') ENTERPRISE(`rbl', `submit', `sender-host-name', `blacklisted', `$sender_host_name') ') dnl # 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', `', `')') ACL(`check_relay_hostlist', `hosts_blacklisted', `confCHECK_RELAY_ACCESS', `Access from relay $sender_host_address denied according to the local policy', `Sender relay $sender_host_address blacklisted') ifelse(confCHECK_RELAY_DIALUP, `NO', `dnl', `dnl define(`_CHECK_RELAY_ACCESS_TMP', `NORMALIZE_ACTION(confCHECK_RELAY_DIALUP)')dnl define(`confCHECK_RELAY_DIALUP', _CHECK_RELAY_ACCESS_TMP)dnl ACL(`check_relay_hostlist', `hosts_blacklist_dialup', `confCHECK_RELAY_DIALUP', `Access from dial-up/dsl/cable relays denied according to the local policy.\n\ Use mail server of your ISP', `Access from dial-up/dsl/cable relays denied /A record/') ') dnl ifelse(confCHECK_RELAY_DIALUP, `NO', `dnl', `' ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `')