The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Реализация виртуальных почтовых доменов в sendmail (sendmail mail virtual)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: sendmail, mail, virtual,  (найти похожие документы)
Date: Fri, 07 Sep 2001 18:28:15 +0400 Newsgroups: fido7.ru.unix.bsd From: Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> Subject: Реализация виртуальных почтовых доменов в sendmail DS> Hа одном IP-шнике два виpтуальных хоста name1.ru и name2.ru. DS> Мэйл сеpвеp на этой же машине. Хотелось бы иметь ящики с обоими доменными DS> именами. /* start of sendmail.txt */ Реализация виртуальных почтовых доменов. Очень часто возникает ситуация, когда на один компьютер заведено несколько доменов, и возникает необходимость в организации почтового сервера для них. Вот ряд проблем с которыми прихоится сталкиваться при организации почтового сервера для нескольких доменов на одном компьютере: 1. Предоставление почтовых адресов типа info@first.domain и info@second.domain. Проблема заключается в том, что на машине не может существовать два одинаковых пользователя и это не решить при помощи файла aliases. 2. Предоставление почтовых адресов user@first.domain только тем пользователям, который относятся к данному домену. 3. Разрешить пользователям отсылку только с имени того домена к которому они преписаны. И так... Hачнем с DNS. Есть машина с именем mail.relay, необходимо сделать так, чтобы почта с доменов first.domain и second.domain, приходила на эту машину. Для этого вносим MX записи в неоходимые зоны: first.domain IN MX 10 mail.relay ; запись в домене first.domain second.domain IN MX 10 mail.relay ; запись в домене second.domain Желательно наличие запасного почтового релея, для каждого домена, на случай отказа от принятия почты основным по какой либо причине. Запасной релей указывается с меньшим приоритетом: first.domain IN MX 20 safe.mail.relay ; запись в домене first.domain Так же необходимо чтобы запасной релей позволял принимать, в случае выхода из строя основного релея, почтовые сообщения. Обычно (для стандартной поставки sendmail 8.9.1) это делается внесением в файл relay-domains имени домена. В нашем случае first.domain. Теперь необходимо сказать почтовому домену о том, что он принимает на себя почту для доменов first.domain и second.domain. Для этого существует файл sendmail.cw, либо надо внести изменеия в файл sendmail.cf в разделе Cw. Пример файла sendmail.cw: first.domain second.domain Пример из файла sendmail.cf: [skip] Cwlocalhost first.domain second.domain # file containing names of hosts for which we receive email [skip] После этого переходим к проблеме номер 1. ²Теперь наш почтовый релей принимат почту для двух доменов: first.domain и second.domain, и нам необходимо создать два почтовых адреса: info@first.domain и info@second.domain. Если в файл aliases внести такие записи info@first.domain: user1 info@second.domain: user2 то при выполнение команды newaliases мы получим ошибку: aliases: line N: info@second.domain... Warning: duplicate alias name info Для решения подобных проблем используется virtusertable, таблица виртуальных пользователей почтового сервера. Активация этой опции производится при создании файла sendmail.cf, путем определения virtusertable в файле mail.relay.mc. Мы создадим этот файл в директории пакета sendmail 8.9.1 SENDMAIL_SOURCE/cf/cf: divert(-1) # divert(0)dnl VERSIONID(`@(#)generic-solaris2.mc 8.7 (Berkeley) 5/08/98') OSTYPE(your_os)dnl DOMAIN(relay.domain)dnl FEATURE(virtusertable, `dbm /etc/virtusertable')dnl MAILER(smtp)dnl Так же необходимо создать файл relay.domain.m4 в директории SENDMAIL_SOURCE/cf/domain. Его общий вид: divert(-1) # divert(0) VERSIONID(`@(#)fima.net.m4 8.8 (Berkeley) 5/08/98') define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/ .forward')dnl define(`confCF_VERSION', `relay.domain')dnl FEATURE(redirect)dnl FEATURE(use_cw_file)dnl (Последня запись используется для организации файла sendmail.cw, о котором говорилось ранее) Этот файл будет используется для компиляция файла sendmail.cf: m4 ../m4/cf.m4 domain.mc > sendmail.cf После этого копируем файл sendmail.cf в директорию /etc (для solaris - /etc/mail). Теперь нам необходимо составить таблицу пользователей. Для этого мы напишем файл virtusertable.in в /etc (или /etc/mail для solaris): info@first.domain user1 info@second.domain user2 Так как мы определяли virtusertable как `dbm /etc/mail/virtusertable', то в данном случае мы используем dbm для хранения базы виртуальных пользователей. Есть возможность использовать hash (и другие форматы), тогда наше определение долно выглядеть так - `hash /etc/mail/virtusertable'. После этого выполним команду: /usr/sbin/makemap dbm virtusertable < virtusertable.in (Соответвенно, если мы используем hash тип таблиц, то команда выглядит так: /usr/sbin/makemap hash virtusertable < virtusertable.in). Запускаем sendmail. Теперь мы получили два почтовых ящика - info@first.domain и info@second.domain - на одной машине relay.domain. А как быть с пользователем user3, который не должен использовать почтовый ящик доменов first.domain и second.domain? Если мы не указываем его принадлежность к доменам в файле virtusertable.in, то он имеет возможность использовать два почтовых адреса: user3@first.domain и user3@second.domain. Для того чтобы избежать данной ситуациив файл virtusertable.in добавляем следующие строчки: #old lines info@first.domain user1 info@second.domain user2 #new lines @first.domain error:nouser No such user here @second.domain error:nouser No such user here и выполняем команду: /usr/sbin/makemap dbm virtusertable < virtusertable.in После этого получается что в домене first.domain существует толко один почтовый адрес info@first.domain и почта приходящая на этот адрес будет попадать к локальному пользователю под именем user1. Соответсвенно то же самое с доменом second.domain и пользователем user2. Если в конфигурации sendmail не указано более никаких доменов, то пользовател user3 имеет только локальный почтовый адрес user3@localhost. Hеобходимо помнить, что если вы закрываете домен строчкой: @first.domain error:nouser No such user here то в файле virtusertable.in необходимо явно указать всех пользователей этого домена. Теперь о тертьей проблеме. Это когда пользователь user1, который приписан к домену first.domain (почтовый ящик info@first.domain), по каки либо причинам решил послать письмо с домена second.domain. Для того чтобы подобного не было используется файл, где указывается с кокого домена данный пользователь может посылать почту. Вернее пользователь может посылать с любого доступного с данной машины домена, но его адрес будет подменятся тем, который указан администратором. Для реализации данной возможности используется опция genericstable. В файле mail.relay.mc добавим следующие строчки: FEATURE(genericstable, `dbm /etc/genericstable')dnl GENERICS_DOMAIN_FILE(/etc/sendmail.cG)dnl Выполняем команду m4 ../m4/cf.m4 domain.mc > sendmail.cf и копирум файл sendmail.cf в /etc. После этого создаем файл genericstable.in: user1 info@first.domain user2 info@second.domain user3 user3@localhost Так же создаем файл sendmail.cG, в который вносим домены, на которые распространяются правила файла genericstable.in: first.domain second.domain localhost Таким образом, лубая почта пользователя user1, при любой настройке почтового клиента будет иметь в поле From: info@first.domain, поле Reply-To остается неизменным. Hеобходимо помнить, что пользователи не указаные в файле genericstable.in могу использовать любой из доменов, относящихся к этой машине. Выполняем команду: /usr/sbin/makemap dbm genericstable < genericstable.in и перезапускаем sendmail: kill -HUP Конечно это не единственный способ организации виртуального почтового сервера и не все возможности masquerading и relaying. Если вы что то не поняли из вышеизложенного (это вполне вероятно, так как очень сложно излагать свои мысли о sendmail :)), то пишите. (c) Андрей Ефимочкин 16.10.1998. /* end of sendmail.txt */ Eugene --

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, Павел (??), 08:44, 12/09/2007 [ответить]  
  • +/
    Подскажите, плиз, для чего конкретно нужен файл sendmail.cw, где можно посмотреть его формат, и где в sendmail.cf запись о его наличии? Да, и не достаточно ли будет прописать в sendmail.cf в параметрах Dj и C{w} вместо одного домена два? Спасибо.
     
  • 2, fruit.dev (?), 22:35, 16/07/2008 [ответить]  
  • +/
    оригинал статьи: http://www.fima.net/sendmail.html
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру