Почему я не использую 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. Текст написан для начинающих постмастеров, чтобы предостеречь их от ошибок.
Дополнительные записи:

15 комментариев
Да, мне недавно ткнули пачку блеклистов с форму сисадминского забугрового какого-то, 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. Можете сами проверить.
Да, правда, ошибка вкралась. Спасибо :)
Поправил пост
1. У хоста-отправителя нет обратной DNS-записи.
Далеко не все провайдеры прописывают в обратную зону. Считаю проверку по обратной зоне более вредной, чем использование RBL. А вот Greylist – действительно вещь. Правда на место postgrey пришел sqlgrey. Видимо статья писалась давно.
Лично я пользую проверку rfc, чуть более расширенную, чем в примере, sqlgrey, большой список RBL + spamassassin. В месяц получаю от 1 до 7 писем спама. Кому интересно статистика одного из моих почтовых серверов за 4 недели (с 22.05.2011 по 16.06.2011):
Greylisted – 41676
Maibox does not exist – 9430
Blocked (in reply to RCPT to command) – 4083
Blocked whois.ripn.net – 84
7 RBL листов – 1952
При этом ложных срабатываний 0, включая корректную доставку нужных мне рассылок. Мои листы проверены годами работы.
Вам решать нужны ли RBL или нет, но для меня лишних 1952 письма в месяц против максимум 7, это очень много!
1. Всегда можно написать письмо владельцу блока адресов, чтобы он добавил обратную запись. Все такие просьбы выполняют. В этом случае у того чьи письма не доходят есть шанс исправить ситуацию, повлиять на ход событий. В случае с блеклистами – право решения передается третьей стороне и отправитель в случае ошибки ну ничего не сможет сделать.
2. Я рад что у Вас пришел sqlgrey и Вы еще не испытывали проблем от этого :) При высоких нагрузках ситуация несколько иная :)
3. Спамхаус, наверняка, среди Ваших рблов, да? Который на RIPE говорит, что у него серьезные проблемы со спамом:
Как можно этим идиотам доверить решение о приеме почты или неприеме…
4. Статистика реджектов за сутки:
# cat /var/log/maillog|grep -c NOQUEUE
616762
Хотите о чем-то поспорить? :)
1. К сожалению далеко не все такие просьбы выполняют. Я могу понять, когда 4 из 5-ти крупных провайдеров отказали мне в обратной зоне для домашнего использования. Но такое явление бывает и в корп. секторе у различных субпровайдеров, особенно когда нет альтернативных провайдеров в зданиях, на территориях заводов. Но дело даже не в этом. Проверка обратной зоны лишает совершенно «законопослушные» сервера отправлять вам почту даже если их админы не имеют или не хотят сделать заявку на запись в обратную зону. Будет ли легче менеджеру или бухгалтеру, если его сообщение от клиента было порезано правилом проверки обратной зоны, а не RBL?
Кроме того, как я уже и говорил выше и без этой проверки все фильтруется прекрасно.
2. Может быть. У меня проблем не было. Как, впрочем, и с postgrey.
3. Дело не в спамхаусе, а в том, что можно подобрать листы с адекватной политикой. Можете комбинировать и осуществлять фильтрацию по собственному предпочтению. Например оставить листы только вирусных рассылок. Вы же, насколько, я понял говорите о том, что RBL – это зло в принципе.
4. Я не хочу ни о чем спорить. Я просто выразил мнение о том, что RBL, как дополнительное средство при здравом подходе – эффективная вещь. Ну и свое несогласие по обратной зоне попытался сформулировать. Ни больше ни меньше.
В дополнение. Запись в обратной зоне не гарантирует, что с этого хоста не будут спамить или рассылать вирусы.
Не передергивайте. Я не говорил что обратная запись что-то гарантирует. Если бы был какой-то однозначный признак, который гарантировал распознавание спама или не спама – проблемы не было бы в принципе. И, как следствие, этого постинга тоже.