Sendmail UUCP
1) Если у вас уже установлен и функционирующий DNS или есть ссылка на DNS-сервер (в файле /etc/resolv.conf), а также у вас активное соединение с интернетом, пропустите этот раздел. У вас всё в порядке. Не требуется никаких дополнительных действий. Переходите к пункту 2).
Если ваша машина использует UUCP для обработки почты, то вам, вероятно, не нужно настраивать bind/resolv в sendmail.
Как правильно настроить канонизацию имен на машине без DNS:
ЧАСТЬ I
Если у вас предустановленный sendmail с поддержкой BIND, это будет работать (как в случае с RedHat, который включает в себя sendmail).
а) Используйте мой метод на основе m4-файла, описанного ниже. Этот вариант подойдет, если вы не настаиваете на пунктах б) или в), указанных ниже.
б) Если вы свяжетесь со мной, я предоставлю вам версию sendmail без BIND (версия 8.8.5). Возможно, RedHat должен был бы предоставить две версии sendmail (по аналогии со Slackware) - одну с поддержкой BIND и одну без.
в) Самый быстрый способ получить sendmail без поддержки BIND — это отредактировать файл src/conf.h следующим образом:
# ifndef NAMED_BIND
conf.h:# define NAMED_BIND 0 /* использует Berkeley Internet Domain Server */
ЧАСТЬ II:
Sendmail обычно осуществляет поиск имени, чтобы определить имя машины, используя функцию gethostbyaddr() для каждого отправляемого письма, даже если вы запретили ему канонизацию имен.
а) Используйте IP-адреса в соответствии с RFC1597 IP (10.0.0.0-10.255.255.255, 172.16.0.0-172.31.255.255, 192.168.0.0-192.168.255.255). Отредактируйте файл /etc/hosts и добавьте в него строки, аналогичные примеру для myhost:
10.0.0.1 myhost.me.com myhost
б) Если вы используете NIS (кстати, похоже, что NIS включен в sendmail в дистрибутиве RedHat), убедитесь, что ваш файл /etc/nsswitch.conf содержит:
hosts: files dns
и добавьте в файл /etc/hosts строки, аналогичные примеру для myhost [снова используя IP-адреса в соответствии с RFC1597]:
10.0.0.1 myhost.me.com myhost
ЗАМЕЧАНИЕ: В обоих случаях важно использовать в файле /etc/hosts полное имя домена. Например, строка должна выглядеть как 10.0.0.1 myhost.me.com myhost
, а не 10.0.0.1 myhost
. Вам также потребуется определить макрос $w
для сохранения значения myhost.me.com
. Добавьте следующую строку в файл /etc/sendmail.cf после его компиляции:
Djmyhost.me.com
Или вы можете использовать функцию MASQUAREADE_AS(myhost.me.com) в .mc-файле, который описан ниже.
ВНИМАНИЕ! myhost — это примерное имя машины; вы не должны его использовать. Выберите уникальное имя для вашей машины, если у вас его еще нет.
2) Убедитесь, что у вас установлен makemap и он поддерживает хешированный формат, наиболее популярный формат dbm или хотя бы формат btree. В RedHat версия не поддерживает формат dbm. Обычно makemap поставляется вместе с sendmail.
НАСТРОЙКА (mc-файл)
1) Создайте свой .mc-файл с использованием вашего любимого редактора. Я называю этот файл my.mc.
а) Без DNS – отдельно стоящая машина:
include(`../m4/cf.m4')
VERSIONID(`Настройка машины me.com с uucp, создана xxxx -- без DNS')dnl
OSTYPE(linux)
FEATURE(nodns)dnl
FEATURE(nocanonify)dnl
FEATURE(always_add_domain)dnl
FEATURE(mailertable, hash /etc/mailertable)dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)
define(`SMART_HOST', uucp-dom:mysmarthost)
Давайте подробно разберемся с этим:
- include(`../m4/cf.m4') добавляет в обработку m4-макро, находящееся в каталоге ../m4/cf.m4, чтобы предусмотреть некоторые особенности.
- VERSIONID(`Настройка машины me.com с uucp, создана xxxx -- без DNS')dnl - это нужно для разделения разных версий .cf-файлов, которые вы можете создать.
- OSTYPE(linux) - это нужно, чтобы внести некоторые коррективы, связанные с Linux. Эту опцию можно оставить.
- FEATURE(nodns)dnl - говорит о том, что у нас нет DNS-сервера. Поэтому мы используем для почты только UUCP. Sendmail должен быть скомпилирован без поддержки BIND. Эта опция устарела. Я оставляю ее на случай, если у вас более старая версия пакета sendmail.
- FEATURE(nocanonify)dnl - не посылать адреса на $[ ... $] для канонизации. Обычно, если у вас sendmail собран с поддержкой BIND, то он будет пытаться преобразовать псевдоним/IP-адрес в каноническое имя с использованием DNS. Это не требуется, если вся ваша почта идет через UUCP, то есть у вас выделена на это машина.
- FEATURE(always_add_domain)dnl - эта функция добавляет домен к имени машины даже для локальной почты. Это не обязательно, но мне это нравится. Эта функция может быть потенциально опасной для спаммеров, которые могут воспользоваться этим, если у вас есть соответствующая настройка.
- FEATURE(mailertable, hash /etc/mailertable)dnl - указывает, что в файле /etc/mailertable находится хешированная база данных, где содержится информация о путях к соответствующим сайтам. Если вы не передаете UUCP-почту никому, это не требуется. Если вы хотите использовать формат dbm, следует использовать FEATURE(mailertable, dbm /etc/mailertable)dnl. Для формата btree используйте FEATURE(mailertable, btree /etc/mailertable)dnl.
- MAILER(local)dnl, MAILER(smtp)dnl, MAILER(uucp) - это методы доставки, которые мы используем.
- define(`SMART_HOST', uucp-dom:mysmarthost) - наш смарт-хост - это машина нашего провайдера, который указан в файле sys UUCP как system mysmarthost. Любое почтовое сообщение, с которым мы не можем справиться (например, для доменов или методов доставки, которые нам не известны), будет отправлено смарт-машине для дальнейшей обработки. Обратите внимание, что мы используем uucp-dom как метод доставки через UUCP. Это специальный метод доставки, использующий правила преобразования адресов, аналогичные smtp.
б) С использованием DNS:
include(`../m4/cf.m4')
VERSIONID(`Настройка машины me.com с uucp, создана xxxx -- с использованием DNS')dnl
OSTYPE(linux)
FEATURE(always_add_domain)dnl
FEATURE(mailertable, hash /etc/mailertable)dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)
define(`SMART_HOST', uucp-dom:mysmarthost)
II) Создаем собственный файл sendmail.cf
а) сохраните резервную копию вашего старого файла /etc/sendmail.cf
б) запишите новый файл sendmail.cf поверх старого командой: m4 my.mc > /etc/sendmail.cf
в) проверьте, что ваш файл sendmail.cf был правильно создан на основе спецификации.
Самая частая ошибка, с которой я сталкивался: - missing uucp-dom mailer (отсутствует способ доставки uucp-dom). Ошибка возникала из-за того, что я не вставлял строку о способе доставки smtp. На мой взгляд, важно, чтобы эта строка была указана до способа доставки uucp.
III) Создаем таблицу /etc/mailertable
Если вы никому не передаете UUCP-почту, вы можете пропустить этот шаг.
а) создайте или отредактируйте файл /etc/mailertable
Пример содержимого файла /etc/mailertable:
system1.org uucp-dom:system1
.system1.org uucp-dom:system1
down.com uucp-dom:down
up.down.com;error: Машина неизвестна me.com
.down.com uucp-dom:down
.me.com error: Машина неизвестна me.com
Здесь указано, что все сообщения, направляемые на адрес system1.org или *.system1.org, будут перенаправляться на систему system1 с использованием метода доставки uucp-dom (система system1 должна быть определена в файле sys UUCP). Другими словами, мы настраиваем маршрутизацию почты для *.system1.org. Подобный механизм применяется для down.com и его субдоменов, но с дополнительной фильтрацией: все сообщения, направленные на домен up.down.com, возвращаются обратно с использованием встроенного метода доставки "error" с сообщением "Машина неизвестна me.com". Эта строка добавлена по просьбе администратора машины down.com. Последняя строка отправляет обратно почту для всех наших несуществующих субдоменов.
б) создайте базу данных с помощью makemap:
Если вы используете хешированные базы (hash):
makemap hash /etc/mailertable < /etc/mailertable
Если вы используете dbm:
makemap dbm /etc/mailertable </etc/mailertable
Если вы используете btree:
makemap btree /etc/mailertable </etc/mailertable
Не забывайте обновлять базу каждый раз после изменения файла /etc/mailertable.
IV) Перезапустите sendmail
V) Протестируйте sendmail
а) выполните команду sendmail -bv user@destination
б) запустите sendmail -bt и вводите различные адреса, используя правила 3,0, и смотрите, какие преобразования происходят и какие правила применяются при этом.
Настройка завершена!