URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 94449
[ Назад ]

Исходное сообщение
"Exim4 + aliases"

Отправлено NeonGloss , 11-Мрт-13 16:51 
Добрый день

схема работы почты такая:
почта приходит на фронт-энд - ubuntu+exim4+spamassassin++
фильтруется, очищается и пересылается на exch2007(как бэк-энд)

почта ходит все норм, но по приему почты exim4 должен искать "локальныую часть" адреса в /etc/aliases и менять "домен.com" на дом.local

а он этого не делает. Подскажите что и где не так.

и не понятно вот еще что: local_domanin  указывать мой домен как локальный, или он всеже внешний для фронт-энда?
если указывать, то подскажите где его указывать.. что-то перерыл все, но 100% "того" параметра не нашел.

cat /etc/aliases
11111@домен.com      11112@дом.local

cat 400_exim4-config_system_aliases

### router/400_exim4-config_system_aliases
#################################

# This router handles aliasing using a traditional /etc/aliases file.
#
##### NB  You must ensure that /etc/aliases exists. It used to be the case
##### NB  that every Unix had that file, because it was the Sendmail default.
##### NB  These days, there are systems that don't have it. Your aliases
##### NB  file should at least contain an alias for "postmaster".
#
# This router handles the local part in a case-insensitive way which
# satisfies the RFCs requirement that postmaster be reachable regardless
# of case. If you decide to handle /etc/aliases in a caseful way, you
# need to make arrangements for a caseless postmaster.
#
# Delivery to arbitrary directories, files, and piping to programs in
# /etc/aliases is disabled per default.
# If that is a problem for you, see
#   /usr/share/doc/exim4-base/README.Debian.gz
# for explanation and some workarounds.

system_aliases:
  debug_print = "R: system_aliases for $local_part@$domain"
  driver = redirect
  domains = +local_domains
  allow_fail
  allow_defer
  data = ${lookup{$local_part}wildlsearch{/etc/aliases}}
  #${lookup{$local_part}wildsearch{/etc/aliases}}
#  .ifdef SYSTEM_ALIASES_USER
#  user = SYSTEM_ALIASES_USER
#  .endif
#  .ifdef SYSTEM_ALIASES_GROUP
#  group = SYSTEM_ALIASES_GROUP
#  .endif
#B .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
#  file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
#  .endif
#  .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
#  pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
#  .endif
#  .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
#  directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
# .endif

Подскажите пожалуйста логику всего этого?


Содержание

Сообщения в этом обсуждении
"Exim4 + aliases"
Отправлено McLeod095 , 11-Мрт-13 19:06 
>[оверквотинг удален]
> #B .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
> #  file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
> #  .endif
> #  .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
> #  pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
> #  .endif
> #  .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
> #  directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
> # .endif
> Подскажите пожалуйста логику всего этого?

Конечно наверное не в тему, но все же. А Вас не достает каждый раз править файл /etc/aliases. Может стоит посмотреть в другую сторону, где меньше этой работы. Да и если уж на то пошло. То проверять есть ли такой получатель можно уже и запросами к LDAP. а там нам уже не важно какой у него домен, если есть такой localpart, то вперед заменяем domain и шлем на exchange. Я сам поднимал ни одну связку exim+exchange. Мало того, есть связки exim+dovecot+AD, где все почтовые адреса и правила пересылки почты хранятся в AD, а на exim только один раз настроено.


"Exim4 + aliases"
Отправлено NeonGloss , 12-Мрт-13 07:48 

> Конечно наверное не в тему, но все же. А Вас не достает
> каждый раз править файл /etc/aliases. Может стоит посмотреть в другую сторону,
> где меньше этой работы. Да и если уж на то пошло.
> То проверять есть ли такой получатель можно уже и запросами к
> LDAP. а там нам уже не важно какой у него домен,
> если есть такой localpart, то вперед заменяем domain и шлем на
> exchange. Я сам поднимал ни одну связку exim+exchange. Мало того, есть
> связки exim+dovecot+AD, где все почтовые адреса и правила пересылки почты хранятся
> в AD, а на exim только один раз настроено.

