Я использовал Отправить почту вместе с milter-greylist много лет на нескольких сайтах.
milter-greylist поддерживает определение правил серых списков на основе поиска в базе данных GeoIP. Это очень удобно для компаний, которые не ведут бизнес на международном уровне. Практически весь спам рассылается с внешних IP-адресов. Не имеет значения, если легальная (любительская) электронная почта с иностранных адресов немного задерживается. Местная электронная почта должна приходить без задержек, поэтому для некоторых кодов стран «серые» списки пропускаются. Также, если запись SPF совпадает или IP-адрес находится в белом списке, серый список пропускается. Это очень просто реализовать в greylist.conf с крючком milter в sendmail.cf. Это также хорошо для ресурсов почтового сервера, потому что большая часть спама удаляется еще до того, как он попадает на сервер, и, следовательно, нагрузка на систему, вызванная спамассасин и / или dspam на основе решений фильтрации дальше по пути доставки намного ниже.
Теперь к настоящему вопросу:
Как я могу реализовать аналогичные (т.е. основанные на GeoIP) серые списки с помощью Exim?
На меня возложена новая ответственность - позаботиться об еще одном почтовом сервере, который запускается. Exim и получает большой объем спама. Мне не хочется заново внедрять их систему доставки электронной почты с нуля, но мне определенно нужно что-то делать с нагрузкой, вызванной их объемами спама. К сожалению Exim похоже, нет интерфейса milter. Также мне не удалось найти решения для серых списков с поддержкой GeoIP для Exim. Я полный новичок в Exim (я могу все делать с макросами sendmail.cf и sendmail m4).
Я был бы счастлив, если бы эта функция была возможна с использованием синтаксиса файла конфигурации exim. В этом случае я бы постарался изучить его и, возможно, начать использовать exim на других сайтах.
Я отвечаю на свой вопрос теперь, когда у меня есть решение, которое мне нравится.
Сам по себе серый список может быть реализован исключительно с помощью списков контроля доступа eximʻa, или внешний помощник по серому списку может быть подключен к ACL. Есть несколько подходов к этому, которые описаны в другом месте.
Серые списки обычно реализуются в списках управления доступом, и поэтому легко добавить некоторый поиск внешнего IP-адреса в ACL для управления поведением серых списков (например, чтобы пропустить серые списки в соответствии с поиском кода страны).
Есть несколько альтернатив для получения кода страны:
dlfunc
библиотека, которая реализует поиск GeoIP в ACL.Я лично выбрал последний вариант, так как он наиболее эффективен и не зависит от внешних ресурсов. Я реализовал новый dlfunc
Библиотека для этой цели, поскольку ни одна из нескольких существующих не поддерживает IPv6. Моя реализация с простыми примерами доступна по адресу: http://dist.epipe.com/exim/. При реализации этого я узнал о списках управления доступом Exim и обнаружил, что они чрезвычайно эффективны для реализации любых политик приема почты.
Теперь для некоторых стран легко пропустить серые списки, добавив правило ACL перед правилами серых списков:
warn set acl_c_geoip_country_code = \
${dlfunc{/usr/local/lib/exim4/exim-geoipv6-dlfunc.so}\
{geoip_country_code}{$sender_host_address}}
accept condition = ${if inlist{$acl_c_geoip_country_code}{FI:SE:EE}}
Версии exim старше 4.77 не имеют inlist{
синтаксис. Того же можно добиться, изменив второе правило следующим образом:
accept condition = ${if forany{FI:SE:EE}{eq{$item}{$acl_c_geoip_country_code}}}
Это помогает лишь немного, но есть сервисы GeoIP, которые можно запрашивать через DNS (например, DNSBL). Может быть, вы сможете использовать его как основу для принятия решений на основе результата.
См. Например http://www.netop.org/services/ip-geolocation
Безусловно, лучший способ управлять спамом - это байесовская фильтрация. Хотя вы можете получить временные преимущества, применяя другие подходы до применения байесовских фильтров, успех байесовской фильтрации зависит от наличия большого объема спама и хамов для моделирования - поэтому, если вы начнете отклонять электронные письма на основе IP-адреса, вы потеряете в долгосрочной перспективе. OTOH должна иметь возможность пометить сообщение, а не просто его отклонить.
SPF и RBL также являются хорошо зарекомендовавшими себя способами предотвращения спама. И поддерживается spamassassin (наряду с байесовской фильтрацией и другими).
Смоделировали ли вы свои данные, чтобы увидеть, улучшит ли добавление поиска страны обнаружение спама? По сравнению с хорошо настроенной установкой spamassassin?
Если вы должны пойти по этому маршруту ...
Написать milter легко, но IIRC, Exim не поддерживает milter.
Было бы очень сложно отобразить все допустимые IP-адреса в качестве ACL Exim.
Таким образом, наиболее практичным способом реализации этого будет использование MDA, который поддерживает фильтры внедрения заголовков (например, procmail), которые затем передаются в spamassassin.