<!--
     The FreeBSD Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/mail/chapter.sgml,v 1.5 2000/11/10 11:57:28 phantom Exp $
     Original revision: 1.20
-->

<chapter id="mail">
  <title>Электронная почта</title>

  <para><emphasis>Переписал &a.jim;, 2 декабря 1999 г.  Оригинальная
    версия: &a.wlloyd;.</emphasis></para>

  <sect1>
    <title>Краткий обзор</title>

    <para>Электронная почта является на сегодняшний день одним из самых
      популярных средств связи.  Миллионы людей используют ее каждый день, и
      их число растет.  И если Вы читаете этот текст, то, вероятно, тоже
      пользуетесь услугами электронной почты, и у Вас даже не один почтовый
      ящик.</para>

    <para>Настройке электронной почты посвящено немало страниц многочисленных
      <link linkend="bibliography">системных руководств</link>, так что у
      Вас не должно возникнуть проблем с настройкой почтового сервера.</para>

    <para>Возможно, при настройке сервера Вам понадобится также настроить
      сервер доменных имен (Domain Name Server, DNS).  В этом случае,
      обязательно прочитайте файл <filename>/etc/namedb</filename> и
      страницу руководства по команде &man.named.8;.</para>
  </sect1>

  <sect1 id="mail-using">
    <title>Использование электронной почты</title>

    <para>За отправку/получение почты отвечают четыре программы (сервиса):
      <link linkend="mail-mua">пользовательский почтовый клиент</link>,
      <link linkend="mail-mta">почтовый сервер (демон)</link>, <link
      linkend="mail-dns">сервер DNS</link>, <link linkend="mail-receive">POP
      или IMAP демон</link>.</para>

    <sect2 id="mail-mua">
      <title>Пользовательский почтовый клиент</title>

      <para>Обычно, это программа типа <application>mutt</application>,
	<application>pine</application>, <application>elm</application>, и
	<application>mail</application>, а также программы с графическим
	интерфейсом, такие, как <application>balsa</application> или
	<application>xfmail</application>, или интегрированные приложения
	(например, какой-либо WWW браузер типа Netscape).  Все эти программы
	общаются с локальным <link linkend="mail-host">почтовым
	сервером</link>, вызывая какой-либо демон, или напрямую по протоколу
	TCP.</para>
    </sect2>

    <sect2 id="mail-mta">
      <title>Почтовый демон</title>

      <para>Обычно это <application>sendmail</application> (поставляется
	вместе с FreeBSD), однако, им может быть любая из нижеперечисленных
	программ: <application>qmail</application>,
	<application>postfix</application> или
	<application>exim</application>.  Остальные менее
	распространены.</para>

      <para>Почтовый демон выполняет только две функции: принимает входящую
	почту и отправляет исходящую.  Чтобы забирать/отправлять почту по
	протоколам POP или IMAP, нужен специальный дополнительный <link
	linkend="mail-receive">демон</link>.</para>

      <para>Имейте ввиду, что старые версии
	<application>sendmail</application> имели серьезные проблемы с
	безопасностью, поэтому старайтесь всегда использовать последнюю
	версию.  Это правило, кстати, справедливо в отношении практически
	любых программных продуктов.</para>
    </sect2>

    <sect2 id="mail-dns">
      <title>Email и DNS</title>

      <para>Служба имен доменов (Domain Name System, DNS) и соответствующий
	ей демон <command>named</command> играют важную роль в доставке
	почты.  DNS содержит базу данных соответствия между именем домена и
	IP адресом, и между именем домена и почтовым сервером.  IP адрес
	задается в записи A.  Запись MX (Mail eXchanger) указывает
	компьютер, который обрабатывает корреспонденцию для данного домена.
	Если для Вашего хоста запись MX отсутствует, почта будет
	доставляться непосредственно на Ваш хост.</para>
    </sect2>

    <sect2 id="mail-receive">
      <title>Получение почты</title>

      <para>Полученную корреспонденцию почтовый сервер сохраняет для
	последующего чтения.  Вы можете читать почту непосредственно на
	сервере, или забирать ее по протоколам POP или IMAP.</para>

      <para>Чтобы настроить POP или IMAP сервер, нужно сделать две
	вещи:</para>

      <procedure>
	<step>
	  <para>Поставить POP или IMAP сервер из <ulink
	    url="../ports/mail.html">коллекции портов</ulink>.</para>
	</step>

	<step>
	  <para>Прописать в файле <filename>/etc/inetd.conf</filename>
	    POP или IMAP демон.</para>
	</step>
      </procedure>
    </sect2>
  </sect1>

  <sect1 id="mail-trouble">
    <title>Поиск и устранение неисправностей</title>

    <para>Вот несколько часто задаваемых вопросов и ответов на них, взятых,
      в основном, из <ulink url="../FAQ/">FAQ</ulink>.</para>

    <qandaset>
      <qandaentry>
	<question>
	<para>Почему я должен использовать FQDN для хостов вне моей подсети?</para>
	</question>

	<answer>
	<para>Вы, видимо, обнаружили, что хост, к которому Вы обратились,
	  оказался на самом деле в другом домене; например, если Вы
	  находитесь в домене <hostid role="fqdn">foo.bar.edu</hostid> и
	  хотите обратиться к хосту <hostid>mumble</hostid> в домене <hostid
	  role="domainname">bar.edu</hostid>, то должны указать его полное
	  доменное имя, <hostid role="fqdn">mumble.bar.edu</hostid>, а не
	  просто <hostid>mumble</hostid>.</para>

	<para>Традиционно, ресолверы (распознаватели) BSD BIND позволяли это
	  делать.  Однако, текущая версия <application>BIND</application>,
	  поставляемая с FreeBSD, больше не добавляет имена доменов,
	  отличающихся от того, в котором Вы находитесь, для не полностью
	  указанных имен хостов.  То есть, имя <hostid>mumble</hostid> будет
	  опознан как <hostid role="fqdn">mumble.foo.bar.edu</hostid> или
	  будет искаться в корневом домене.</para>

	<para>Это отличается от предыдущего поведения, при котором поиск
	  продолжался в доменах <hostid
	  role="domainname">mumble.bar.edu</hostid> и <hostid
	  role="domainname">mumble.edu</hostid>.  Если Вам интересны причины
	  объявления такого поведения плохой практикой и даже ошибкой в
	  безопасности, обратитесь к RFC 1535.</para>

	<para>Хорошим решением будет поместить строку

	  <programlisting>
