| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Sendmail vs. spam
Каждый день в мой почтовый ящик (естественно электронный) приходит несколько писем (в худшие дни - несколько десятков) нежелательной корреспонденции - спама. Если бы я был обычным пользователем, то найти подходящий метод борьбы с ним не составляло бы труда, но я не обычный пользователь, я администратор довольно немаленькой сети. Ежедневно на мой почтовый сервер приходит не одна сотня нежелательных писем, создавая большой паразитный трафик и забивая почтовые ящики пользователей (особенно тех, кто пишет свой служебный e-mail на каждом встречном форуме и в любой подвернувшейся онлайн-анкете). В этом случае спам-фильры необходимо устанавливать прямо на почтовом сервере организации. Для реализации этого мы воспользуемся возможностями почтового сервера База доступа 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, не забыв сохранить (на всякий случай) предыдущий вариант. mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old cp ./sendmail.cf /etc/mail/sendmail.cf И перезапустите Sendmail: killall -HUP sendmail Файл базы доступа (/etc/mail/access) состоит из строк содержащих пары значений, разделенных пробелами или табуляцией. Первое значение должно являться электронным адресом, именем домена или ip-адреcом (можно задавать целые сети), второе - кодовым обозначением действия. Действие может быть следующим:
# наша локальная сеть - адреса 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: makemap hash /etc/mail/access.db < /etc/mail/access Теперь почту Вашим пользователям смогут посылать все, кроме тех доменов или 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: Для SendMail 8.10 и выше: FEATURE(`dnsbl', `relays.ordb.org', `Rejected - see http://ordb.org/')dnl Для SendMail 8.9: FEATURE(`rbl', `relays.ordb.org')dnl A затем пересобрать и установить новый файл sendmail.cf Для SendMail 8.8 и ниже для добавления этой возможности Вам придется вручную редактировать файл sendmail.cf (он располагается в каталоге /etc/mail). Добавьте в процедуру Basic_check_relay (она обозначена заглавной буквой S - SBasic_check_relay) следующие правила: R$* $: $&{client_addr} R$-.$-.$-.$- $: <?> $(host $4.$3.$2.$1.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 подключения, спамер покупает карточку доступа в интернет, рассылает множество писем и бесследно исчезает. Для борьбы с такого рода рассылками необходимо блокировать почту приходящую с адресов, принадлежащих непосредственно модемным пулам провайдеров доступа. Такого рода сервис в российском сегменте поддерживает проект Настройка Вашего сервера для использования сервиса 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 - Вспомогательные меры Кроме подобных <радикальных> методов борьбы может быть полезным применение вспомогательных средств, таких как блокировка определенных почтовых программ и блокировка писем, не содержащих поля To: или содержащих в нем значение Блокировку писем рассылаемых с помощью программ массовой рассылки можно производить при помощи заголовка X-Mailer. Обычные письма содержат в этом заголовке название почтовой программы отправителя. Например Для фильтрации известных программ массовой рассылки на основании заголовка X-Mailer включите в ваш файл sendmail.mc в раздел LOCAL_RULES следующие правила: # Настоящий Outlook имеет версию вида: 5.0.23123244 После внесения соответствующих изменений пересоберите свой файл sendmail.cf и установите его. Вы можете обойтись без перекомпиляции конфигурационного файла, просто добавив эти правила в конец самого файла конфигурации - раздел LOCAL_RULES переносится в него при сборке без изменений.
Также можно блокировать письма с пустым заголовком и с пустым или неправильно сформированным полем Message-ID (оно должно быть в формате идентификатор@домен). Скорее всего они отправлены спамерами. Это можно сделать с помощью следующих правил: Другие методы борьбы со спамом
Существуют еще много различных методов бороться со спамом, используя возможности Вашего сервера Sendmail. Кратко остановлюсь на некоторых из них.
1. Использование Procmail - это гибкое и мощное средство фильтрации почты. Procmail сопобен фильтровать почту по большому числу правил и может справится и со спамом. Программа 2. Использование MilterAPI
Sendmail предоставляет программный интерфейс Проект Заключение
В статье я сознательно не касался моральных и юридических аспектов проблемы спама, описывая решения, применимые для защиты локальных сетей и почтовых доменов принадлежащих организациям, которые не являются провайдерами доступа. Провайдерам же при использовании подобных методов фильтрации спама как минимум необходимо разработать механизм отсылки уведомлений о блокировке спама пользователям. Это часто снимает многие возможные возражения пользователей против введения подобных систем фильтрации почты. Cсылки по теме:
|
|
| ||||||||||||||||
|