Как сделать перенаправление письма?

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

Как сделать перенаправление письма?

Непрочитанное сообщение bobot » 2009-02-18 16:14:57

задача в следуещем заключается(система dovecot+Exim)
Есть у меня почтовые сервер1 и сервер 2:
мне надо сделать чтоб почта приходила на сервер1(это без проблем и так ходит :-D ).
вот у меня например есть на сервере1 юзера
bobot@mydomain, yura@mydomain, а на сервере2 есть юзер vova.
Т.е. мне надо чтоб при приёме письма сервер1 перенаправлял на сервер2 соответствующим юзерам.

Когда письмо приходит на сервер1 оно проверяет есть ли там юзер или нету! если нету, то должно осуществлятся перенаправление на сервер 2 этому юзеру(у меня если на первом юзера такого нету то на втором точно есть).

Вот как это перенаправление сделать ??? (мне кто-то сказал что надо сделать виртуальных юзеров, а как это фиг его знает)
я например заню как перенаправлять почту с одного на другой ящик. Просто надо алиасес подправить и написать например:

Код: Выделить всё

yura_slyusarenko:
bobot@mydomain
тут видно почта будет приходить на yura_slyusarenko и переадресована на ящик bobot@mydomain ! как говориться тут всё просто, а как сделать в первом случае?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
estade
мл. сержант
Сообщения: 92
Зарегистрирован: 2008-06-18 11:16:41
Откуда: Челябинск
Контактная информация:

Re: Как сделать перенаправление письма?

Непрочитанное сообщение estade » 2009-02-18 21:12:41

конфиг exim'a в студию :smile:
задача решаемая на раз два три

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Как сделать перенаправление письма?

Непрочитанное сообщение dikens3 » 2009-02-19 11:02:31

роутер напиши:
http://www.lissyara.su/?id=1220#20.8

Код: Выделить всё

server2_users:
  driver = "manualroute"
  domains = domain2_server2.ru
  local_parts = vova  <- Это список твоих пользователей на сервере 2
  transport = remote_smtp
  route_list = * name_server2
Не пробовал, попробуй.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

Re: Как сделать перенаправление письма?

Непрочитанное сообщение bobot » 2009-02-19 11:45:27

estade писал(а):конфиг exim'a в студию :smile:
задача решаемая на раз два три
Вот конфиг

Код: Выделить всё

 ######################################################################
#                  Runtime configuration file for Exim               #
######################################################################
#######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################

primary_hostname = newmail.univ.kiev.ua
domainlist local_domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND (type='LOCAL' OR type='VIRT
domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND type='RELAY'}}
hostlist   relay_from_hosts = 127.0.0.1
auth_advertise_hosts = *
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /etc/ssl/certs/dovecot.pem
tls_privatekey = /etc/ssl/private/dovecot.pem
log_selector = +all_parents +lost_incoming_connection +received_sender +received_recipients +smtp_confirmation +smtp_syntax_e
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_mime = acl_check_mime
qualify_domain = newmail.univ.kiev.ua
allow_domain_literals = false
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 30m
timeout_frozen_after = 3d
freeze_tell = postmaster
message_size_limit = 10M
smtp_accept_max = 100
smtp_accept_max_per_connection = 5
smtp_accept_max_per_host = 2
split_spool_directory = true
remote_max_parallel = 15
smtp_banner = "Welcome on our mail server!\n\
    This system does not accept Unsolicited \
 Commercial Email\nand will blacklist \
    offenders via our spam processor.\nHave a \
    nice day!\n\n${primary_hostname} ESMTP"

#hide mysql_servers = localhost/exim/trata/trata это рабочит мой
hide mysql_servers = localhost/webmail/trata/tratat

######################################################################
#                       ACL CONFIGURATION                            #
#         Specifies access control lists for incoming SMTP mail      #
######################################################################
begin acl

acl_check_rcpt:

  accept  hosts = :

  deny    domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

  deny    domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  accept  local_parts   = postmaster
          domains       = +local_domains

