Множество людей и компаний в наше время заводят себе собственные
доменные имена и хотят получать на них почту. Они могут платить
за это своим провайдерам или делать это сами. Это статья
рассказывает, как сделать это самому и организовать виртуальный
хостинг на базе sendmail. Предполагается, что читающий владеет
некоторыми знаниями sendmail, администрирования Unix и протоколов
Интернет. Лучший источник информации по sendmail -- в этой книге:
Sendmail, 2nd Edition.
[http://www.ora.com/catalog/sendmail2/noframes.html].
Конфигурирование DNS.
Для начала вы должны зарегистрировать домен и настроить под него
DNS.
1. Выберите свободное доменное имя. В нашем примере мы будем
использовать имя yourdomain.com.
2. Настройте две машины как первичный и вторичный DNS-сервера.
Мы предполагаем, что вы знаете, как это сделать, однако очень
рекомендуем к прочтению книгу ``DNS and BIND, 4th Edition''
[http://www.ora.com/catalog/dns4/]
3. Сконфигурируйте MX-записи для своего домена (Замечание:
CNAME-записи не могут быть использованы; см. 5.2.2
[http://www.sendmail.org/rfc/1123.html#5.2.2] или RFC 1123
[http://www.sendmail.org/rfc/1123.html] для деталей.) Записи MX
обсуждаются в книге sendmail в главе 15.3, как сконфигурировать
их описано в главе 21.3. У вас есть два варианта настройки:
o Если сервер, который будет обслуживать почту для вашего
домена имеет постоянное подключение к Интернету, он должен
быть описан как первичный MX-хост для этого домена. В этом
случае MX-запись будет выглядеть примерно так:
yourdomain.com. IN MX 10 yourmailserver.yourdomain.com.
o Иначе, вы должны будете найти машину, которая будет
накапливать почту для вас в то время, когда вы не подключены
к Интернету. Эта машина должна быть настроена так, чтобы
релеить ваш домен. Если она построена на базе sendmail, то
для этого будет достаточно добавить ваш домен в файл
relay-domains. Вы должны будете упомянуть эту машину в ваших
MX-записях:
yourdomain.com. IN MX 10 yourmailserver.yourdomain.com.
yourdomain.com. IN MX 20 othermailserver.otherdomain.com.
4. После того, как DNS-серверы будут готовы, зарегистрируйте
домен с помощью одного из регистраторов.
[http://www.internic.net/regist.html]
Настройка sendmail.
Теперь пришло время настроить sendmail.
1. Загрузите sendmail с ftp://ftp.sendmail.org/pub/sendmail/. Вы
автоматически получите короткое сообщение, в котором будет версия
последнего релиза. Все инструкции ниже относятся к версии 8.10.0
и выше.
2. Скомпилируйте и установите sendmail на свою машину. В
большинстве случаев это процедура состоит из распаковывания
архива, чтения README и sendmail/README файлов и запускания
команды Build в директории sendmail. Смотрите файл INSTALL в
для дополнительной информации.
3. Сконфигурируйте sendmail. Вот тут мы ударимся в детали.
a. Для начала прочтите cf/README файл целиком. Это даст вам
инструкции для написания .mc-файла в директории cf/cf. Ваш
mailserver.mc в общем случае будет выглядеть так:
В этом примере операционная система (OS) solaris2. Обычно
файл cf/domain/yourdomain.com.m4 выглядит так:
divert(-1)dnl
#
# This file contains the global definitions for yourdomain.com
#
divert(0)dnl
VERSIONID(`@(#)yourdomain.com.m4 1.0 (yourdomain.com) 5/1/97')
FEATURE(`use_cw_file')dnl
В нем может быть еще некоторое количество директив FEATURE() и
define(). Директива virtusertable -- это то, ради чего все
делается.
ВНИМАНИЕ: Если вы собрали sendmail с NEWDB вместо NDBM, вы
должны изменить dbm на hash в строке описания virtusertable.
b. Сгенерируйте ваш файл /etc/mail/sendmail.cf из файла
mailserver.mc:
cd sendmail-VERSION/cf/cf
./Build mailserver.cf
cp mailserver.cf /etc/mail/sendmail.cf
4. Создайте таблицу виртуальных пользователей. Во всех деталях это
описано в главе 19.6.28 книги sendmail; здесь приведено в
общих чертах. Таблица -- это база данных, которая отображает
виртуальные адреса в реальные. Создайте текстовый файл, каждая
строка которого состоит из пары ключ/значение разделенных
символом табуляции. Например:
В первом примере адрес joe@yourdomain.com будет отображен в
локального пользователя jschmoe, jane@yourdomain.com будет
отображен в удаленный адрес jdoe@othercompany.com, а все
остальное, что придет в домен yourdomain.com будет переправлено
пользователю jschmoe.
joe@yourdomain.com jschmoe
bogus@yourdomain.com error:nouser No such user here
list@yourdomain.com yourdomain-list
@yourdomain.com %1@othercompany.com
Во втором примере адрес joe@yourdomain.com будет отображен в
локального пользователя jschmoe, адрес bogus@yourdomain.com
вернет ошибку, адрес list@yourdomain.com будет отображен в
локального пользователя yourdomain-list (которого вы можете
использовать для списка рассылки) и любой другой пользователь в
домене yourdomain.com будет отображен в одноименного удаленного
пользователя домена othercompany.com.
Замечание 1: Если у вас есть локальный пользователь, скажем
sam, и для него отсутствует правило для отображения (либо
персональное, либо правило вида @yourdomain.com), sendmail
все равно доставит почту локальному пользователю sam. Чтобы это
избежать вы должны либо использовать выделенные ключи для
пользователей со значением error:nouser, либо использовать
общие правила (в оригинале ``all-catch keys'').
Замечание 2: Если вы хотите отображать один виртуальный адрес в
несколько реальных, вы не должны делать этого напрямую.
Сделайте отображение виртуального адреса в один реальный, а его
отобразите на несколько при помощи локального файла алиасов.
Например в таблице виртуальных пользователей:
Замечание 3: Допускается использование нескольких доменов,
виртуальные адреса в каждом домене независимы. Например вы
можете сделать так:
joe@yourdomain1.com localjoe
joe@yourdomain2.com joe@othercompany.com
joe@yourdomain3.com localjoe
joe@yourdomain4.com error:nouser No such user here
Для людей, администрирующих несколько доменов вероятно будет
проще вести списки виртуальных пользователей в отдельных файлах
для каждого домена, а потом написать небольшой скрипт, который
бы объединял все эти файлы в один. Но здесь мы опережаем себя.
Это следующая ступень.
5. Соберите файл виртуальных пользователей. Если текстовый файл
виртуальных пользователей сохранен под именем sourcefile и вы
используете базу данных dbm, используйте команду:
makemap dbm /etc/mail/virtusertable < sourcefile
Эта команда создаст один или несколько не-текстовых файлов
(обычно это /etc/mail/virtusertable.dir и
/etc/mail/virtusertable.pag, или /etc/mail/virtusertable.db),
но не меняет файл /etc/mail/virtusertable, поэтому файл
/etc/mail/virtusertable -- рекомендованное расположение для
исходной таблицы.
6. Если вы хотите использовать обратное отображение локальных
пользователей для исходящей почты, вы должны добавить поддержку
для generics-таблицы в ваш .mc файл:
и создать файл /etc/mail/genericstable, который выглядит как
/etc/mail/virtusertable с той разницей, что колонки поменяны
местами:
jschmoe joe@yourdomain.com
Замечание. Вы можете обратиться также к статье ``Masquerading
and Relaying'' [http://www.sendmail.org/m4/masquerading.html].
7. Добавьте имя вашего домена в класс w. Обычно для этого
достаточно добавить его имя в файл local-host-names также
известный как sendmail.cw в версиях sendmail до 8.10.
Также, если вы используете genericstable, вы должны добавить
имена всех доменов, для которых вы хотите обратного отображения
в файл /etc/mail/generics-domains.
9. Перезапустите sendmail или пошлите ему сигнал SIGHUP.
Заметим, что вы НЕ должны перезапускать sendmail при изменении
таблиц виртуальных пользователей или таблиц обратного
отображения. Перезапуск требуется только в случае изменения
/etc/mail/sendmail.cf или файлов класса, таких как
local-host-names.
Есть дополнительный шаг для тех хостов, которые не подключены к
Интернету постоянно. Когда вы подключаетесь, вы должны
спровоцировать доставку сообщений, накопленных на вторичном
почтовом сервере. Для этого, когда ваш первичный сервер
соединяется, вы должны выполнить скрипт etrn.pl, который
находится в директории contrib поставки sendmail.
etrn.pl secondary-mx-host yourdomain.com
Советуем поместить эту строку в конец скрипта, который запускает
sendmail. Еще лучше поместить эту строку в скрипт
инициализирующий подключение в интернету на первичном MX.
На этом все, пользователи должны получить возможность посылать
почту на адреса @yourdomain.com. Однако, было бы неплохо
протестировать конфигурацию и быть уверенными, что все работает,
как надо перед тем, как оглашать новое доменное имя и почтовые
адреса для него. Если что-то не работает, как ожидается, вы
можете проверить это с помощью тестового режима sendmail:
sendmail -bt
Вот несколько примеров вещей, которые можно попробовать
протестировать:
# убедитесь, что домен находится в классе w:
$=w
# отображение работает?
/map virtuser joe@yourdomain.com
/map virtuser jane@yourdomain.com
/map virtuser @yourdomain.com
# обратное отображение?
3,0 joe@yourdomain.com
3,0 some@yourdomain.com
Если у вас что-то не получается и вы не можете найти ответы в
различных README, которые идут вместе с sendmail, в sendmail FAQ
[http://www.sendmail.org/faq/], или в книге sendmail
[http://www.ora.com/catalog/sendmail2/noframes.html], вы можете
послать письмо на sendmail-questions@sendmail.org с просьбой о
помощи.