search foo.bar.edu bar.edu</programlisting>

	  вместо ранее используемой:

	  <programlisting>
domain foo.bar.edu</programlisting>

	  в файл <filename>/etc/resolv.conf</filename>.  Однако
	  удостоверьтесь, что порядок поиска не нарушает <quote>границ
	  полномочий между локальным и внешним администрирования</quote>, в
	  терминологии RFC 1535.</para>
	</answer>
      </qandaentry>

      <qandaentry>
	<question>
	<para>Sendmail выдает ошибку <errorname>mail loops back to
	  myself</errorname></para>
	</question>

	<answer>
	<para>В FAQ по sendmail дан следующий ответ:</para>

	<programlisting>
* Выдаются сообщения <quote>Local configuration error</quote>, например:

553 relay.domain.net config error: mail loops back to myself
554 &lt;user@domain.net&gt;... Local configuration error

Как можно решить эту проблему?

Согласно записям MX, почта для домена <hostid
role="domainname">domain.net</hostid> перенаправляется на хост
<hostid>relay.domain.net</hostid>, однако последний не распознается как
<hostid role="domainname">domain.net</hostid>.  Добавьте <hostid
role="domainname">domain.net</hostid> в файл
<filename>/etc/sendmail.cw</filename> (если Вы используете
FETURE(use_cw_file)) или добавьте <quote>Cw domain.net</quote> в файл
<filename>/etc/sendmail.cf</filename>.</programlisting>

	<para>Текущая версия этого FAQ больше не поставляется вместе с
	  sendmail.  Однако, этот документ регулярно помещается в
	  конференциях comp.mail.sendmail, comp.mail.misc, comp.mail.smail,
	  comp.answers и news.answers.  Вы можете получить копию по
	  электронной почте, послав запрос, содержащий команду <quote>send
	  usenet/news.answers/mail/sendmail-faq</quote> в теле письма, по
	  адресу <email>mail-server@rtfm.mit.edu</email>.</para>
	</answer>
      </qandaentry>

      <qandaentry>
	<question>
	<para>Как работать с электронной почтой при коммутируемом соединении
	  с Интернет?</para>
	</question>

	<answer>
	<para>Вы можете подключить к Интернет FreeBSD машину в локальной
	  сети, которая будет <quote>промежуточным звеном</quote> в доставке
	  Вашей почты.  Для этого существует по крайней мере два способа.
	  Или, в качестве альтернативы, Вы можете воспользоваться
	  UUCP.</para>

	<para>Прежде всего, Вам необходимо убедиться, что провайдер
	  обеспечивает дополнительный MX-сервис для Вашего домена,
	  например:</para>

	<programlisting>
