есть связка cyrus postfix roundcube почтовый сервер @123.345345.ru
c ящиком пользователем login1 password1
задача отправить переотправить всю исходящую почту с выше указанного сервера
с сервера @sss.ru с login2 password2Как это сделать?
> есть связка cyrus postfix roundcube почтовый сервер @123.345345.ru
> c ящиком пользователем login1 password1
> задача отправить переотправить всю исходящую почту с выше указанного сервера
> с сервера @sss.ru с login2 password2
> Как это сделать?Вы уж меня извините, но, что такое "отправить переотправить" или "указанного сервера с сервера", "c ящиком пользователе" и так далее... Если вы хотите увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои мысли доступным и понятным языком.
>> есть связка cyrus postfix roundcube почтовый сервер @123.345345.ru
>> c ящиком пользователем login1 password1
>> задача отправить переотправить всю исходящую почту с выше указанного сервера
>> с сервера @sss.ru с login2 password2
>> Как это сделать?
> Вы уж меня извините, но, что такое "отправить переотправить" или "указанного сервера
> с сервера", "c ящиком пользователе" и так далее... Если вы хотите
> увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои
> мысли доступным и понятным языком.А что не понятно? Пользователь отправляет сообщение с адреса 123@123.345345.ru на адрес fff@FFF на сервере @123.345345.ru это письмо не отправляется, а отправляется с сервера @sss.ru на котором у пользователя тоже почтовый ящик
>[оверквотинг удален]
>>> задача отправить переотправить всю исходящую почту с выше указанного сервера
>>> с сервера @sss.ru с login2 password2
>>> Как это сделать?
>> Вы уж меня извините, но, что такое "отправить переотправить" или "указанного сервера
>> с сервера", "c ящиком пользователе" и так далее... Если вы хотите
>> увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои
>> мысли доступным и понятным языком.
> А что не понятно? Пользователь отправляет сообщение с адреса 123@123.345345.ru на адрес
> fff@FFF на сервере @123.345345.ru это письмо не отправляется, а отправляется с
> сервера @sss.ru на котором у пользователя тоже почтовый ящик@123.345345.ru принимает почту от пользователя (как от login1@123.345345.ru), переписывает заголовки, находит у себя в недрах данные для аутентификации на @sss.ru (login2 password2), потом с этой байдой стучится на @sss.ru и уже отправляет это письмо как от login2@sss.ru в заголовках.
>[оверквотинг удален]
>>> с сервера", "c ящиком пользователе" и так далее... Если вы хотите
>>> увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои
>>> мысли доступным и понятным языком.
>> А что не понятно? Пользователь отправляет сообщение с адреса 123@123.345345.ru на адрес
>> fff@FFF на сервере @123.345345.ru это письмо не отправляется, а отправляется с
>> сервера @sss.ru на котором у пользователя тоже почтовый ящик
> @123.345345.ru принимает почту от пользователя (как от login1@123.345345.ru), переписывает
> заголовки, находит у себя в недрах данные для аутентификации на @sss.ru
> (login2 password2), потом с этой байдой стучится на @sss.ru и уже
> отправляет это письмо как от login2@sss.ru в заголовках.Именно так. Подробнее как сделать?
>[оверквотинг удален]
>>>> увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои
>>>> мысли доступным и понятным языком.
>>> А что не понятно? Пользователь отправляет сообщение с адреса 123@123.345345.ru на адрес
>>> fff@FFF на сервере @123.345345.ru это письмо не отправляется, а отправляется с
>>> сервера @sss.ru на котором у пользователя тоже почтовый ящик
>> @123.345345.ru принимает почту от пользователя (как от login1@123.345345.ru), переписывает
>> заголовки, находит у себя в недрах данные для аутентификации на @sss.ru
>> (login2 password2), потом с этой байдой стучится на @sss.ru и уже
>> отправляет это письмо как от login2@sss.ru в заголовках.
> Именно так. Подробнее как сделать?подробней для postfix не скажу, я примерно такое на exim делал.
>[оверквотинг удален]
>>>>> мысли доступным и понятным языком.
>>>> А что не понятно? Пользователь отправляет сообщение с адреса 123@123.345345.ru на адрес
>>>> fff@FFF на сервере @123.345345.ru это письмо не отправляется, а отправляется с
>>>> сервера @sss.ru на котором у пользователя тоже почтовый ящик
>>> @123.345345.ru принимает почту от пользователя (как от login1@123.345345.ru), переписывает
>>> заголовки, находит у себя в недрах данные для аутентификации на @sss.ru
>>> (login2 password2), потом с этой байдой стучится на @sss.ru и уже
>>> отправляет это письмо как от login2@sss.ru в заголовках.
>> Именно так. Подробнее как сделать?
> подробней для postfix не скажу, я примерно такое на exim делал.Подарки в студию.:) Ну это же не принципиально. Сваяю и exim вместо postfix. Напиши пажста, если не трудно.
Смысл того что идет ниже - перезапись адреса отправителя письма,
если оно отправляется за пределы локального домена (interface.local).
С прохождением аутентификации на внешнем почтовом сервере через который
отправляется письмо и на которых зарегистрированы почтовые ящики.
Своего почтового сервера у фирмочки нет.Через rewrite у меня не получилось из-за того что есть условие,
поэтому сделано через системный фильтр.Пользователей мало поэтому базы данных не использовались, все данные в файлах.
Комментарии писал по памяти, может где и соврал :).
Расположение файлов относительно /var/lib/exim4 , при изменении поправить конфиг.[root@router exim4]# pwd
/var/lib/exim4
[root@router exim4]# ls -lR
drwxr-x--- 3 root mail 4096 2010-07-05 13:28 files/./files:
-rw-r----- 1 root mail 1379 2010-07-05 13:28 filter
-rw-r----- 1 root mail 507 2010-07-05 12:36 relay
drwxr-x--- 3 root mail 4096 2010-07-05 12:28 virtual/# каталог назван также как и домен, в принципе может быть несколько.
./files/virtual:
drwxr-x--- 2 root mail 4096 2010-07-06 16:42 interface.local/./files/virtual/interface.local:
-rw-r----- 1 root mail 705 2010-07-06 16:41 accept_sender
-rw-r----- 1 root mail 311 2010-07-06 16:42 rewrite
конфиг, то что не изменялось убрано.
acl в основном использовались как у лисяры, хотя прием только от внутренней сети и можно было и не заморачиваться.
http://www.lissyara.su/articles/freebsd/mail/exim+dovecot+po.../
поэтому указал только что сам добавил.
/etc/exim4/exim4.confCONF_DIR = /etc/exim4
VIRTUAL_DIR = /var/lib/exim4/files/virtual
FILES_DIR = /var/lib/exim4/files
SPOOL_DIR =/var/spool
MAIL_DIR = /var/spool/mailprimary_hostname = router # тут свой пишите :)
domainlist local_domains = @ : @[] : localhost : localhost.localdomain : $primary_hostname
domainlist relay_to_domains = dsearch;VIRTUAL_DIR
qualify_domain = interface.local # тут свой пишите :)
qualify_recipient = interface.local # тут свой пишите :)
never_users = root
exim_user = mail
exim_group = mail
freeze_tell = mail
system_filter = FILES_DIR/filter
system_filter_user = mailbegin acl
acl_check_rcpt:
accept hosts = :
# кому разрешено использовать (легко обходится)
accept
domains = dsearch;VIRTUAL_DIR
sender_domains = dsearch;VIRTUAL_DIRendpass
message = "Для $sender_address доступ запрещен."
condition = ${extract{work}{${lookup{$sender_address_local_part}\
lsearch{VIRTUAL_DIR/$sender_address_domain/accept_sender}}}{$value}}accept
!domains = dsearch;VIRTUAL_DIR
sender_domains = dsearch;VIRTUAL_DIRendpass
message = "Для $sender_address доступ запрещен."
condition = ${extract{work}{${lookup{$sender_address_local_part}\
lsearch{VIRTUAL_DIR/$sender_address_domain/accept_sender}}}{$value}}message = "Отправка вне локальных доменнов для $sender_address запрещена."
condition = ${extract{relay}{${lookup{$sender_address_local_part}\
wildlsearch{VIRTUAL_DIR/$sender_address_domain/accept_sender}}}{$value}}
# дальше примерно как по ссылке на лисяру
###############################################################################
begin routers
############################################################
virtual:
driver = accept
# домен получателя
domains = dsearch;VIRTUAL_DIR
# получатель в нем
local_parts =${extract{int}{${lookup{$local_part}\
lsearch{VIRTUAL_DIR/$domain/accept_sender}}}{$value}}
transport = local_deliverysmarthost:
driver = manualroute
#domains = домен куда уходит
domains = ! +local_domains
require_files = FILES_DIR/relay# получаем адрес релея для внешнего адреса
route_data = ${extract{relay}{${lookup{$reply_address}\
lsearch{FILES_DIR/relay}}}{$value}fail}
# ошибка если релея нет
host_find_failed = defer
errors_to = $sender_address
no_verify
same_domain_copy_routing = no
transport = remote_smtp_smarthost
no_more############################################################
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
255.255.255.255
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/exim4/aliases}}
file_transport = address_file
pipe_transport = address_pipeuserforward:
driver = redirect
check_local_user
file = $home/.forward
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_replylocaluser:
driver = accept
check_local_user
transport = local_delivery
cannot_route_message = Unknown user###############################################################################
begin transports
############################################################
remote_smtp:
driver = smtpremote_smtp_smarthost:
driver = smtp
connection_max_messages = 1
hosts_try_auth = *
hosts_require_auth = ${extract{relay}{${lookup{$reply_address}\
lsearch{FILES_DIR/relay}}}{$value}fail}
helo_data=router # тут свой пишите :)
headers_remove = "Received:Message-ID:References:In-Reply-To"
headers_rewrite = *@+relay_to_domains ${lookup{$1}lsearch{VIRTUAL_DIR/$sender_address_domain/rewrite}{$value}fail} fsr
#
# E все поля конверта
# F поле “From” в конверте
# T поле “To” в конверте
# b заголовок “Bcc:”
# c заголовок “Cc:”
# f заголовок “From:”
# h все заголовки
# r заголовок “Reply-To:”
# s заголовок “Sender:”
# t заголовок “To:”
#
return_path = $reply_address
############################################################
local_delivery:
driver = appendfile
directory = MAIL_DIR/$domain/$local_part@$domain/
create_directory
directory_mode = 0770
maildir_format
delivery_date_add
envelope_to_add
return_path_add
user = virtual
group = mail
mode = 0660address_pipe:
driver = pipe
return_outputaddress_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_addaddress_reply:
driver = autoreply###############################################################################
begin retry* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
###############################################################################
begin rewrite###############################################################################
begin authenticatorscram_md5:
driver = cram_md5
public_name = CRAM-MD5
client_name = ${extract{1}{:}{${lookup{$host}nwildlsearch{CONF_DIR/passwd.client}{$value}fail}}}
client_secret = ${extract{2}{:}{${lookup{$host}nwildlsearch{CONF_DIR/passwd.client}{$value}fail}}}USERNAME= ${extract{username}{${lookup{$reply_address}lsearch{FILES_DIR/relay}{$value}fail}}}
MYSECRET= ${extract{pass}{${lookup{$reply_address}lsearch{FILES_DIR/relay}{$value}fail}}}plain:
driver = plaintext
public_name = PLAIN
client_send = ^USERNAME^MYSECRETlogin:
driver = plaintext
public_name = LOGIN
client_send = : USERNAME : MYSECRET
файл фильтра где происходит перезапись, в первой строке должно быть #Exim filtercat /var/lib/exim4/files/filter
#Exim filter # не удалять первую строку!!!!!!!!!
if $sender_address_domain matches "interface.local" and $recipients does not matches "@interface.local" # тут свои пишите :)
then
headers remove Reply-to
headers remove From
headers remove Sender
headers remove return-path
headers add "From: ${lookup{$sender_address_local_part}lsearch{/var/lib/exim4/files/virtual/$sender_address_domain/rewrite}{$value}fail}"
headers add "Sender: ${lookup{$sender_address_local_part}lsearch{/var/lib/exim4/files/virtual/$sender_address_domain/rewrite}{$value} fail}"
headers add "Reply-to: ${lookup{$sender_address_local_part}lsearch{/var/lib/exim4/files/virtual/$sender_address_domain/rewrite}{$value} fail}"
headers add "return-path: ${lookup{$sender_address_local_part}lsearch{/var/lib/exim4/files/virtual/$sender_address_domain/rewrite}{$value} fail}"
endifфайл описывает параметры внешнего почтового ящика.
1-й столбик - key, он же зарегистрированный на внешнем сервере почтовый ящик, 2 - логин 3 - пароль 4 - smtp сервер,
понадобился так как MX в DNS и smtp могут отличаться.
cat /var/lib/exim4/files/relay
aaaaa@mail.ru: username=aaaaa pass=11111 relay=smtp.mail.ru
bbbbb@list.ru: username=bbbbb@list.ru pass=22222 relay=smtp.list.ruфайл описывает внутренние почтовые ящики
1-й столбик - key, 2 - разрешено использовать, 3 - название ящика до @,
4 - разрешена ли пересылка за пределы внутренних доменов.
cat /var/lib/exim4/files/virtual/interface.local/accept_sender
# key # accept sender # email local # relay to ext
# # @interface.local
root: work=yes int=root relay=yes
igor: work=yes int=igor relay=yes
inna: work=no int=inna relay=noфайл соответствия внутреннего почтового адреса и внешнего почтового адреса
cat /var/lib/exim4/files/virtual/interface.local/rewrite
root: aaaaa@mail.ru
igor: bbbbb@list.ru
inna:
форматирование уехало хотя оно имеет значение, так что где не понятно как должно быть спрашивайте
>[оверквотинг удален]
> inna: work=no
> int=inna
> relay=no
> файл соответствия внутреннего почтового адреса и внешнего почтового адреса
> cat /var/lib/exim4/files/virtual/interface.local/rewrite
> root: aaaaa@mail.ru
> igor: bbbbb@list.ru
> inna:
> форматирование уехало хотя оно имеет значение, так что где не понятно как
> должно быть спрашивайтеСпасибо! Буду прбовать.