LXF103:Спам не пройдет
|
|
|
- Миграция из 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