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 при включенной поддержке IPv6 используется dlfunc geoipv6 dnl для использования dlfunc необходимо: dnl собрать exim с EXPAND_DLFUNC dnl собрать и установить GeoIP library dnl DLFUNC_GEOIP - синоним DLFUNC dnl DLFUNC_GEOIPV6 - определение страны по IP адресу с помощью dlfunc geoipv6 dnl даже при выключенной поддержке IPv6 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 dnl использовать механизм определения континента по IP адресу dnl NO - не использовать механизм определения континента по IP адресу dnl YES - использовать механизм определения континента по IP адресу dnl define(`confIP2CONTINENT', `NO')dnl dnl dnl механизм определения страны по IP адресу dnl DLFUNC - определение континента по IP адресу с помощю dlfunc ip2country dnl (в случае отсутствия поддержки IPv6 используетс более старая dnl dlfunc ip2country). dnl при этом необходимо: dnl собрать exim с EXPAND_DLFUNC dnl собрать и установить GeoIP library dnl define(`confIP2CONTINENT_BACKEND', `DLFUNC')dnl dnl ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_ip2country: # acl_arg1 - IP адрес # acl_m_ip2country_result - результат в виде двухбуквенного кода страны warn set acl_m_ip2country_result = UNKNOWN ifelse(confIP2CONTINENT, `NO', `dnl', `dnl warn set acl_m_ip2continent_result = UNKNOWN ') accept condition = ${if match_ip{$acl_arg1}{<; 127.0.0.1/8`'ifelse_strstr(confIPv6, `YES', ` ; ::1') ; +private_networks}{yes}{no}} ifelse_strstr(confIP2COUNTRY_BACKEND` ', `DLFUNC ', `define(`confIP2COUNTRY_BACKEND', confIP2COUNTRY_BACKEND` DLFUNC_GEOIP')')dnl ifelse_strstr(confIP2COUNTRY_BACKEND` ', `DLFUNC_GEOIP ', `ifelse_strstr(confIPv6, `YES', `define(`confIP2COUNTRY_BACKEND', confIP2COUNTRY_BACKEND` DLFUNC_GEOIPV6')')')dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC_GEOIP', ` warn condition = ${if eq{$acl_m_ip2country_result}{UNKNOWN}{yes}{no}} set acl_m_ip2country_result = ${dlfunc{confDLFUNC_PATH/confDLFUNC_FNAME}{ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC_GEOIPV6', `geoipv6',`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 ifelse(confIP2CONTINENT, `NO', `dnl', `dnl warn condition = ${if eq{$acl_m_ip2continent_result}{UNKNOWN}{yes}{no}} set acl_m_ip2continent_result = ${dlfunc{confDLFUNC_PATH/confDLFUNC_FNAME}{ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC_GEOIPV6', `geoipv6continent',`ip2continent')}{$acl_arg1}} warn set acl_m_ip2continent_result = ${sg{$acl_m_ip2continent_result}{--}{UNKNOWN}} condition = ${if eq{$acl_m_ip2continent_result}{}{yes}{no}} set acl_m_ip2continent_result = UNKNOWN ') dnl ifelse(confIP2CONTINENT, `NO', `', `') ') dnl ifelse_strstr(confIP2COUNTRY_BACKEND, `DLFUNC_GEOIP', `') 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', `')