Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Eugene Grosbein                      2:5006/1       15 Jan 2002  12:17:46
 To : Pavel A. Kasihin
 Subject : Re: Mail server
 -------------------------------------------------------------------------------- 
 
  PAKA> неужели это единственное решение данной задачи, может кто всетаки
  PAKA> подскажет как создавать виртуальне домены и виртуальных  юзеров в
  PAKA> сендмаиле?
 
 Для старого sendmail, так что читать вдумчиво.
 
    Реализация виртуальных почтовых доменов.
    
    Очень часто возникает ситуация, когда на один компьютер заведено
    несколько доменов, и возникает необходимость в организации почтового
    сервера для них. Вот ряд проблем с которыми прихоится сталкиваться при
    организации почтового сервера для нескольких доменов на одном
    компьютере:
    
    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.
 --- slrn/0.9.7.3 (FreeBSD)
  * Origin: Svyaz Service JSC (2:5006/1@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Mail server   Eugene Grosbein   15 Jan 2002 12:17:46 
Архивное /ru.unix.bsd/2609336033823.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional