приветствую
в дополнение к проверке страны хоста отправителя и комбинации страны
хоста отправителя, адреса отправителя и адреса получателя реализована
проверка контитента хоста отправителя и комбинации контитента хоста
отправителя, адреса отправителя и адреса получателя.
включение проверки контитента хоста отправителя производится указанием
действия по умолчанию в переменной confCHECK_ACCESS_RELAY_CONTINENT:
NO - не проводить проверку
REJECT - возврата по умолчанию клиенту кода 5xx
DEFER - возврата по умолчанию клиенту кода 4xx
WARN - вывода по умолчанию в лог файл предупреждения
QUARANTINE - принять письмо с сохранением в карантин без доставки
получателям
PAUSE=XX - пауза XX секунд
GREYLIST=XX - добавить XX баллов к счетчику опционального
greylisting'а
REJECT=XX - добавить XX баллов к счетчику опционального reject'а
define(`confCHECK_ACCESS_RELAY_CONTINENT', `NO')dnl
набор действий по умолчанию традиционный.
проверка континента хоста отправителя является расширением проверки
адреса хоста отправителя.
т. е. confCHECK_ACCESS_RELAY_CONTINENT можно использовать только вместе
с confCHECK_ACCESS_RELAY.
запрос к access-relay по двухбуквенному коду континента производится
только в случае, если запросы по IP адресу, имени хоста отправителя и
стране отправителя не дали результатов.
в файле CONFDIR/access-relay можно указать необходимые действия для
континента хоста отправителя в виде:
CONTINENT_NN : action : message : log_message
где
NN - двухбуквенный код континента
action - действие
message - ответ SMTP клиенту (может отсутствовать)
log_message - сообщение в лог файл (может отсутствовать)
информация по двухбуквенным кодам континентов:
https://dev.maxmind.com/geoip/legacy/web-services/
возможные значения для action такие же, как при проверке хоста
отправителя (переменная confCHECK_ACCESS_RELAY).
ответ SMTP будет использован в случае указания reject/deny или defer в
качестве значения для action. если текст ответа не будет указан, будет
использован текст сообщения об ошибке по умолчанию.
если параметр action не будет указан, будет использоваться действие,
указанное в переменной confCHECK_ACCESS_RELAY
пример:
CONTINENT_AF : GREYLIST=10 : Temporary problem
CONTINENT_AN : WARN : Wow, the message from Antarctica
префикс CONTINENT пришлось использовать, т. к. при тестах определения
контитента письма из Аргентины выяснилось, что SA (код контитента Южная
Америка) совпадает с кодом страны SA (Саудовская Аравия).
исключения для данного фильтра указываются в файле CONFDIR/access-relay
в виде IP адресов или сетей в виде CIDR, в качестве действия указав skip
или ok
механизм определения страны по IP адресу можно указать в переменной
confIP2COUNTRY_BACKEND (об этом ниже).
управление проверкой комбинации континента хоста отправителя, адресов
отправителя и получателя производится с помощью переменной
confCHECK_ACCESS_COMPAT_RELAY_CONTINENT:
NO - не проводить проверку
YES - проводить проверку
define(`confCHECK_ACCESS_COMPAT_RELAY_CONTINENT', `NO')
проверка комбинации континента хоста отправителя и адресов отправителя и
получателя является расширением проверки комбинации страны хоста
отправителя, адресов отправителя и получателя.
т. е. confCHECK_ACCESS_COMPAT_RELAY_CONTINENT можно использовать только
вместе с confCHECK_ACCESS_COMPAT_RELAY.
отличием confCHECK_ACCESS_COMPAT_RELAY_CONTINENT от
confCHECK_ACCESS_COMPAT_RELAY и confCHECK_ACCESS_COMPAT_RELAY_COUNTRY
является лишь то, что вместе адреса хоста отправителя или имени хоста
отправителя нужно указывать континент хоста отправителя в виде
двухбуквенного кода.
при этом запрос в access-compay-relay с комбинацией контитента хоста
отправителя, адреса отправителя и адреса получателя производится только
в случае, если в данном файле не найдены комбинации адреса хоста
отправителя, адреса отправителя и адреса получателя или имени хоста
отправителя, адреса отправителя и адреса получателя, а также страны
хоста отправителя, адреса отправителя и адреса получателя или имени
хоста отправителя, адреса отправителя и адреса получателя.
в файле CONFDIR/access-compat-relay можно указать необходимые действия
для комбинации континента хоста отправителя, адреса отправителя и адреса
получателя в виде:
CONTINENT_NN<@>sender_mailbox на sender.domain<@>rcpt_mailbox на rcpt.domain :
действие : сообщение : сообщение в лог файл
где
NN - двухбуквенный код континента
действие - действие, применяемое к письму
сообщение - ответ SMTP клиенту (может отсутствовать)
сообщение в лог файл - сообщение в лог файл MTA (может отсутствовать)
информация по двухбуквенным кодам континентов:
https://dev.maxmind.com/geoip/legacy/web-services/
возможные значения для действия такие же, как при проверке кобминации
хоста отправителя и адресов отправителя и получателя (переменная
confCHECK_ACCESS_COMPAT_RELAY).
ответ SMTP клиенту будет использован в случае указания reject/deny или
defer в качестве действия. если текст ответа не будет указан, будет
использован текст сообщения об ошибке по умолчанию.
если действие не будет указано, будет использоваться действие,
указанное в переменной confCHECK_ACCESS_COMPAT_RELAY_CONTINENT
пример:
CONTINENT_AS<@>sender на ukr.net<@>recipient на local.domain.tld : ok
\N^CONTINENT_AS<@>.+ на ukr.net<@>.+ на local\.domain\.tld$\N : warn pause=10
greylist=10 : Message with ukr.net sender address domain from Asia
\N^CONTINENT_AS<@>.+ на ukr.net<@>$\N : deny : Access denied : Message with
ukr.net sender address domain from Asia
в примере ко всем письмам из домена ukr.net, отправленным из Азии для
пользователей домена local.domain.tld, будут применены пауза и "серые
списки".
прием писем из домена ukr.net, отправленных из Ази для пользователей
других доменов, будет отвергнут.
исключение сделано для пары адресов отправителя и получателя
sender на ukr.net и recipient на local.domain.tld
механизм определения континента по IP адресу можно указать в переменной
confIP2CONTINENT_BACKEND.
при SQLITE в confCHECK_ACCESS_COMPAT_RELAY_BACKEND:
запрос к БД SQLite:
define(`confCHECK_ACCESS_COMPAT_RELAY_CONTINENT_SQLITE_QUERY', `SELECT
action FROM access_list WHERE
continent="$acl_c_sender_host_address_continent" AND
recipient="${quote_sqlite:$local_part@$domain}" AND
sender="${quote_sqlite:$sender_address}"')dnl
второй запрос к БД SQLite (опциональный):
define(`confCHECK_ACCESS_COMPAT_RELAY_CONTINENT_SQLITE_QUERY2',>`SELECT
action FROM access_list WHERE
continent="$acl_c_sender_host_address_continent" AND
sender="${quote_sqlite:$sender_address}"')dnl
при MYSQL в confCHECK_ACCESS_COMPAT_RELAY_BACKEND:
запрос к БД MySQL:
define(`confCHECK_ACCESS_COMPAT_RELAY_CONTINENT_MYSQL_QUERY',<->`SELECT
action FROM access_list WHERE
continent="$acl_c_sender_host_address_continent" AND
recipient="${quote_mysql:$local_part@$domain}" AND
sender="${quote_mysql:$sender_address}"')dnl
второй запрос к БД MySQL (опциональный):
define(`confCHECK_ACCESS_COMPAT_RELAY_CONTINENT_MYSQL_QUERY2',<>`SELECT
action FROM access_list WHERE
continent="$acl_c_sender_host_address_continent" AND
sender="${quote_mysql:$sender_address}"')dnl
также реализовано определение страны и континента хоста отправителя по
базе GeoIP2 с использованием библиотеке libmaxminddb.
интеграция произведена с помощью новой dlfunc:
https://mta.org.ua/exim-4.88-conf/dlfunc/maxminddb/
механизмы, используемые для определения страны и континента хоста
отправителя, можно указать в соответствующих переменных
confIP2COUNTRY_BACKEND и confIP2CONTINENT_BACKEND.
механизм определения страны по IP адресу:
DLFUNC - определение страны по IP адресу с помощью dlfunc
ip2country при включенной поддержке IPv6 используется
dlfunc geoipv6
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить GeoIP library
DLFUNC_GEOIP - синоним DLFUNC
DLFUNC_GEOIPV6 - определение страны по IP адресу с помощью dlfunc
geoipv6
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить GeoIP library
DLFUNC_GEOIP2 - определение страны по IP адресу с помощью dlfunc
maxminddb
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить libmaminddb library
DNSBL - определение страны по IP адресу с помощю DNSBL
zz.countries.nerd.dk
WIP-API - определение страны по WIPMANIA API
(http://www.wipmania.com/ru/api/)
PTRTLD - определение страны по IP адресу с на основании TLD из
PTR записи
define(`confIP2COUNTRY_BACKEND', `DNSBL PTRTLD')dnl
в качестве значения confIP2COUNTRY_BACKEND можно указывать несколько
механизмов.
т. к. dlfunc maxminddb является прототипом (сейчас обрабатываются только
результаты с type MMDB_DATA_TYPE_UTF8_STRING), вполне разумно
использовать сразу две dlfunc. т. е. указать в confIP2COUNTRY_BACKEND и
DLFUNC_GEOIP2 и DLFUNC_GEOIP. при этом первой будет использовать dlfunc
maxminddb, и только потом (в случае, если результат будет
неопределённым) dlfunc ip2country или geoip6 (в зависимости от того,
включена ли поддержка IPv6).
в случае использования DLFUNC_GEOIP2 в качестве значения
confIP2COUNTRY_BACKEND путь в файлу данных:
define(`confIP2COUNTRY_MAXMINDDB_FILE',
`/usr/local/share/GeoIP/GeoLite2-Country.mmdb')dnl
можно использовать как базу GeoLite2-Country.mmdb, так и базу
GeoLite2-City.mmdb
игнорирование ошибок в работе dlfunc (на данный момент времени
используетс в dlfunc maxminddb):
NO - не игноировать ошибки
YES - игноировать ошибки
define(`confIP2COUNTRY_DEFER_OK', `YES')dnl
в случае возникновения ошибок в работе dlfunc maxminddb (не удалось
прочитать файл базы, не удалось выделить память, не удалось извлечь
данные из результатов запроса) приём письма будет продолжен, а в лог
файл будет выведено сообщение об ошибке.
механизм определения континента по IP адресу
DLFUNC - определение континента по IP адресу с помощью dlfunc
ip2country
при включенной поддержке IPv6 используется dlfunc
geoipv6
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить GeoIP library
DLFUNC_GEOIP - синоним DLFUNC
DLFUNC_GEOIPV6 - определение континента по IP адресу с помощью dlfunc
geoipv6
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить GeoIP library
DLFUNC_GEOIP2 - определение континента по IP адресу с помощью dlfunc
maxminddb
для использования dlfunc необходимо:
собрать exim с EXPAND_DLFUNC
собрать и установить libmaminddb library
define(`confIP2CONTINENT_BACKEND', `DLFUNC_GEOIP')dnl
--
Best wishes
Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
Skype ID: corvax_nb JID: victor на corvax.kiev.ua