#  require verify        = sender

#  deny    message       = HELO/EHLO required by SMTP RFC
#          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
#
#  deny    message       = Go Away! You are spammer.
#          condition     = ${if match{$sender_host_name} \
#                          {bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
#                          {yes}{no}}
#

#  deny    message       = rejected because \
#  $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
#          log_message   = found in $dnslist_domain
#          dnslists      = relays.ordb.org
#  deny    message       = message from \
#  $sender_host_address rejected - see http://njabl.org/
#          log_message   = found in $dnslist_domain
#          dnslists      = dnsbl.njabl.org
#  deny    message       = rejected because \
#  $sender_host_address for bad WHOIS info, see http://www.rfc-ignorant.org/
#          log_message   = found in $dnslist_domain
#          dnslists      = ipwhois.rfc-ignorant.org
#  deny    message       = rejected because $sender_host_address \
#  is in a black list at $dnslist_domain\n$dnslist_text
#          log_message   = found in $dnslist_domain
#          dnslists      = dialups.mail-abuse.org
#  deny    message       = rejected because $sender_host_address \
#  is in a black list at $dnslist_domain\n$dnslist_text
#          log_message   = found in $dnslist_domain
#          dnslists      = list.dsbl.org
#  deny    message       = Spam blocked see: \
#  http://www.spamcop.net/w3m?action=checkblock&ip=$sender_host_address
#          log_message   = found in $dnslist_domain
#          dnslists      = bl.spamcop.net
#  deny    message       = rejected, $sender_host_address \
#  Open Proxy, see: $dnslist_domain\n$dnslist_text
#          log_message   = found in $dnslist_domain
#          dnslists      = dnsbl.void.ru

  accept  domains       = +local_domains
          endpass
          message       = unknown user
          verify        = recipient

  accept  domains       = +relay_to_domains
          endpass
          message       = unrouteable address
         verify        = recipient

  accept  hosts         = +relay_from_hosts
  accept  authenticated = *
  deny    message       = relay not permitted

acl_check_mime:

  warn decode = default

  deny message = Blacklisted file extension detected ($mime_filename)
       condition = ${if match \
                    {${lc:$mime_filename}} \
                    {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N} \
                    {1}{0}}

  deny message = Sorry, noone speaks chinese here
       condition = ${if eq{$mime_charset}{gb2312}{1}{0}}

accept

######################################################################
#                      ROUTERS CONFIGURATION                         #
#               Specifies how addresses are handled                  #
######################################################################
#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
# An address is passed to each router in turn until it is accepted.  #
######################################################################

begin routers

dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more

#system_aliases:
#  driver = redirect
#  allow_fail
#  allow_defer
#  data = ${lookup mysql{SELECT recipients FROM aliases \
#         WHERE local_part='${local_part}' AND domain='${domain}'}}

#userforward:
#  driver = redirect
#  allow_fail
#  allow_defer
#  data = ${lookup mysql{SELECT recipients FROM userforward \
#         WHERE local_part='${local_part}' AND domain='${domain}'}}

virtual_localuser:
  driver = accept
  domains = ${lookup mysql{SELECT domain from domains WHERE domain='${domain}'}}
  local_parts = ${lookup mysql{SELECT login from users WHERE login='${local_part}' AND domain='${domain}'}}
  transport = local_delivery
#dovecot_user:
#  driver = accept
#  condition = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='$
#  transport = dovecot_delivery

######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################

begin transports
remote_smtp:
  driver = smtp
#dovecot_delivery:
#  driver = pipe
#  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
#  message_prefix =
#  message_suffix =
#  delivery_date_add
#  envelope_to_add
#  return_path_add
#  log_output
#  user = mailnull
local_delivery:
  driver = appendfile
  check_string = ""
  create_directory
  delivery_date_add
  #directory = /var/mail/$domain/$local_part это рабочий мой
  directory = /var/mail/$local_part
  directory_mode = 770
  envelope_to_add
  group = mail
  maildir_format
  maildir_tag = ,S=$message_size
  message_prefix = ""
  message_suffix = ""
  mode = 0660
  quota = ${lookup mysql{SELECT quota FROM users WHERE login='${local_part}' AND domain='${domain}'}{${value}M}}
  quota_size_regex = S=(\d+)$
  quota_warn_threshold = 75%
  return_path_add

 address_pipe:
  driver = pipe
  return_output
