ORF –  достаточно лёгкий антиспам, который позволяет, не сильно загружая систему, хорошо прореживать трафик нежелательной корреспонденции. Он имеет замечательный фильтр, название которого я вынес в заголовок – HELO Domain Blacklist.

Простейшая smtp-сессия выглядит следующим образом:

1 220 my.server1.name Microsoft ESMTP MAIL Service ready
2 EHLO remote.server2.name
3 250 my.server1.name Hello [2.2.2.2]
4 MAIL FROM:user@remote.server2.name
5 250 2.1.0 Sender OK
6 RCPT TO:user@my.server1.name
7 250 2.1.5 Recipient OK

Фактически, уже на втором шаге мы имеем информацию по серверу отправителю, на основании которой мы можем делать заключение – хотим мы принимать от него сообщения или нет. Для этого мы можем использовать либо базы DNSBL, которые содержат адреса нехороших серверов, либо на основе каких-то правил самостоятельно анализировать имя сервера, который открыл с нами smtp-сессию. Фильтр HELO Domain Blacklist в ORF как раз и позволяет сформулировать такие правила и на основе их выполнения сбрасывать smtp-сессию, либо продолжать её (пометив письмо).

Фильтр содержит набор предопределённых условий:

  • Blacklist if the HELO/EHLO domain… is malformed – помечать в случае использования “неправильного” имени домена в HELO/EHLO
  • Blacklist if the HELO/EHLO domain… is the same as the recipient domain – помечать, если домен внешнего сервера отправителя совпадает с доменом сервера получателя
  • Blacklist if the HELO/EHLO domain… is not an FQDN – помечать, если в HELO/EHLO содержится не FQDN-имя

И набор условий, которые заданы пользователем (User-Defined HELO domain blacklist). Я использовал следующие регэкспы:

  1. .*(d{1,3})D(d{1,3})D(d{1,3}).*..*$
  2. .*(-|.|^)(access|adsl|athedsl|broadband|cable|catv|chello|client|clients|cpe|dhcp|dial|dialup|dsl|dyn|dynamic|dynamicIP|mod em|modems|node|pool|pools|ppp|pppd|pppoe|pppool|range|static|staticIP|user|xdsl|0x[0-9abcdef]{8})(-|.|d).*..*$
  3. .*(d{7}).*..*..*$
  4. .*(.|^)(home.nl|shawcable.net|fallback.pochta.ru|tpnet.pl|net.pl|net.il|pppool.de|chello.DD|orange.DD|ne.jp|rr.com| mundo-r.com|volia.net|free.fr)$
  5. .*(?<!.ad|.ae|.al|.am|.at|.au|.az|.ba|.be|.bg|.biz|.bs|.by|.ca|.ch|.cn|.com|.cy|.cz|.de|.dk|.dm|. do|.dz|.edu|.ee|.eg|.er|.es|.et|.fi|.fr|.ge|.gi|.gov|.gr|.hk|.hr|.ht|.hu|.ie|.il|.in|.is|.it|.jm| .jo|.kg|.kr|.kw|.kz|.li|.lt|.lu|.lv|.ma|.mc|.md|.mn|.mt|.mv|.my|.net|.nl|.no|.org|.pt|.qa|.ro|.r u|.sa|.se|.sg|.si|.sk|.su|.sy|.sz|.tj|.tm|.tr|.tw|.ua|.uk|.us|.uz|.va|.ye|.yu)$
  6. .*[^a-z0-9-.].*
  7. .*..*..*..*..*..*

Подробнее:

  1. Комбинация из “(1-2-3 значное число)(не цифра)(1-2-3 значное число)(не цифра)(1-2-3 значное число)”. Если имя сервера попадает под это условие – то потенциально оно сформировано на базе ip-адреса и, скорее всего, сервер с таким именем будет слать спам.
  2. В имени отправляющего сервера содержится любое слово из access, adsl, athedsl, broadband, cable, catv, chello, client, clients, cpe, dhcp, dial, dialup, dsl, dyn, dynamic, dynamicIP, modem, modems, node, pool, pools, ppp, pppd, pppoe, pppool, range, static, staticIP, user, xdsl, а также конструкцию, похожую на шестнадцатеричный ip-адрес. То есть сервер отправитель с очень большой вероятностью является клиентом домашних сетей, либо некорпоративным клиентом интернет-провайдеров. То есть с очень большой вероятностью не должен слать почту на внешние smtp-серверы. И скорее всего он будет рассылать спам.
  3. В имени отправляющего сервера содержится конструкция из семи цифр подряд в имени хоста (не домена). То есть отправитель умудрился скорее всего засунуть в имя сервера свой номер телефона, что вроде как запрещено по RFC. Поэтому сервер скорее всего рассылает спам.
  4. Список доменов, с которых не хотим принимать почту.
  5. Список доменов первого уровня, с которых хотим получать почту. Фактически регэксп содержит отрицание списка, то есть если сервер отправителя не содержится в одном из этих доменов, то он потенциальный спамер.
  6. В имени сервера отправителя содержатся символы, которые не входят в набор разрешённых (латинские буквы, цифры, знаки “-” и “.”). Сервер – потенциальный спамер.
  7. Домены слишком глубокой вложенности (host.subdomain1.subdomain2.subdomain3.subdomain4.subdomain5.com).

Регэкспы не мои.

Какие-то из них можно применять, какие-то нет. Категорически рекомендую их перенастраивать под себя. Очень полезны – первый и второй. Скоро станет бесполезен шестой (когда массово можно будет использовать нелатинские символы в именах почтовых серверов). Когда я использовал ORF, фильтрация по HELO/EHLO отбивала примерно 45% входящего smtp-трафика, примерно столько же приходилось на DNSBL. Остальные механизмы давали единичные срабатывания.