doc/ru_RU.KOI8-R/articles/relaydelay/article.xml
2013-01-30 19:12:36 +00:00

267 lines
13 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="koi8-r"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
"../../../share/xml/freebsd45.dtd">
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/relaydelay/article.xml,v 1.2 2007/05/15 19:31:54 gad Exp $
Original revision: r32632
-->
<article lang="ru">
<articleinfo>
<title>Использование технологии серых списков во &os;</title>
<author>
<firstname>Том</firstname>
<surname>Родес</surname>
<affiliation>
<address><email>trhodes@FreeBSD.org</email></address>
</affiliation>
</author>
<copyright>
<year>2004</year>
<holder>The &os; Documentation Project</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>Эта статья создана исключительно для описания технологии задержки
передачи сообщений на почтовом сервере &os;. Сервер с технологией
задержки передачи (relaydelay) или попаданием в серый список
(greylisting) снижает уровень спама просто за счёт выдачи
диагностического сообщения <errorname>TEMPFAIL</errorname> на каждое
входящее почтовое сообщение. Смысл этой технологии заключается в том,
что большинство спамеров для выполнения своей работы используют
собственные персональные компьютеры и специализированное программное
обеспечение. Настоящий почтовый сервер должен помещать сообщения в
очередь и пытаться доставить его позже. Таким образом, скорее всего,
спамер перейдёт к следующему хосту вместо того, чтобы попытаться снова
послать электронное послание. Это прекрасная идея; по крайней мере,
до тех пор, пока спамеры не начнут использовать программное
обеспечение, которое будет обеспечивать повтор передачи. Но как именно
это работает? Итак, в процессе приёма сообщения электронной почты
<acronym>ID</acronym> сообщения сохраняется в базе данных, а в качестве
результата возвращается <errorname>TEMPFAIL</errorname> вместе с
электронной почтой. Если сообщение электронной почты посылается
повторно, то <acronym>ID</acronym> сообщения будет сверяться с
<acronym>ID</acronym> сообщений, сохранёнными в базе данных. Если в
базе данных оно существует, то посланию электронной почты разрешается
доставка по назначению. В противном случае <acronym>ID</acronym>
сохраняется, а в качестве результата возвратится
<errorname>TEMPFAIL</errorname>. Этот цикл будет повторяться для
каждого сообщения, поступающего на сервер. По моему личному опыту,
это действительно отсекает 90% спама.</para>
</abstract>
</articleinfo>
<sect1>
<title>Базовая настройка</title>
<para>Нам потребуется <command>perl</command> с поддержкой многопоточного
выполнения. Установите <filename role="package">lang/perl5.8</filename>
с установленной переменной <makevar>USE_THREADS=yes</makevar>. Сначала
может потребоваться удалить текущую версию <command>perl</command>; на
необходимость сделать это укажут ошибки в процессе установки.</para>
<note>
<para>При этом потребуется, чтобы все порты, которым нужен
<command>perl</command>, были перестроены и переустановлены;
<filename role="package">ports-mgmt/portupgrade</filename> хорошо для
этого подходит. По крайней мере, он укажет, какие порты были удалены и
какие необходимо переустановить.</para>
</note>
<para>Теперь что касается сервера базы данных;
<application>MySQL</application> прекрасно подходит для такого типа
работы. Установите <filename
role="package">databases/mysql40-server</filename> вместе с <filename
role="package">databases/p5-DBD-mysql40</filename>. Предыдущий порт
должен подразумевать установку <filename
role="package">databases/p5-DBI-137</filename>, так что один шаг будет
пропущен.</para>
<para>Установите переносимый подключаемый серверный модуль на базе
<command>perl</command>, порт <filename
role="package">net/p5-Net-Daemon</filename>. Большинство установок этих
портов должны проходить без проблем. Следующий шаг будет более
трудоёмким.</para>
<para>Теперь установите порт <filename
role="package">mail/p5-Sendmail-Milter</filename>. На момент написания
этого документа в файле <filename>Makefile</filename> имелась строка,
начинающаяся с <makevar>BROKEN</makevar>, просто уберите или
закомментируйте её. Она помечена так лишь потому, что в &os; по
умолчанию не включался и не устанавливался пакет <command>perl</command>
с поддержкой многопоточного выполнения. После удаления этой строки он
должен строиться и устанавливаться без ошибок.</para>
<para>Создайте каталог для размещения временных конфигурационных
файлов:</para>
<screen>&prompt.root; <userinput>mkdir /tmp/relaydelay</userinput>
&prompt.root; <userinput>cd /tmp/relaydelay</userinput></screen>
<para>Теперь, когда у нас имеется временный каталог для работы, команде
<command>fetch</command> нужно передать следующие
<acronym>URL</acronym>-адреса:</para>
<screen>&prompt.root; <userinput>fetch http://projects.puremagic.com/greylisting/releases/relaydelay-0.04.tgz</userinput>
&prompt.root; <userinput>fetch http://lists.puremagic.com/pipermail/greylist-users/attachments/20030904/b8dafed9/relaydelay-0.04.bin</userinput></screen>
<!-- ЗАМЕЧАНИЕ ДЛЯ ТОМА РОДЕСА: РАЗМЕЩАТЬ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЗДЕСЬ
ЯВЛЯЕТСЯ ПЛОХОЙ ИДЕЕЙ НА ТОТ СЛУЧАЙ, ЕСЛИ КАКОЙ-НИБУДЬ МУДАК ЗАМЕНИТ
ЕГО. НАВЕРНОЕ, Я ДОЛЖЕН ЗААРХИВИРОВАТЬ СКРИПТЫ И ОСТАЛЬНУЮ ШНЯГУ. -->
<para>Теперь необходимо распаковать исходный код:</para>
<screen>&prompt.root; <userinput>gunzip -c relaydelay-0.04.tgz | tar xvf -</userinput></screen>
<para>На этот момент во временном каталоге должно оказаться несколько
файлов. Теперь необходимая информация может передаваться серверу базы
данных импортированием её из файла <filename>mysql.sql</filename>:</para>
<screen>&prompt.root; <userinput>mysql &lt; relaydelay-0.04/mysql.sql</userinput></screen>
<para>Установите патч <filename>relaydelay.bin</filename> для остальных
файлов, запустив такую команду:</para>
<screen>&prompt.root; <userinput>patch -d /tmp/relaydelay/relaydelay-0.04 &lt; relaydelay.bin</userinput></screen>
<para>Отредактируйте файлы <filename>relaydelay.conf</filename> и
<filename>db_maintenance.pl</filename>, добавив в них корректное имя
пользователя и пароль для СУБД <application>MySQL</application>. Если
СУБД была построена и установлена так, как описано выше, то в ней
отсутствуют пользователи и пароли. Эта ситуация должна быть исправлена
до перевода системы в промышленную эксплуатацию, что описано в
документации к СУБД и выходит за рамки данной статьи.</para>
<para>Смените рабочий каталог на <filename
class="directory">relaydelay-0.04</filename>:</para>
<screen>&prompt.root; <userinput>cd relaydelay-0.04</userinput></screen>
<para>Скопируйте или переместите конфигурационные файлы в соответствующие
каталоги:</para>
<screen>&prompt.root; <userinput>mv db_maintenance.pl relaydelay.pl /usr/local/sbin</userinput>
&prompt.root; <userinput>mv relaydelay.conf /etc/mail</userinput>
&prompt.root; <userinput>mv relaydelay.sh /usr/local/etc/rc.d/</userinput></screen>
<para>Протестируйте получившуюся конфигурацию, выполнив такую
команду:</para>
<screen>&prompt.root; <userinput>sh /usr/local/etc/rc.d/relaydelay.sh start</userinput></screen>
<note>
<para>Этот файл не будет существовать, если предыдущие команды &man.mv.1;
не были выполнены.</para>
</note>
<para>Если всё отработало корректно, то в каталоге <filename
class="directory">/var/log</filename> должен появиться новый файл,
<filename>relaydelay.log</filename>. В нём должен находиться текст,
подобный следующему:</para>
<programlisting>Loaded Config File: /etc/mail/relaydelay.conf
Using connection 'local:/var/run/relaydelay.sock' for filter relaydelay
DBI Connecting to DBI:mysql:database=relaydelay:host=localhost:port=3306
Spawned relaydelay daemon process 38277.
Starting Sendmail::Milter 0.18 engine.</programlisting>
<para>Если файл не появился, то что-то сработало неправильно, пересмотрите
экранную диагностику или просмотрите журнальный файл
<filename>messages</filename> на предмет появления новой
информации.</para>
<para>Объедините всё вместе, добавив следующую строку в файл
<filename>/etc/mail/sendmail.mc</filename> или специфичный для вашей
системы <filename>mc</filename>-файл:</para>
<programlisting>INPUT_MAIL_FILTER(`relaydelay', `S=local:/var/run/relaydelay.sock, T=S:1m;R:2m;E:3m')dnl</programlisting>
<para>Перестройте и переустановите файлы в каталоге
<filename>/etc/mail</filename> и перезапустите
<command>sendmail</command>. Короткая команда <command>make</command>
<maketarget>restart</maketarget> должна сделать всё необходимое.</para>
<para>Сгрузите скрипт на языке <command>perl</command>, размещённый по
адресу <ulink url="http://lists.puremagic.com/pipermail/greylist-users/2003-November/000327.html">http://lists.puremagic.com/pipermail/greylist-users/2003-November/000327.html</ulink>
и сохраните его в каталог <filename
class="directory">relaydelay-0.04</filename>. В следующем примере этот
скрипт обозначается как <filename>addlist.pl</filename>.</para>
<para>Отредактируйте файл <filename>whitelist_ip.txt</filename>,
модифицировав его так, чтобы в него были включены
<acronym>IP</acronym>-адреса серверов, которые должны иметь возможность
игнорировать фильтры <application>relaydelay</application>. То есть это
домены, при получении электронной почты от которых диагностическое
сообщение <errorname>TEMPFAIL</errorname> выдаваться не будет.</para>
<para>Как пример можно привести:</para>
<programlisting>192.168. # My internal network.
66.218.66 # Yahoo groups has unique senders.</programlisting>
<para>Файл <filename>blacklist_ip.txt</filename> должен иметь похожее
назначение, но с обратными правилами. Укажите в этом файле
<acronym>IP</acronym>-адреса, которые должны отвергаться без выдачи
диагностического сообщения <errorname>TEMPFAIL</errorname>. Этот
перечень доменов никогда не получит даже возможность сообщить о том, что
они являются реально существующими почтовыми серверами.</para>
<para>Эти файлы теперь должны быть импортированы в базу данных посредством
скрипта <filename>addlist.pl</filename>, который был получен несколькими
строками выше:</para>
<screen>&prompt.root; <userinput>perl addlist.pl -whitelist 9999-12-31 23:59:59 &lt; whitelist_ip.txt</userinput>
&prompt.root; <userinput>perl addlist.pl -blacklist 9999-12-31 23:59:59 &lt; blacklist_ip.txt</userinput></screen>
<para>Для включения технологии <application>relaydelay</application> при
каждой загрузке системы, добавьте строчку
<option>relaydelay_enable="YES"</option> в файл
<filename>/etc/rc.conf</filename>.</para>
<para>Журнальный файл <filename>/var/log/relaydelay.log</filename> должен
постепенно пополняться удачными прохождениями. В зависимости от загрузки
вашего почтового сервера, вскоре должны появиться строчки, подобные
следующим.</para>
<programlisting>=== 2004-05-24 21:03:22 ===
Stored Sender: &lt;someasshole@flawed-example.com&gt;
Passed Recipient: &lt;local_user@pittgoth.com&gt;
Relay: example.net [XXX.XX.XXX.XX] - If_Addr: MY_IP_ADDRESS
RelayIP: XX.XX.XX.XX - RelayName: example.net - RelayIdent: - PossiblyForged: 0
From: someasshole@flawed-example.com - To: local_user
InMailer: esmtp - OutMailer: local - QueueID: i4P13Lo6000701111
Email is known but block has not expired. Issuing a tempfail. rowid: 51
IN ABORT CALLBACK - PrivData: 0&lt;someasshole@flawed-example.com&gt;</programlisting>
<para>В файл <filename>/etc/newsyslog.conf</filename> теперь можно добавить
следующую строку, которая обеспечивает ротацию журналов
<filename>relaydelay.log</filename> при достижении размера в 100
<acronym>Кбайт</acronym>:</para>
<screen>/var/log/relaydelay.log 644 3 100 * Z</screen>
<!-- XXX К какому тексту относится это замечание? -->
<note>
<para>В какой-то момент появлялась ошибка о неполном определении
переменных <command>perl</command> в файле
<filename>/etc/mail/relaydelay.conf</filename>. Если те две переменные
раскомментированы, то конфигурационный файл может быть обработан
нормально. Просто не забудьте убрать их из комментариев до того, как
начать работу с технологией <command>relaydelay</command>.</para>
</note>
</sect1>
</article>