Журнал LinuxFormat - перейти на главную

LXF103:Спам не пройдет

Материал из Linuxformat
Перейти к: навигация, поиск
Миграция из Windows в Linux Меняем «прописку» без лишних проблем

Содержание

Sendmail без спама

Любите ли вы получать спам? Вопрос, наверное, риторический. Евгений Кропоткин предложит пару методик, вполне способных защитить от этой напасти небольшую фирму.

В самом конце 90-х годов прошлого века, когда я завел свой первый почтовый ящик, рекламные сообщения в количестве 3-4 штук в месяц, причем преимущественно на английском языке, даже забавляли. Но в наше время, когда объем рекламы, рассылаемой по каналам электронной почты, превысил все разумные пределы, необходимо как-то защищаться от потока ненужной корреспонденции.

Чтобы победить врага, как известно, надо его познать. Как рассылается спам? Раньше (примерно лет 7–10 назад) наиболее популярным способом было использование «дыр» в настройках почтовых служб, принимавших к отправке письма от кого угодно (такой сервер называется «открытым ретранслятором» или «open relay»). Сейчас эту «лавочку» практически прикрыли – в конфигурациях всех почтовых демоноа ретрансляция сообщений по умолчанию отключена, информация о защите сервера от использования в качестве узла для рассылки очень доступна и понятна.

Затем стало популярным рассылать спам со своего домашнего или офисного компьютера, используя локальный SMTP-сервер; однако, большинство провайдеров отслеживает нетипичную активность в сети и реагирует на нее блокировкой. Частая отправка писем обычным домашним пользователем смотрится неправдоподобно, особенно если поток почты идет продолжительное время. С такими рассылками можно очень эффективно бороться с помощью механизма «черный список», в который заносятся уличенные в рассылке спама хосты.

Так как оба перечисленных способа практически ушли в прошлое, для рассылки спама потребовалось новое средство. Все мы помним вирусные эпидемии, которые оценили и люди более прагматичные, чем обычные вирусописатели «для души». Были созданы черви и вирусы, позволяющие управлять зараженным компьютером в своих целях. Авторы червей контролируют скомпрометированные системы, что позволяет отсылать спам даже более массово, чем с использованием прежних технологий; благодаря огромному количеству подконтрольных компьютеров отправка сообщений с каждого отдельного хоста не такая частая, почти в пределах нормальной активности, и вызывает меньше подозрений у провайдера. Такие подконтрольные компьютеры (а их могут быть многие тысячи) называют «зомбированными». Черные списки против них работают плохо, так для отправки сообщения как каждый раз можно выбирать новый компьютер-зомби, а просмотр огромных черных списков еще и перегружает почтовый сервер.

Зомби не пройдут

Однако, если внимательно посмотреть на имена компьютеров-зомби, станет примерно понятно, как можно «перекрыть им кислород» – следует отказать в соединении IP-адресам, выдаваемым из динамических пулов; также следует заблокировать чрезмерно длинные домены, скажем, 4-го уровня и выше, которые обычно выдаются бесплатно, и потерять их пользователям совершенно не жаль. Т.е. следует попытаться ограничиться доменными именами, зарегистрированными в установленном порядке и имеющими внятное «произношение». Те, кому следует отказать в праве передавать почту, выглядят так:

125-25-133-146.adsl.totbb.net
adsl-dynamic-pool-xxx.fpt.vn
bb121-7-204-57.singnet.com.sg
pool-72-88-230-252.nwrknj.east.verizon.net

Чтобы закрыться от зомби, добавьте к вашей почтовой системе фильтр, позволяющий выделить таких отправителей и отказать им в обслуживании. Например, для sendmail можно взять smf-zombie, доступный по адресу http://smfs.sourceforge.net/smf-zombie.html.

Загрузите исходные тексты с указанного выше сайта (архив с программой smf-zombie-1.2.1.tar.gz занимает около 13 КБ) и распакуйте его, скажем, в ~/smf-zombie-1.2.1. Не помешает также прочитать сопроводительную документацию. После этого отредактируйте файл smf-config.h в соответствии с вашими требованиями – введите IP-адреса локальной сети и имя домена или доменов вашей почтовой системы (они задаются расширенными регулярными выражениями):

