[exim-conf] Два почтовых сервера

Victor Ustugov victor на corvax.kiev.ua
Вс Окт 12 18:52:31 EEST 2008


Pavel Prikhodko wrote:
> Добрый день!

привет

> Имеется: 2 канала на разных провайдеров, подключенных к двум серверам 
> FreeBSD 7.0.
> На серверах стоит текущий паровоз.
> 
> На одном из серверов хранится база почтовых адресов для моих доменов.
> На данный момент связка работает как обычно, т.е. если второй сервер 
> получает запрос на прием письма - он обращается к первому, проверяет 
> адрес и т.д.
> 
> Хочется сделать так, что-бы второй почтовик мог самостоятельно знать все 
> адреса которые мы принимаем.
> 
> На данный момент база адресов хранится в базе MySQL первого сервера, 
> скриптом из нее создается файл для конструкции
> define(`confSMTP_AUTH_PASSWD',`/usr/local/etc/passwd.imap')dnl
> 
> На сколько я понимаю, можно примерно такой же файл формировать и на 
> втором сервере.

самое простое - при формировании на первом сервере файла passwd.imap все 
эти же данные сохранять на втором сервере в виде файла 
recipients_invalid. этот файл используется при применении фичи 
confCHECK_RCPT_INVALID. сама по себе фича порядком устарела и может быть 
заменена с помощью confCHECK_RCPT_ACCESS, но для данного случая она 
вполне подходит.

тебе нужно будет указать всех пользователей всех своих доменов в файле 
recipients_invalid в виде:

domain1 : !domain1_rcpt1 : !domain1_rcpt2 : !domain1_rcpt3 : *
domain2 : !domain2_rcpt1 : *
domain1 : !domain3_rcpt1 : !domain3_rcpt2 : *


т. е. указывается по одному домену в строке, двоеточиями отделены все 
мейлобоксы и алиасы данного домена, перед мейлбоксами/алиасами 
указывается всклицательный знак, в конце указывается звездочка.

т. к. этот файл перечитывается при каждом лукапе, то при его модификации 
не нужно будет релоадить exim.


автоматизация процесса конвертации списка пользователей твоих доменов 
будет зависеть от того, чем и от чьего имени ты формируешь passwd.imap 
из MySQL базки. как правило хватает SSH авторизации по ключам, возможно 
с беспарольным sudo для пользователя www на первом сервере для 
выполнения команды ssh от имени другого пользователя.

гм... получилось непонятно...

ладно, вот примерно как это можно сделать (я исхожу из того, что 
пользователей ты добавляешь через веб морду и из нее же будет запущен 
скрипт, который должен выложить файл на второй сервер):

1. ты создаешь на второй сервере (на бекапном MX'е) пользователя, 
который будет иметь право на запись в файл 
/usr/local/etc/exim/recipients_invalid (проще всего сделать его 
владельцем этого файла). пусть для примера это будет пользователь user2
2. ты создаешь на первом сервере отдельного пользователя, пусть это 
будет user1, генерируешь для него ключ, выкладываешь его пользователю 
user2. теперь user1 с первого сервера может без ввода пароля логинится 
на второй сервер под именем user2.
3. на первом сервере ты создаешь скрипт, который будет копировать некий 
текстовый файл с первого сервера на второй и заменять содержимое 
usr/local/etc/exim/recipients_invalid содержимым этого файла. возможно 
получится прямо cat'ом влить по ssh содержимое без создания 
промежуточного файла на втором сервере.
4. ты даешь пользователю www беспарольное sudo на запуск вышеуказанного 
скрипта от имени пользователя user1

это что касается настройки.

теперь что касается использования:

1. ты редактируешь набор учетных записей и алиасов через веб морду.
2. веб морда формирует локальный файл passwd.imap
3. веб морда формирует локальный файл recipients_invalid
4. веб морда через беспарольное sudo запускает от имени user1 скрипт, 
который авторизуясь по ключам, вливает содержимое локального файла 
recipients_invalid на удаленный сервер в каталог /usr/local/etc/exim

где-то так должно получиться

-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 32418694  nic-handle: CRV2-RIPE, CRV-UANIC




Подробная информация о списке рассылки exim-conf