dnl dnl использовать механизм определения страны по IP адресу dnl NO - не использовать механизм определения страны по IP адресу dnl YES - использовать механизм определения страны по IP адресу dnl define(`confIP2COUNTRY', `NO')dnl dnl dnl при использовании фильтрации писем по стране хоста отправителя dnl (переменная confCHECK_ACCESS_RELAY_COUNTRY), комбинации страны хоста dnl отправителя и адресов отправителя и получателя (переменная dnl confCHECK_ACCESS_COMPAT_RELAY_COUNTRY), а также при указании в dnl заголовках письма информации о странах, через которые прошло письмо dnl (перемення confRELAY_COUNTRIES) значение confIP2COUNTRY автоматически dnl устанавливается равным YES dnl dnl механизм определения страны по IP адресу dnl DLFUNC - определение страны по IP адресу с помощю dlfunc ip2country dnl при этом необходимо: dnl собрать exim с EXPAND_DLFUNC dnl собрать и установить GeoIP library dnl DNSBL - определение страны по IP адресу с помощю DNSBL zz.countries.nerd.dk dnl WIP-API - определение страны по WIPMANIA API (http://www.wipmania.com/ru/api/) dnl PTRTLD - определение страны по IP адресу с на основании TLD из PTR записи dnl define(`confIP2COUNTRY_BACKEND', `DNSBL PTRTLD')dnl dnl в качестве значения confIP2COUNTRY_BACKEND можно указывать несколько механизмов dnl ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_ip2country: # acl_arg1 - IP адрес # acl_m_ip2country_result - результат в виде двубуквенного обозначения страны warn set acl_m_ip2country_result = UNKNOWN accept condition = ${if match_ip{$acl_arg1}{127.0.0.1/8 : +private_networks}{yes}{no}} ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC', ` warn condition = ${if eq{$acl_m_ip2country_result}{UNKNOWN}{yes}{no}} set acl_m_ip2country_result = ${dlfunc{confDLFUNC_PATH/confDLFUNC_FNAME}{ip2country}{$acl_arg1}} warn set acl_m_ip2country_result = ${sg{$acl_m_ip2country_result}{--}{UNKNOWN}} condition = ${if eq{$acl_m_ip2country_result}{}{yes}{no}} set acl_m_ip2country_result = UNKNOWN ') dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC', `') ifelse_strstr(confIP2COUNTRY_BACKEND, `DNSBL', ` warn condition = ${if eq{$acl_m_ip2country_result}{UNKNOWN}{yes}{no}} set acl_m_ip2country_result = ${lookup dnsdb{txt=<,${sg{$acl_arg1}\ {\N^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$\N}{\$4.\$3.\$2.\$1}}.zz.countries.nerd.dk}{$value}{UNKNOWN}} ') dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `DNSBL', `') ifelse_strstr(confIP2COUNTRY_BACKEND, `WIP-API', ` warn condition = ${if eq{$acl_m_ip2country_result}{UNKNOWN}{yes}{no}} set acl_m_ip2country_result = ${sg{${readsocket{inet:api.wipmania.com:80}{GET http://api.wipmania.com/$acl_arg1 HTTP/1.0\n\n}{20s}{\n}{UNKNOWN}}}{\N^(.+\r?\n)+\r?\n\N}{}} set acl_m_ip2country_result = ${if eq{$acl_m_ip2country_result}{XX}{UNKNOWN}{$acl_m_ip2country_result}} set acl_m_ip2country_result = ${if match{$acl_m_ip2country_result}{\N^(UNKNOWN|[a-zA-Z]{2})$\N}{$acl_m_ip2country_result}{UNKNOWN}} ') dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `WIP-API', `') ifelse_strstr(confIP2COUNTRY_BACKEND, `PTRTLD', ` warn condition = ${if eq{$acl_m_ip2country_result}{UNKNOWN}{yes}{no}} ## определяем страну по PTR записи в реверсной зоне только если существует соответствующая запись в прямой зоне # set acl_m_hostname = ${if eq{$acl_arg1}{$sender_host_address}{$sender_host_name}{${lookup dnsdb{ptr=$acl_arg1}{$value}{}}}} ## определяем страну по PTR записи в реверсной зоне даже если не существует соответствующая запись в прямой зоне set acl_m_hostname = ${if and{\ {eq{$acl_arg1}{$sender_host_address}}\ {!eq{$sender_host_name}{}}\ }{$sender_host_name}{${lookup dnsdb{ptr=$acl_arg1}{$value}{}}}} set acl_m_ip2country_result = ${if match{$acl_m_hostname}{\N(?i)^.+\.([a-z][a-z])$\N}{$1}{UNKNOWN}} ') dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `PTRTLD', `') warn set acl_m_ip2country_result = ${uc:$acl_m_ip2country_result} accept ') dnl ifelse(SECTION, `ACLS_ADDITIONAL', `')