Почему я не использую DNSBL. В помощь начинающему постмастеру

Вы системный-администратор компании и перед Вами стоит задача настроить почтовый сервер для компании так, чтобы спама было как можно меньше. Первым делом Вы идете на google и ищете способы решения проблемы спама. Гугл Вам вываливает кучу ссылок на статьи на различных сайтах. Вы переходите по ссылкам и начинаете читать. Готов спорить на что-то не очень ценное, что в первой же статье одним из решений будет использование DNS Blacklists. И Вы, зачарованный словосочетанием blacklist, в надежде на то, что коллективный разум постмастеров планеты уже знает обо всех спамерах, полагаете, что Вам остается только воспользоваться результатами их работы и тут же добавляете в конфиг своего MTA десяток-другой блеклистов. И, казалось бы, вот он счастье… но не тут-то было. Пользователи начинают регулярно жаловаться на недошедшие к ним письма. Вы, конечно же, первым делом спрашиваете от кого было письмо, затем смотрите в логи и гордо сообщаете пользователю: “Ваш отправитель попал в черный список, ничего поделать не могу, проблема на их стороне”. С Вас взятки гладки, поскольку это ведь не Вы, а отправитель попал в черный список, но тем не менее вопрос недоставки честных писем остается не решенным.
Перед тем как бездумно влепить себе в конфиг пару десятков блеклистов, предлагаю вместе подумать о том для чего нужны блеклисты и почему они были созданы.
Для этого обратимся к истории развития интернета. Когда-то давным давно почтовые серверы релеили письма от кого угодно и это никого не огорчало, даже mail.ru когда-то был открытым релеем. Затем появились спамеры, которые стали пользоваться открытыми релеями для рассылки спама. И началась эпоха борьбы с открытыми релеями. Конфигурационные файлы всех MTA стали по-умолчанию содержать опции, которые не позволяют МТА использовать как открытый релей. Внимательные постмастеры вовремя замечали огрехи в настройке своих серверов и исправляли их. Тем не менее проблему открытых релеев это не решило. Оставалось еще много нерадивых постмастеров, которые то ли не замечали ошибок в конфигурации, то ли не хотели исправлять, то ли не знали как. Нужен был инструмент, который заставит их шевелиться. Таким инструментом стал первый (поправьте, если ошибаюсь) блеклист – ordb.org. И результат был достигнут – он заставил нерадивых постмастеров шевелиться и исправлять ошибки в конфигурации своих серверов (а как же не шевелиться, если никто почту от тебя не принимает). ordb.org сделал свое дело – убрал из сети остававшиеся открытые релеи и 1.01.2007 почил с миром, прекратив свою работу.
Вместе с умиранием открытых релеев спамеры умирать не желали и от использования открытых релеев они перешли к использованию вредосного ПО. По заказу спамеров пишутся вирусы, которые распространяются по сети, заражают обычные домашние и офисные рабочие станции. В дальнейшем я буду называть зараженные компьютеры термином “зомби”. На сегодняшний день технология рассылки спама следующая: зомби связывается со своим хозяином, получает от него текст сообщения, список почтовых адресов и начинает рассылку сообщений по полученным адресам.
Теперь снова вернемся к тем временам, когда ordb.org был мощным инструментом в борьбе со спамом. Технология DNSBL приобрела такую популярность, что различных блеклистов появилось вагон и маленькая тележка. При переходе спамеров с открытых релеев на ботнеты блеклисты старались идти в ногу со временем. Они заносили в свои базы данных целые подсети, разделяя их по различным признакам. К примеру была попытка создать блеклист включающий в себя подсети провайдеров, которые предназначены для выделения домашним пользователям и малым офисам. Считалось, что такие пользователи не должны отправлять почту напрямую, а использовать релеи провайдера. По факту же эта задумка провалилась по двум причинам: во-первых невозможно отследить абсолютно все клиентские сети абсолютно всех провайдеров, во-вторых сейчас огромное множество малых офисов, подключенных на бюджетные тарифные планы и нельзя их обделять в желании использовать свой личный почтовый сервер, если сообщения от него идут “чистые”.
На сегодняшний день ситуация сложилась таким образом, что в блеклисты нередко попадают честные релеи. Это накладывает свои ограничения на использование блеклистов – их нельзя использовать по привычному ранее принципу: “Есть запись в блеклисте – сообщение однозначно отклоняется”. Блеклисты можно использовать только при взвешенной оценке всех факторов. Пример такой реализации можно наблюдать в фильтре Spamassassin: если отправитель присутствует в блеклисте, то сообщению начисляется N баллов, по результату всех тестов баллы суммируются и выносится общее решение о “спамности” письма. Т.е. в этом случае мы наблюдаем не однозначное отклонение сообщения на основания ответа блеклиста, а всего лишь некоторое увеличение ВЕРОЯТНОСТИ его спамности. На сегодня это единственный разумный подход к использованию блеклистов.
Ну вот раскритиковал блеклисты, а как же теперь со спамом бороться? Ведь хочется отсекать спам еще на стадии соединения, чтобы сэкономить ресурсы системы и не нагружать фильтр, тот же spamassassin, к примеру, лишними сообщениями. Об этом ниже.
Сообщения, пришедшие из ботнетов имеют одну или несколько перечисленных характерных особенностей:
1. У хоста-отправителя нет обратной DNS-записи.
2. Синтаксис представления HELO не верный.
3. В HELO хост-отправитель представляется не полным именем.
4. В HELO хост-отправитель представляется именем, для которого нет A записи.
5. Хост-отправитель не повторяет попытку доставки собщения в ответ на ошибку 4хх
6. Сообщение имеет в поле From несуществующий домен.
7. Сообщение имеет в поле From существующий домен, но несуществующий адрес.
Я не буду подробно расписывать что означает каждый из пунктов, а всего лишь приведу часть конфигурационного файла postfix со ссылкой в скобках на пункты характеристик. Скобки, естественно, нужно убрать перед использованием опций в своем конфиге.
unverified_recipient_reject_code=550
smtpd_helo_required = yessmtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client [1]smtpd_helo_restrictions =
permit_mynetworks,
reject_invalid_hostname, [2]
reject_non_fqdn_hostname, [3]
reject_unknown_hostname [4]smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain [6]smtpd_recipient_restrictions =
permit_mynetworks,
reject_non_fqdn_recipient,
reject_unauth_pipelining,
reject_unauth_destination,
reject_unlisted_recipient,
check_policy_service inet:127.0.0.1:10023 [5]
По п.5. стоит сделать замечание, что использование данной особенности называется Greylisting. Более подробную информацию по Greylisting’у можно прочитать в википедии. В данном случае для грейлистинга рекомендуется пакет postgrey.
Этих опций вполне достаточно для того, чтобы число спам-писем у Вас уменьшилось с нескольких десятков до 1-2 в день. При условии использования дополнительных контент-фильтров (DSPAM или SpamAssassin) количество спама уменьшится до 1-2 писем в месяц.
P.S. Текст написан для начинающих постмастеров, чтобы предостеречь их от ошибок.
Дополнительные записи:

