Каждый день в мой почтовый ящик (естественно электронный) приходит несколько писем (в худшие дни - несколько десятков) нежелательной корреспонденции - спама. Если бы я был обычным пользователем, то найти подходящий метод борьбы с ним не составляло бы труда, но я не обычный пользователь, я администратор довольно немаленькой сети.
Ежедневно на мой почтовый сервер приходит не одна сотня нежелательных писем, создавая большой паразитный трафик и забивая почтовые ящики пользователей (особенно тех, кто пишет свой служебный e-mail на каждом встречном форуме и в любой подвернувшейся онлайн-анкете). В этом случае спам-фильры необходимо устанавливать прямо на почтовом сервере организации.
Для реализации этого мы воспользуемся возможностями почтового сервера Sendmail входящего в поставку FreeBSD и Linux по умолчанию и поэтому наиболее часто используемого (порядка 75% от общего числа почтовых серверов обслуживаются с помошью SendMail).
База доступа Sendmail
Начиная с Sendmail 8.9, в настройках по умолчанию ретрансляция писем через почтовый сервер запрещена для любых узлов и перед началом использования нового почтового сервера необходимо обязательно установить, кто может осуществлять ретрансляцию почты через него. Обычно это только компьютеры локальной сети и узлы находящиеся в Вашем домене.
Самый простой способ сделать это - использовать базу доступа, которая находится в файле /etc/mail/access/. С помощью базы доступа можно ограничить ретрансляцию почты через свой сервер. Она должна содержать список почтовых адресов, доменов и ip-адресов узлов которым разрешено или, наоборот, запрещено отправлять почту, используя данный сервер.
При установке Sendmail вместе с операционной системой (как это происходит обычно с FreeBSD) конфигурационный файл sendmail.cf обычно уже содержит необходимые команды для использования базы доступа, но иногда приходится включать эту опцию вручную.
Для этого добавьте команду FEATURE(access_db)dnl в ваш файл sendmail.mc и с помошью препроцессора m4 создайте новый конфигурационный файл sendmail.cf
m4 ./sendmail.mc > sendmail.cf
А затем скопируйте новый файл конфигурации в каталог /etc/mail, не забыв сохранить (на всякий случай) предыдущий вариант.
Файл базы доступа (/etc/mail/access) состоит из строк содержащих пары значений, разделенных пробелами или табуляцией. Первое значение должно являться электронным адресом, именем домена или ip-адреcом (можно задавать целые сети), второе - кодовым обозначением действия. Действие может быть следующим:
REJECT - соединение с передающим узлом немедленно разрывается.
DISCARD - сервер примет сообщение, и "проглотит" его, сообщив об успешной доставке отправителю, но не доставит письмо.)
OK - разрешает доступ (обычно используется для переопределения других условий)
RELAY - разрешает пересылку почты
Код ошибки и ее описание: аналогично REJECT, но позволяет создавать собственные сообщения об ошибках.
Типовой файл access обычно выгдядит так:
# наша локальная сеть - адреса 192.168.x.x
192.168 RELAY
# сервера, находящиеся в вашем домене
domain.ru RELAY
# некто, кому разрешено пользоваться нашим
# почтовым сервисом откуда угодно
masha@mail.ru RELAY
# домены спаммеров
cyberspammer.com 550 Spam
listbuilder.com 550 Spam
spamer.com 550 Spam
#чья-то сеть из которой активно рассылают спам.
195.161.xxx.xxx 550 Spam
# нехорошо закрывать весь mail.ru, поэтому приходится
# закрывать отдельные адреса
spam@mail.ru 550 Spam
Вместо сообщения <550 Spam> можно написать REJECT, поведение SendMail от этого не изменится, но подробные сообщения об ошибках могут быть полезными при анализе лог-файлов Sendmail (/var/log/maillog).
Для ускорения обработки писем SendMail использует хеширование базы доступа в формате BerkeleyDB, которое производится с помошью утилиты makemap:
Теперь почту Вашим пользователям смогут посылать все, кроме тех доменов или ip-адресов которые Вы особо укажете. К сожалению этот способ эффективен лишь для предотвращения рассылки спама через Ваш сервер, и для каждого известного Вам спамерского домена или сервера, который отправляет письма Вашим пользователям придется писать свою строку в /etc/mail/access, что довольно трудоемко.
Блокировка <Черных> списков
Для решения проблемы ведения списков серверов, с которых рассылается спам в SendMail 8.9 была введена поддержка <списков DNSBL> (DNS-based blacklists). Черные списки так называемых <открытых релеев>, т.е. серверов с помощью которых спамеры могут безнаказанно рассылать миллионы писем поддерживаются различными организациями как на коммерческой основе, так и в свободном доступе. Первая система такого рода была создана Полом Викси и в настоящее время преобразована в коммерческую службу. Стоимость подписки на услуги mail-abuse.org составляет около 1500$ в год, являясь довольно значительной для маленьких компаний. К счастью существуют другие, некоммерческие организации, предоставляющие схожий сервис. Рассмотрим использование подобных сервисов на примере системы Open Realy Database (ordb.org).
В системах основанных на DNSBL ip адреса открытых релеев хранятся в базе DNS сервера в виде записей типа А (Address) в обратном порядке. Например, если сервер имеет ip-адрес 1.2.3.4 то в базе ORDB будет такая запись:
4.3.2.1.relays.ordb.org IN A 127.0.0.2
В данном случае наличие подобной записи указывает на то, что сервер 1.2.3.4 допускает свободную пересылку почты кем угодно и почта с него должна быть заблокирована. Адрес 127.0.0.2 используется лишь в качестве заполнителя (т.к. поле адреса в DNS не может быть пустым).
Для того, чтобы Ваш сервер Sendmail блокировал почту с узлов, ip адреса которых содержаться в в базе данных relays.ordb.org необходимо добавить следующую директиву в Ваш файл конфигурации sendmail.mc:
A затем пересобрать и установить новый файл sendmail.cf
Для SendMail 8.8 и ниже для добавления этой возможности Вам придется вручную редактировать файл sendmail.cf (он располагается в каталоге /etc/mail). Добавьте в процедуру Basic_check_relay (она обозначена заглавной буквой S - SBasic_check_relay) следующие правила:
R$* $: $&{client_addr}
R$-.$-.$-.$- $: > $(host ....relays.ordb.org. $: OK $)
R > OK $: OKSOFAR
R > $+ $#error $@ 5.7.1 $: Rejected - see http://ordb.org/
Обратите внимание, что добавлять эти правила нужно после всех существующих правил в этой процедуре. Определить, где кончаются правила, помещенные в процедуру SBasic_check_relay, можно по по началу следующей процедуры, имя которой обозначено символом <S>, например SLocal_check_mail (обычно именно Local_check_mail идет сразу после Basic_check_relay, если конечно Sendmail не настроен как-нибудь очень нестандартно).
После того, как будет готов новый файл конфигурации, вам необходимо перезапустить SendMail:
killall -HUP sendmail
В настоящее время получил распространение еще один способ рассылки спама, использующий не открытые почтовые сервера, а прямую доставку на сервер получателя (эта возможность есть в таких программах массовой рассылки, как Advanced Direct Remailer, Advanced Mass Sender). Такая рассылка обычно производится с использованием анонимного Dial-Up подключения, спамер покупает карточку доступа в интернет, рассылает множество писем и бесследно исчезает. Для борьбы с такого рода рассылками необходимо блокировать почту приходящую с адресов, принадлежащих непосредственно модемным пулам провайдеров доступа. Такого рода сервис в российском сегменте поддерживает проект Dial-Up Users List. Провайдеры, поддерживающие эту инициативу вносят в общую базу ip-адреса, выдаваемые при подключении к их модемным пулам.
Настройка Вашего сервера для использования сервиса dul производится аналогично ordb (что собственно и не удивительно, т.к. оба используют один и тот-же механизм dnsbl), в файл sendmail.mc добавьте:
Для SendMail 8.10 и выше:
FEATURE(`dnsbl', `dul.ru')dnl
Для SendMail 8.9:
FEATURE(`rbl', `dul.ru')dnl
Существует еще большое число подобных сервисов, о многих из них рассказано на сайте spamhaus.org, также там поддерживается система под названием The Spamhaus Block List.
Из Российских систем блокирования спама интересна DRBL - Distributed Real-time Blocking List, она использует не центральный сервер, а распределенную сеть блокирующих серверов, в которую могут вступить все желающие. К сожалению, система довольно сложна в установке и настройке.
Вспомогательные меры
Кроме подобных <радикальных> методов борьбы может быть полезным применение вспомогательных средств, таких как блокировка определенных почтовых программ и блокировка писем, не содержащих поля To: или содержащих в нем значение (Sendmail вставляет это значение, если в заголовках принимаемого письма нет поля To).
Блокировку писем рассылаемых с помощью программ массовой рассылки можно производить при помощи заголовка X-Mailer. Обычные письма содержат в этом заголовке название почтовой программы отправителя. Например или . Многие программы массовой рассылки позволяют произвольно задавать этот заголовок или просто не указывают его. Тем не менее в настройках по умолчанию у многих программ такой заголовок присутствует и многие начинающие спамеры его не меняют. Так что шанс выловить спам с помошью подобных фильтров существует. Как показывает практика обычно ловится Advanced Mass Sender.
Для фильтрации известных программ массовой рассылки на основании заголовка X-Mailer включите в ваш файл sendmail.mc в раздел LOCAL_RULES следующие правила:
# Настоящий Outlook имеет версию вида: 5.0.23123244 RMicrosoft Outlook Express 5.0 $#error $@ 5.7.1 $: "554 Spam (Microsoft Outlook Express 5.0)" RVersion 5.0 $#error $@ 5.7.1 $: "554 Spam (Version 5.0)"
# Заблокируем все мейлеры с названием только из одного слова:
Rnethack $@ OK
RZ-Mail-SGI $@ OK
RDipost $@ OK
R$- $#error $@ 5.7.1 $: "554 Spam (one-word mailer)"
# Заблокируем письма с пустым заголовком
R$* $: < >
R< > $#error $@ 5.7.1 $: "554 Illegal header (empty header)"
R$* $@ OK
После внесения соответствующих изменений пересоберите свой файл sendmail.cf и установите его. Вы можете обойтись без перекомпиляции конфигурационного файла, просто добавив эти правила в конец самого файла конфигурации - раздел LOCAL_RULES переносится в него при сборке без изменений.
Также можно блокировать письма с пустым заголовком и с пустым или неправильно сформированным полем Message-ID (оно должно быть в формате идентификатор@домен). Скорее всего они отправлены спамерами. Это можно сделать с помощью следующих правил:
Другие методы борьбы со спамом
Существуют еще много различных методов бороться со спамом, используя возможности Вашего сервера Sendmail. Кратко остановлюсь на некоторых из них.
Procmail - это гибкое и мощное средство фильтрации почты. Procmail сопобен фильтровать почту по большому числу правил и может справится и со спамом. Программа SpamBouncer использует возможности Procmail для блокировки писем по определенным правилам, а именно блокируются письма:
Содержащие адреса известных спамеров
Отправленные с хорошо известных спамерских сайтов, доменов и узлов
Отправленные с узлов тех провайдеров, которые зарекомендовали себя нежеланием разбираться с клиентами-спамерами.
Отправленные с использованием известных программ массовой рассылки, применяемых спамерами.
Содержащие строки в заголовке или теле, которые однозначно идентифицируют их как спам (уже известный программе)
Содержащие строки в заголовке или теле, которые свидетельствуют о том, что это письмо - результат деятельности почтового червя (например пресловутого Klez.h или Sircam)
2. Использование MilterAPI
Sendmail предоставляет программный интерфейс Milter для легкого создания специализированных почтовых фильтров. Этот интерфейс позволяет контролировать все этапы работы с письмом, от установки соединения и до его разрыва и может использоваться для создания антивирусных сканеров, блокировки спама и многого другого.
Проект SpamAssassin Milter Plugin использует возможности пакета SpamAssassin для идентификации спама и MilterIP для его уничтожения.
SpamAssasin - система, созданная исключительно для идентификации спама, а его блокировка обычно осуществляется сторонними программами, например с помощью правил Procmail. SpamAssassin использует набор правил, а также черные списки DNSBL для максимально точного распознавания спамеров.
Заключение
В статье я сознательно не касался моральных и юридических аспектов проблемы спама, описывая решения, применимые для защиты локальных сетей и почтовых доменов принадлежащих организациям, которые не являются провайдерами доступа. Провайдерам же при использовании подобных методов фильтрации спама как минимум необходимо разработать механизм отсылки уведомлений о блокировке спама пользователям. Это часто снимает многие возможные возражения пользователей против введения подобных систем фильтрации почты.
Пользователь, поставивший Linux тут же задается вопросом: “А что дальше?”. Сейчас я постараюсь ответить на этот вопрос. Итак, с первой задачей, установкой системы, вы видимо уже справились... подробнее
Итак, Linux, операционная система, где консоль играет наиважнейшую роль. Есть масса людей, которые и вовсе не ставят Х-сервер и работают на черном экранчике с белыми буквами (на самом деле консоль можно модернизировать, так что и KDE позавидует:))... подробнее
Оффисные приложения в операционной системе Linux развиты на сегодняшний день достаточно чтобы полностью заменить оные в Винде. И это не шутка! Офис в Linux ничуть не уступает своему конкуренту от Microsoft... подробнее
Сегодня Linux уже не просто консоль – пингвин обладает на данный момент массой великолепных графических оболочек. При этом естественно и мультимедиа возможности Линукса тоже сильны... подробнее
О как близки два этих понятия! Интернет и Линукс. Линукс великолепно подходит вам если вы хотите серфить глобальные просторы интренет. В “пингвине” можно найти все... подробнее