К сожалению есть необходимость в ведении данного списка.



"Exim4 + aliases"
Отправлено Bosh , 11-Мрт-13 20:36 
У вас НЕ правильное понимание работы wildlsearch
http://www.lissyara.su/doc/exim/4.70/file_and_database_lookups/
читайте
9.3 Одноключевые типы поиска

>[оверквотинг удален]
> #B .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
> #  file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
> #  .endif
> #  .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
> #  pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
> #  .endif
> #  .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
> #  directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
> # .endif
> Подскажите пожалуйста логику всего этого?


"Exim4 + aliases"
Отправлено NeonGloss , 19-Мрт-13 09:21 
Прочел, пытаюсь применить....

но не заменяет.
Как бы проверить, в какой последовательности exim4 обрабатывает отсылку адреса?

И где блин в конфигах exim4"ого явно указывается кто такие local_domain
обыскался уже((


"Exim4 + aliases"
Отправлено Спокойный аноним , 19-Мрт-13 10:10 
> Как бы проверить, в какой последовательности exim4 обрабатывает отсылку адреса?

у exim  прекрасный инструментарий отладки, все нюансы расписаны в exim/doc/spec.txt
если вам лень вникать в отладку по роутерам/транспортам/фильтрам, можете
использовать общий дебаг: exim -bd -d +all


> И где блин в конфигах exim4"ого явно указывается кто такие local_domain
> обыскался уже((

попробуйте grep :)  
список local_domains определяется там же, где определяются все не сессионные переменные, прямо в начале exim4.conf


"Exim4 + aliases"
Отправлено NeonGloss , 19-Мрт-13 11:52 

> список local_domains определяется там же, где определяются все не сессионные переменные,
> прямо в начале exim4.conf

не, я нашел конечно определение этого параметра, но там опять ссылка


domainlist local_domains = MAIN_LOCAL_DOMAINS

а вот куда ведет main... непонятно уже.

Но файла exim4.conf - вообще нет. я так понял его заменили на exim4.conf.template
или его можно разбить на маленькие файлы запиханые в под директории /exim4/conf.d/..

еще вопрос по моему пониманию:

правильно ли рассуждаю:
указываем local_domains после чего при проходе маршрутов при получении письма, оно доходит до алиасов, там если доменная часть адреса совпадает с local_domanis, то exim парсит aliases в поисках "локальной части"(что до символа @), когда находит - заменяет адрес на нужный мне локальная_часть@локальный_домен; после чего :
driver = redirect
то есть запускает письмо заново с самого начала и уже отправляется на мой локальный серв exchenge2007.

Все ли верно говорю? (просьба поправить если есть неверности)

и если я верно говорю, то локальный_домен не должен входить в local_domains, или всеравно?


"Exim4 + aliases"
Отправлено Спокойный аноним , 19-Мрт-13 13:30 
> правильно ли рассуждаю:
> указываем local_domains после чего при проходе маршрутов при получении письма, оно доходит
> до алиасов, там если доменная часть адреса совпадает с local_domanis, то
> exim парсит aliases в поисках "локальной части"(что до символа @), когда

Это зависит от условия в роутере

> находит - заменяет адрес на нужный мне локальная_часть@локальный_домен; после чего :
> driver = redirect
> то есть запускает письмо заново с самого начала и уже отправляется на
> мой локальный серв exchenge2007.

Отправляет в следующий роутер при совпадении доменных частей и в новый процесс, если другой домен. Если не указано явно какой роутер, то следующий по списку, как есть.

> Все ли верно говорю? (просьба поправить если есть неверности)

Почти да, если пренебречь нюансами.

> и если я верно говорю, то локальный_домен не должен входить в local_domains,
> или всеравно?

Если не указано явно, роутер будет срабатывать для любого домена, то есть local_domains=*
если ваш почтовик обслуживает много доменов, для каждого из них можно написать свои роутеры и, также, использовать универсальные.
Проверить логику, как сработают роутеры: exim -bt user@domain


"Exim4 + aliases"
Отправлено NeonGloss , 03-Апр-13 10:14 
((( нифига не понятно, говоришь что я пропускаю нюансы, дак они ж самые важные...... (((

>> правильно ли рассуждаю:
>> указываем local_domains после чего при проходе маршрутов при получении письма, оно доходит
>> до алиасов, там если доменная часть адреса совпадает с local_domanis, то
>> exim парсит aliases в поисках "локальной части"(что до символа @), когда
>Это зависит от условия в роутере

от условий в каком роутере? что в них и где можно прописать?

>Отправляет в следующий роутер при совпадении доменных частей и в новый процесс, если другой домен. Если не указано явно какой роутер, то следующий по списку, как есть.

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

Очень буду признателен за разьяснения...


"Exim4 + aliases"
Отправлено нуб , 05-Ноя-13 16:47 
> Проверить логику, как сработают роутеры: exim -bt user@domain

СПАСИБО!!! Именно этой команды мне по жизни не хватало для отладки косяков  в настройках эксима!!! Спасибо!!!


"Exim4 + aliases"
Отправлено DeadLoco , 03-Апр-13 14:29 
> Прочел, пытаюсь применить...

Не читайте всякую хрень, особенно, если она не относится к делу.
В вашем случае нужно настроить блок рерайта в конфиге экзима.

begin rewrite
*@domain.com   $local_part@dom.local       Eh

http://www.exim.org/exim-html-current/doc/html/spec_html/ch-...


"Exim4 + aliases"
Отправлено NeonGloss , 04-Апр-13 15:03 
>> Прочел, пытаюсь применить...
> Не читайте всякую хрень, особенно, если она не относится к делу.
> В вашем случае нужно настроить блок рерайта в конфиге экзима.

Класс, пасиб за идею.

Но мне ж нужно чтоб письма по адресам приходили только тем, что в Алиасах или другом(любом) файле. Как бы это сделать в связке с rewrite?


"Exim4 + aliases"
Отправлено DeadLoco , 04-Апр-13 15:43 
> Но мне ж нужно чтоб письма по адресам приходили только тем, что
> в Алиасах или другом(любом) файле. Как бы это сделать в связке
> с rewrite?

Раздел 31.11 подробно описывает реализацию подобного:

begin rewrite
*@domain.com   ${lookup{$1}lsearch{/path/to/the/dom1.aliases}{$1}fail}@dom1.local       Eh
*@domain.com   ${lookup{$1}lsearch{/path/to/the/dom2.aliases}{$1}fail}@dom2.local       Eh

Файлы /path/to/the/domХ.aliases выглядят так:

### dom1.local
vasya
petya
kolya
###
-------
### dom2.local
masha
nadya
sveta
###

Если приходит письмо на адрес блаблабла@domain.com, рерайт делает попытку выполнить замену. Для этого он от исходного адреса отрезает все до собаки в переменную $1, которую затем пытается найти в файле /path/to/the/domX.aliases. Если строка блаблабла нашлась, она подставляется в локалпарт сгенеренного адреса. Если не нашлась, опция fail говорит рерайту, что это правило нужно пропустить и перейти к следующему.


"Exim4 + aliases"
Отправлено NeonGloss , 04-Апр-13 15:31 
и опять приходим к вопросу "как парсить файл и найти нужную строку" (((
в ссылке - dbm используется... но у меня же просто файл, не база...

"Exim4 + aliases"
Отправлено DeadLoco , 04-Апр-13 15:47 
> и опять приходим к вопросу "как парсить файл и найти нужную строку"  (((
> в ссылке - dbm используется... но у меня же просто файл, не база...

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

> Как читать разделы "9. File and database lookups" и "11. String expansions" документации экзима?