Пока я не стал фрилансером, я не знал, что такое спам. У меня хватало
ума не светить свой email где попало, а для регистраций на сайтах
использовать временные email. И я привык к тому, что вся почта
у меня бегает очень быстро, письма никогда не теряются, и никто не
жалуется что мой сервер отказался принимать его письмо. Став
фрилансером, я оказался вынужден опубликовать свой email, причём на
многих сайтах — ведь новые клиенты должны иметь возможность легко со
мной связаться. И спам полился… сначала небольшим ручейком, но в
последнее время он уже напоминает скорее полноводную реку, чем ручеёк.
Использование традиционных спам-фильтров (RBL, GMail, SpamAssassin,
etc.) меня не устроило: все они время от времени ошибаются, и принимают
за спам нормальные письма. И не важно, они их давят, возвращают
отправителю, или складируют в отдельную папку чтобы я их периодически
просматривал — в любом случае есть ненулевая вероятность потерять важное письмо.
Несколько лет проблема решалась с помощью утилитки deliver,
которую я написал для удобства фильтрации почты. Perl-программистам
использующим qmail она должна понравится: фактически фильтрация
осуществляется с помощью регулярных выражений Perl, удобно применяемых
к нужным частям письма (фильтр — это Perl-скрипт :)). Я глазками
анализировал получаемый спам, и аккуратно писал под него регулярные
выражения, которые 100% не совпали бы с нормальными письмами.
Но в последнее время спам адаптируется к моим интересам, и маскируется
под IT-тематику. И хорошо, собака, маскируется — настолько хорошо, что
я уже не могу уверенно написать regexp, который даже случайно не
совпадёт с нормальным письмом. (Заметьте, я чётко
отличить конкретный спам ручным regexp-ом, фактически даже
специализированным Perl-скриптом, уже не в состоянии, как же это может
сделать SpamAssassin сотоварищи?)
Пришлось искать альтернативный подход к этой проблеме… и он был найден, это greylisting!
К сожалению, найти реализацию greylisting для qmail оказалось не
просто. В принципе их есть несколько штук, но они либо требуют патчить
qmail, либо написаны на коленке, либо сильно перегружены дополнительной
функциональностью. А я это сильно не люблю, предпочитаю простой,
надёжный и безопасный софт — например такой, какой пишет D. J. Bernstein.
В результате я сначала поставил qgreylistrbl — потестировать эффективность greylisting. А потом, восхищённый результатом работы (но не реализацией) qgreylistrbl, написал greysmtpd.
Установить greysmtpd очень просто — это штука из тех, которые «воткнул
и забыл», даже настраивать ничего не нужно. Большой плюс этого подхода
в том, что спама моментально станет примерно на 85% меньше, и при этом
вы гарантированно не потеряете нормальное письмо. А если (когда)
спамеры адаптируются к greylisting, то эффективность его упадёт, но
вреда от него по-прежнему не будет. В общем, это штука из разряда must
have!
Надо отметить, что greysmtpd оптимизирован для того, чтобы свести
задержки при доставке нормальной почты к минимуму — в абсолютном
большинстве случаев нормальная почта будет доставляться вообще без
задержек, как будто greysmtpd вообще не используется. Достигается это
использованием RBL и встроенного определителя динамических хостов (DSL,
dial-up, etc.): если IP отправителя почты не заблокирован в RBL и домен
отправителя (PTR) не похож на динамический хост — почта от него
пропускается сразу, без использования greylisting. (Да,
я использую RBL, но не для блокирования почты, а всего лишь для
форсирования greylisting. Ибо все мы, время от времени, попадаем в RBL.) В общем, получается эдакий «мягкий greylisting» — минимум помех нормальной работе при отличном проценте блокируемого спама.
Сам скрипт я постарался сделать надёжным, простым и эффективным.
Например, если в скрипте возникает какая-либо ошибка, он просто
пропускает текущее письмо, как если бы greysmtpd вообще небыл
установлен. Реализация SMTP слизана один-в-один с djb'шной утилиты rblsmtpd.
А для эффективности DNS-запросы выполняются асинхронно. Ну и плюс все
возможные оптимизации, позволяющие вообще избежать запросов в RBL, т.
к. RBL штука тормознутая. Размер скрипта — 200 строк, 5.5KB.
Лицензия, как обычно, public domain.
Скачать: greysmtpd, deliver.
Критика и code review приветствуются. :)
Источник: http://habrahabr.ru/blogs/linux/41430/
Комментарии
несколько лет стоял postgrey, но спам валится просто беспрепятственно. так что не панацея.
вообще правильная настройка SpamAssassin с включенным алгоритмом Bayes, периодической проверкой байесовской базы, постоянного "обучения"системы путём скармливания ей ошибочных писем и блэк-листов на подобии RBL, DSBL даёт отличные результаты, примерно 3-5 ошибок (пропуск СПАМа) на 10 тысяч нормальных писем.
Отправить комментарий