10 комментариев
Да, мне недавно ткнули пачку блеклистов с форму сисадминского забугрового какого-то, AdminZone кажется, и попросили вкрутить блокирование отсулки писем И РЕГИСТРАЦИИ пользователей с именами который под блеклисты подпадают. Поглядел я туда, увидел беглям взглядом mail.ru, yandex.ru и пр. … в общем-то действительно надо действовать с умом в этом случае.
Спасибо, разложили все по полочкам. А то, читал множество примеров конфигурационных файлов. Все пишут правильно, но такая каша в голове из разных опций образовалась.
Хорошая статья… У а автора от всех почта приходила? Не все серваки в нете соответсвуют rfc…
Кто мешает на каждый фильтр держать список исключений и добавлять туда при необходимости?
Например вот так для helo:
smtpd_helo_restrictions =
permit_mynetworks,
check_helo_access hash:/usr/local/etc/postfix/helo_access,
reject_invalid_hostname,
reject_unknown_hostname,
reject_non_fqdn_hostname
Бесспорно. Но это при условии, что вы постоянно следите за почтовым сервером, а если надо сделать проект и отдать под ключ? И что бы тебя вспоминали добрым словом, что вся почта приходит сразу)) А если у тебя 100 почтовых доменов? Не упаришься исключения вносить? Нужно всё же золотую середину между rfc, dnsbl, и спам-фильтрами.
И для каждого клиента будет своё решение.
Да, так и есть. Только вот криво настроенный сервер – это прямая ошибка администратора в отличие от блеклистов, которые наполняются не пойми по какому принципу. Кроме того, если администратор кривонастроенного сервера увидит, что его сообщения не принимаются из-за, скажем, того же кривого EHLO, то исправить проблему – дело 3 минут, в отличие от тех же блеклистов, где политика делистинга не менее идиотская, чем политика наполнения.
Ну а баланс каждый строит под себя. Волшебной таблетки тут нет.
Воланд, а чего и правда добился 1-2 писем в день только этими правилами? :) Не верю! Ну с DSPAM еще может быть…
PS. Тут от RIPE письма не пройдут например… :) Они используют несуществующий адрес отправителя… вернее unverified_sender
1) Да, правда.
2) Пользуй check_client_***** для списков исключений.
reject_unverified_sender очень забавно себя ведёт если на отправляющем сервере тоже включён greylist. Можете сами проверить.
Да, правда, ошибка вкралась. Спасибо :)
Поправил пост