bigco.com.            MX        10      bigco.com.
                      MX        20      smalliap.com.</programlisting>

	<para>Только один хост должен быть указан в качестве последнего
	  получателя (добавьте запись <literal>Cw bigco.com</literal> в файл
	  <filename>/etc/sendmail.cf</filename> на машине
	  <hostid>bigco.com</hostid>).</para>

	<para>Когда программа <command>sendmail</command> (со стороны
	  отправителя) <quote>захочет</quote> доставить почту, она
	  попытается установить Интернет-соединение через модем.  Скорее
	  всего, ей это не удастся (в произвольный момент времени Вы,
	  вероятнее всего, не будете подключены к Интернет), и она
	  автоматически перейдет ко второму серверу, т.е. Вашему провайдеру
	  Интернет, который, в свою очередь, будет пытаться установить
	  соединение в Вашим компьютером каждые (<literal>sendmail_flags =
	  -bd -q15m</literal> в файле <filename>/etc/rc.conf</filename>) 15
	  минут, чтобы доставить почту.</para>

	<para>Вы можете воспользоваться следующим сценарием, чтобы забирать
	  почту каждый раз, когда Вы входите в систему.</para>

	<programlisting>
#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &amp;
/usr/sbin/ppp -direct pppbigco</programlisting>

	<para>Если же Вы хотите написать отдельный пользовательский скрипт,
	  лучше воспользоваться командой <command>sendmail
	  -qRbigco.com</command> вместо вышеприведенного сценария, так как в
	  этом случае вся почта в очереди для хоста
	  <hostid>bigco.com</hostid> будет обработана немедленно.</para>

	<para>Рассмотрим эту ситуацию подробнее.</para>

	<para>Вот пример сообщения от &a.isp;.</para>

	<programlisting>

&gt; мы предоставляем вторичный MX для наших клиентов.  Вы соединяетесь
&gt; с нашим сервером несколько раз в день чтобы забрать почту для Вашего
&gt; первичного (главного) MX (мы не соединяемся с ним каждый раз, когда
&gt; приходит новая почта для его доменов).  Далее, sendmail отправляет
&gt; почту, находящуюся в очереди каждые 30 минут, и клиент должен быть
&gt; подключен к Интернет в течении 30 минут, чтобы удостовериться, что
&gt; вся почта <quote>ушла</quote> на основной MX-сервер.
&gt;
&gt; Может быть, есть какая-либо команда, которая заставит sendmail
&gt; немедленно отправить все почту, находящуюся в очереди?  Естественно,
&gt; пользователи не обладают какими-либо повышенными привилегиями на
&gt; нашем сервере.

В секции <quote>privacy flags</quote> файла
<filename>sendmail.cf</filename>, определяется опция
<option>Opgoaway,restrictqrun</option>

Уберите <literal>restrictqrun</literal>, чтобы разрешить рядовым
пользователям инициировать работу с очередью.  Вам также может понадобиться
изменить порядок MX-серверов.  Так, если Вы являетесь первым (основным) MX-сервером, укажите:

# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue

Таким образом, удаленный хост будет доставлять почту непосредственно к Вам,
не пытаясь установить соединение с клиентом. Затем уже Вы, в свою очередь,
отсылаете ее клиенту.  Удостоверьтесь, что в DNS есть записи про
<quote>customer.com</quote> и <quote>hostname.customer.com</quote>.  Просто
добавьте запись A в DNS для <quote>customer.com</quote>.</programlisting>
	</answer>
      </qandaentry>
    </qandaset>
  </sect1>

  <sect1 id="mail-advanced">
    <title>Настройка почтового сервера для обслуживания всего домена</title>

    <sect2 id="mail-config">
      <title>Базовая конфигурация</title>

      <para>Изначально, Вы можете отправлять почту <quote>во внешний
	мир</quote> если у Вас правильно составлен файл
	<filename>/etc/resolv.conf</filename> или у Вас запущен свой сервер
	имен.  Если Вы хотите, чтобы почта, предназначенная для хоста в
	Вашем домене, доставлялась по назначению, есть два пути:</para>

      <itemizedlist>
	<listitem>
	  <para>Запустите свой собственный сервер DNS, тем самым организовав
	    собственный домен, например, <hostid
	    role="domainname">FreeBSD.org</hostid></para>
	</listitem>

	<listitem>
	  <para>Удостоверьтесь, что Вы получаете почту, предназначенную для
	    Вашего хоста.  То есть, почта должна приходить на доменное имя
	    Вашей машины.  Например, <hostid
	    role="fqdn">example.FreeBSD.org</hostid>.</para>
	</listitem>
      </itemizedlist>

      <para>В любом случае, чтобы почта всегда приходила на Ваш хост, Вам
	нужно иметь постоянный (статический) IP адрес (а не, например,
	PPP-соединение).  Если Вы находитесь за брандмауэром, то последний
	должен пропускать SMTP-пакеты.</para>

      <para>Если Вы хотите, чтобы почта приходила непосредственно на Ваш
	хост:</para>

      <itemizedlist>
	<listitem>
	  <para>Удостоверьтесь, что запись MX в DNS соответствует IP адресу
	    Вашего хоста хоста.</para>
	</listitem>

	<listitem>
	  <para>Или для Вашего хоста вообще отсутствует MX-запись.</para>
	</listitem>
      </itemizedlist>

      <para>Выполнение любого из перечисленных условий обеспечит доставку
	почты для Вашего хоста.</para>

      <para>Попробуйте это:</para>

      <screen>&prompt.root; <userinput>hostname</userinput>
example.FreeBSD.org
&prompt.root; <userinput>host example.FreeBSD.org</userinput>
example.FreeBSD.org has address 204.216.27.XX</screen>

      <para>Если Вы это видите, то можно без проблем посылать почту на
	<email>yourlogin@example.FreeBSD.org</email>.</para>

      <para>Однако, если Вы видите это:</para>

      <screen>&prompt.root; <userinput>host example.FreeBSD.org</userinput>
example.FreeBSD.org has address 204.216.27.XX
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org</screen>

      <para>то вся почта, посланная на <hostid
	role="fqdn">example.FreeBSD.org</hostid> будет собираться на
	<hostid>hub</hostid> (для того же пользователя), вместо того, чтобы
	быть отосланной непосредственно на Ваш хост.</para>

      <para>Эта информация обрабатывается Вашим DNS сервером.  Соответствующая
	запись DNS, указывающая, через какой хост будет проходить Ваша
	почта, называется MX (от англ. <emphasis>M</emphasis>ail
	e<emphasis>X</emphasis>changer).  Если для хоста отсутствует такая
	запись, почта будет прихоть прямо на этот хост.</para>

      <para>Допустим, что запись MX для хоста <hostid
	role="fqdn">freefall.FreeBSD.org</hostid> в какой-то момент
	выглядела так:</para>

      <programlisting>
