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

Исходное сообщение
"почтовые гуру помогите"

Отправлено albag , 19-Ноя-10 01:50 
есть связка cyrus postfix roundcube почтовый сервер @123.345345.ru
c ящиком пользователем login1 password1
задача отправить переотправить всю исходящую почту с выше указанного сервера
с сервера @sss.ru с login2 password2

Как это сделать?


Содержание

Сообщения в этом обсуждении
"почтовые гуру помогите"
Отправлено edd , 19-Ноя-10 14:08 
> есть связка cyrus postfix roundcube почтовый сервер @123.345345.ru
> c ящиком пользователем login1 password1
> задача отправить переотправить всю исходящую почту с выше указанного сервера
> с сервера @sss.ru с login2 password2
> Как это сделать?

Вы уж меня извините, но, что такое "отправить переотправить" или "указанного сервера с сервера", "c ящиком пользователе" и так далее... Если вы хотите увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои мысли доступным и понятным языком.


"почтовые гуру помогите"
Отправлено albag , 19-Ноя-10 15:53 
>> есть связка 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 на котором у пользователя тоже почтовый ящик


"почтовые гуру помогите"
Отправлено reader , 19-Ноя-10 16:48 
>[оверквотинг удален]
>>> задача отправить переотправить всю исходящую почту с выше указанного сервера
>>> с сервера @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 в заголовках.


"почтовые гуру помогите"
Отправлено albag , 19-Ноя-10 18:02 
>[оверквотинг удален]
>>> с сервера", "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 в заголовках.

Именно так. Подробнее как сделать?


"почтовые гуру помогите"
Отправлено reader , 19-Ноя-10 18:10 
>[оверквотинг удален]
>>>> увидеть ответ на свои вопросы, то как минимум постарайтесь излагать свои
>>>> мысли доступным и понятным языком.
>>> А что не понятно? Пользователь отправляет сообщение с адреса 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 делал.


"почтовые гуру помогите"
Отправлено albag , 19-Ноя-10 19:13 
>[оверквотинг удален]
>>>>> мысли доступным и понятным языком.
>>>> А что не понятно? Пользователь отправляет сообщение с адреса 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. Напиши пажста, если не трудно.


"почтовые гуру помогите"
Отправлено reader , 19-Ноя-10 22:53 
Смысл того что идет ниже - перезапись адреса отправителя письма,
если оно отправляется за пределы локального домена (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.conf

CONF_DIR = /etc/exim4
VIRTUAL_DIR = /var/lib/exim4/files/virtual
FILES_DIR = /var/lib/exim4/files
SPOOL_DIR =/var/spool
MAIL_DIR = /var/spool/mail

primary_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 = mail

begin acl

acl_check_rcpt:

  accept  hosts = :


# кому разрешено использовать (легко обходится)
  accept
        domains = dsearch;VIRTUAL_DIR
        sender_domains = dsearch;VIRTUAL_DIR

        endpass
        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_DIR

        endpass
        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_delivery

smarthost:
  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_pipe

userforward:
  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_reply

localuser:
  driver = accept
  check_local_user
  transport = local_delivery
  cannot_route_message = Unknown user

###############################################################################
begin transports
############################################################
remote_smtp:
  driver = smtp

remote_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 = 0660

address_pipe:
  driver = pipe
  return_output

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

address_reply:
  driver = autoreply

###############################################################################
begin retry

*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
###############################################################################
begin rewrite

###############################################################################
begin authenticators

cram_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^MYSECRET

login:
  driver = plaintext
  public_name = LOGIN
  client_send = : USERNAME : MYSECRET


файл фильтра где происходит перезапись, в первой строке должно быть #Exim filter

cat /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:


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


"почтовые гуру помогите"
Отправлено albag , 20-Ноя-10 18:10 
>[оверквотинг удален]
> 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:
> форматирование уехало хотя оно имеет значение, так что где не понятно как
> должно быть спрашивайте

Спасибо! Буду прбовать.