#define WHITE_LIST «(^127\\.0\\.0\\.1$|^192\\.168\\.[0-9]+\\.[0-9]+$)»
#define FAKE_HELO «(^domain1\\.tld$|^domain2\\.tld$)»

После правок наберите команду make, чтобы скомпилировать фильтр. Затем выполните от имени root скрипт install.sh – он создаст в вашей системе непривилегированного и группу, от имени которых будет работать smf-zombie (по умолчанию, smfs:smfs). Наконец, установите фильтр командой make install (также от имени суперпользователя). Если все пройдет гладко, исполняемый файл можно будет найти в каталоге /usr/local/sbin.

Наконец, выберите в каталоге init скрипт запуска для вашей системы и поместите его в /etc/init.d. Мне подошел smfzombie.redhat, который я сохранил как /etc/init.d/smfzombie, для краткости.

Настало время настроить взаимодействие с sendmail. Аккуратно поправьте файл sendmail.cf, внеся в него следующую строку:

 Xzombie, S=local: /var/run/smfs/smf-zombie.sock, F=, T=S:4m;R:4m

Не забудьте также указать zombie в списке InputMailFilters (ненужные имена фильтров можно убрать).

InputMailFilters=clamav,milt,zombie

Теперь запустите фильтр:

 /etc/init.d/smfzombie start

При этом в каталоге /var/run/smfs должен появиться сокет:

ls -al /var/run/smfs
итого 8
drwx------ 2 smfs root              4096 Ноя 28 17:53 .
drwxr-xr-x 13 root root             4096 Ноя 28 17:46 ..
srw------- 1 smfs smfs                0 Ноя 28 17:53 smf-zombie.sock

Если все прошло, как надо, перезапустите sendmail:

 /etc/init.d/sendmail restart

Отсутствие сообщений об ошибках вроде

WARNING: Xspamassassin: local socket name /var/run/spamass-milter.sock missing

означает, что sendmail и фильтры начали взаимодействовать. Это будет заметно по количеству прошедшего спама и журналам (в моей системе это файл /var/log/maillog). Перед перезапуском sendmail не забудьте запустить другие фильтры и антивирусы, если они используются.

Ночью все кошки серы

Есть и другая интересная технология фильтрации, которую назвали greylisting [«серые списки»]. Ее описание доступно по адресу http://en.wikipedia.org/wiki/Greylisting. Суть в том, что при поступлении почты от нового пользователя, никогда раньше не присылавшего сообщений на данный сервер, ему выдается временный отказ. Обычные почтовые сервера, в зависимости от настроек, обязательно попробуют чуть позже отправить почту повторно, а программы рассылки спама, скорее всего, не будут повторять попытку – они берут не качеством, а количеством.

Обычно для реализации этой технологии используются некоторые части информации из сообщения. Объединенные вместе, они так называемый «триплет» или три информационных поля: IP-адрес, с которого пытались отправить почту, адрес электронной почты отправителя и адрес получателя.

Из триплетов формируется внутренняя база почтового сервера. Если триплет полученного сообщения незнаком серверу, он выдает отправителю сообщение о своей временной недоступности. Однако, такая строгая проверка не обязательна. Многие graylist-фильтры не требуют полного совпадения IP адреса, так как у крупных почтовых систем не один IP-адрес, а целый пул. Предполагая, что пул у таких отправителей находится в одной подсети класса C, проверяют только первые 24 бита IP адреса. В некоторых фильтрах реализована функция, которая при подтверждении адреса отправителя разрешает отправку почты всем пользователям подтвержденного домена.

Для пользователя такая фильтрация не требует никакого участия и настроек с его стороны, единственное небольшое неудобство – задержка с доставкой первого сообщения. Для администратора почтовой системы настройка фильтра достаточно проста и может, в принципе, ограничиться редактированием локальных белых списков (например, офис и филиалы можно добавить сразу). Кроме того, данный вид фильтрации нагружает почтовую систему меньше, чем интеллектуальные аналитические фильтры, поэтому лучше ставить его перед ними.