freefall		MX	30	mail.crl.net
freefall		MX	40	agora.rdrop.com
freefall		MX	10	freefall.FreeBSD.org
freefall		MX	20	who.cdrom.com</programlisting>

      <para>Вы видите, что для хоста <hostid>freefall</hostid> существуют
	несколько MX-записей.  Запись с наименьшим номером соотвествует
	хосту, на который в конце-концов попадет почта для
	<hostid>freefall</hostid>; другие будут временно сохранять почту для
	<hostid>freefall</hostid>, если тот по какой-либо причине
	недоступен.</para>

      <para>Чтобы альтернативные MX-хосты использовались наиболее
	эффективно, они должны быть независимо подключены к Интернет.  Ваш
	провайдер (или дружественный сайт) скорее всего без проблем сможет
	оказать подобные услуги.</para>
    </sect2>

    <sect2 id="mail-domain">
      <title>Почта для Вашего домена</title>

      <para>Вам может понадобиться создать почтовый сервер, который будет
	<quote>перехватывать</quote> почту, адресованную рабочим станциям в
	Вашем домене.  Затем пользователи будут забирать почту либо
	непосредственно с сервера, либо по протоколам POP или IMAP.</para>

      <para>Чтобы облегчить себе (и другим) жизнь, создайте на обеих машинах
	аккаунты с одинаковыми именами пользователей, например, с помощью
	команды <command>adduser</command>.</para>

      <para>Сервер, который Вы будете использовать в качестве почтового,
	должен быть объявлен таковым для каждой машины в домене.  Вот
	фрагмент примерной конфигурации:</para>

      <programlisting>
example.FreeBSD.org	A	204.216.27.XX		; Рабочая станция
			MX	10 hub.FreeBSD.org	; Почтовый шлюз</programlisting>

      <para>Таким образом, вся корреспонденция, адресованная рабочей
	станции, будет обрабатываться Вашим почтовым сервером, независимо от
	того, что указано в A-записи.</para>

      <para>Все это можно реализовать только в том случае, если Вы
	используете сервер DNS.  Если Вы по каким-либо причинам не имеете
	возможности установить свой собственный сервер имен, Вам нужно
	поговорить с Вашим провайдером услуг Интернет о предоставлении
	сервиса DNS для Вас.</para>

      <para>Если Вы хотите поддерживать несколько виртуальных почтовых
	серверов, Вам может пригодиться следующая информация.  Допустим, что
	Ваш клиент зарезервировал домен, например, <hostid
	role="domainname">customer1.org</hostid>, и Вам требуется, чтобы
	почта, предназначенная для <hostid
	role="domainname">customer1.org</hostid> приходила на Ваш хост,
	например, <hostid role="fqdn">mail.myhost.com</hostid>.  В таком
	случае, DNS должен выглядеть так:</para>

      <programlisting>
customer1.org		MX	10	mail.myhost.com</programlisting>

      <para>Заметьте, что если Вам требуется только получать почту для
	домена, соответствующая A-запись <emphasis>не</emphasis>
	нужна.</para>

      <note>
	<para>Помните, что если Вы попытаетесь каким-либо образом обратиться
	  к хосту <hostid role="domainname">customer1.org</hostid>, у Вас
	  вряд ли что-либо получится, если нет A-записи для этого
	  хоста.</para>
      </note>

      <para>Последнее, что Вы должны сделать &ndash; это сказать программе
	<application>sendmail</application>, для каких доменов и/или хостов
	она должна принимать почту.  Это можно сделать несколькими
	способами:</para>

      <itemizedlist>
	<listitem>
	  <para>Добавьте названия этих хостов в файл
	    <filename>/etc/sendmail.cw</filename>, если Вы используете
	    <literal>FEATURE(use_cw_file)</literal>.  Если у Вас sendmail
	    версии 8.10 или выше, то можно отредактировать файл
	    <filename>/etc/mail/local-host-names</filename>.</para>
	</listitem>

	<listitem>
	  <para>Добавьте строку <literal>Cwyour.host.com</literal> в файл
	    <filename>/etc/sendmail.cf</filename> или
	    <filename>/etc/mail/sendmail.cf</filename> (если у Вас sendmail
	    версии 8.10 или более поздней).</para>
	</listitem>
      </itemizedlist>
    </sect2>
  </sect1>
</chapter>