address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

address_reply:
  driver = autoreply

######################################################################
#                      RETRY CONFIGURATION                           #
######################################################################

begin retry

*                      quota
*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h


######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################

begin rewrite

######################################################################
#                   AUTHENTICATION CONFIGURATION                     #
######################################################################

begin authenticators

auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT login FROM users \
                        WHERE login = '${quote_mysql:${local_part:$2}}' \
                        AND domain = '${quote_mysql:${domain:$2}}' \
                      AND decrypt = '${quote_mysql:$3}' \
                        AND status = '1'}{yes}{no}}
  server_prompts = :
server_set_id = $2

auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT login FROM users \
                        WHERE login = '${quote_mysql:${local_part:$1}}' \
                        AND domain = '${quote_mysql:${domain:$1}}' \
                        AND decrypt = '${quote_mysql:$2}' \
                        AND status = '1'}{yes}{no}}
  server_prompts = Username:: : Password::
server_set_id = $1

auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT decrypt FROM users \
                        WHERE login = '${quote_mysql:${local_part:$1}}' \
                        AND domain = '${quote_mysql:${domain:$1}}' \
                        AND status = '1'}{$value}fail}
server_set_id = $1

# End of Exim configuration file
Последний раз редактировалось bobot 2009-02-19 11:51:11, всего редактировалось 1 раз.

Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

Re: Как сделать перенаправление письма?

Непрочитанное сообщение bobot » 2009-02-19 11:47:26

dikens3 писал(а):роутер напиши:
http://www.lissyara.su/?id=1220#20.8

Код: Выделить всё

server2_users:
  driver = "manualroute"
  domains = domain2_server2.ru
  local_parts = vova  <- Это список твоих пользователей на сервере 2
  transport = remote_smtp
  route_list = * name_server2
Не пробовал, попробуй.
Я не понял так что тут мне всех пользователей перечислять?

Код: Выделить всё

 local_parts = vova  <- Это список твоих пользователей на сервере 2
так их около 1000

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Как сделать перенаправление письма?

Непрочитанное сообщение dikens3 » 2009-02-19 12:47:20

Ну можешь не перечислять.. Создай запрос на сервер 2 и спроси, есть там такой пользователь или нет. Этот вариант самый правильный.


2-й вариант пересылать всё на 2-й сервер. Просто убери проверку пользователей. С рикошетами о несуществании пользователей - сам решай.

Вот тут твоя будущая проблема:
http://forum.lissyara.su/viewtopic.php?f=20&t=15344
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

Re: Как сделать перенаправление письма?

Непрочитанное сообщение bobot » 2009-02-19 13:40:49

dikens3 писал(а):Ну можешь не перечислять.. Создай запрос на сервер 2 и спроси, есть там такой пользователь или нет. Этот вариант самый правильный.


2-й вариант пересылать всё на 2-й сервер. Просто убери проверку пользователей. С рикошетами о несуществании пользователей - сам решай.

Вот тут твоя будущая проблема:
http://forum.lissyara.su/viewtopic.php?f=20&t=15344
грубо говоря мне надо сделать вот так

Код: Выделить всё

domainlist local_domains = сервер1.example
.
.
.
smart_route:
    driver = "manualroute"
    domains = !+local_domains
    transport = remote_smtp
    route_list = * сервер2.example


Аватара пользователя
bobot
ст. прапорщик
Сообщения: 589
Зарегистрирован: 2008-05-28 20:03:17

Re: Как сделать перенаправление письма?

Непрочитанное сообщение bobot » 2009-02-19 14:51:50

estade писал(а):конфиг exim'a в студию :smile:
задача решаемая на раз два три
ау ну так что?