К недостаткам технологии можно отнести то, что она не позволяет быстро ответить на письмо нового отправителя, а также то, что некоторые отправители, в силу технических ограничений, могут не уложиться в отведенное им для повтора время, и в результате не смогут доставить письмо вообще. Кроме того, что при наличии нескольких MX-записей все они должны быть защищены аналогичным образом, иначе спам все равно будет доставлен. Также возникает сложность с легитимными отправителями с динамическими IP-адресами.

Одна из реализаций данной методики доступна по адресу http://smfs.sourceforge.net/smf-grey.html, там же есть ссылка на более функциональную версию этой программы – http://smfs.takm.com/; именно ее я и предлагаю установить. Скачайте и распакуйте архив с программой, как и в случае smf-zombie: он почти такой же маленький (около 17 КБ). Далее выполните традиционную пару make && su make install; если вы не устанавливали smf-zombie, предварительно запустите install.sh. Отредактируйте конфигурационный файл smf-grey.conf – пропишите в нем IP адреса и домены вашего «белого списка», в конце файла добавьте

Syslog          local4

– это позволит выделять сообщения данного фильтра средствами syslog: просто добавьте в /etc/syslog.conf строчки:

#smf-grey
local4.*                                    /var/log/greylist.log

Файл конфигурации smf-grey.conf следует скопировать в каталог /etc/mail/smfs/, а затем дать команды:

 touch /var/log/greylist.log
 /etc/init.d/syslog restart

и создать кэш-файл фильтра:

 touch /var/run/smfs/smf-grey.cache
chown smfs:smfs /var/run/smfs/smf-grey.cache

Как и в случае smf-zombie, необходимо выбрать в каталоге init подходящий стартовый скрипт и поместить его в /etc/init.d, после чего отредактировать sendmail.cf, добавив строку для фильтра

 Xgray, S=local:/var/run/smfs/smf-grey.sock, F=, T=S:4m;R:4m

и дописав его имя (gray) в список InputMailFilters:

 InputMailFilters=clamav,milt,zombie,gray

Проверим работу получившейся системы. Откройте еще один терминал и наберите tail -f messages | grep smf или tail -f greylist.log, если вы внесли правки в конфигурационный файл syslog. Затем перейдите в исходный терминал, запустите фильтр и перезапустите sendmail:

 /etc/init.d/smfgrey start && /etc/init.d/sendmail restart

Во втором терминале может появиться сообщение о невозможности загрузить кэш. Если все было сделано верно, это случится лишь единожды: после остановки или перезапуска фильтра командой /etc/init.d/smfgrey restart сообщения уже не будет, а файл /var/run/smfs/smf-grey.cache будет заполнен записями фильтра.

Скорая помощь

Небольшая рекомендация по набору фильтров: при количестве писем примерно до 10–20 тысяч в сутки и достаточно мощном компьютере можно обойтись только smf-gray. Особенность «продвинутой версии» в том, что ее не надо перезагружать при изменении файла конфигурации: она сама проверяет его раз в 15 секунд. Кроме того, эта версия менее чувствительна к сбоям в структуре кэшфайла триплетов.

Есть ли жизнь без спама?

После прочтения статьи у пытливого читателя может возникнуть резонный вопрос: «Все хорошо, а насколько эффективны эти ваши методики?». Кое-какую информацию на этот счет можно почерпнуть из таблицы. Если же «спам достал», а настроить собственную почтовую систему нет возможности, для объявлений с публичным почтовым адресом, которые неизбежно подает организация – поиск работников, маркетинг и т.п. – неплохим выходом будет использовать публичные сервера вроде Gmail с перенаправлением на внутренний ящик: почту они фильтруют неплохо, кроме того, можно периодически закрывать один адрес и заводить другой. Правда, следует иметь в виду, что использование бесплатных почтовых служб расценивается многими как несолидное поведение. Какое из двух зол меньше – решайте сами. LXF

Отчет о почте домена (41 почтовый ящик)

LXF103 75 1.jpg

Персональные инструменты
купить
подписаться
Яндекс.Метрика