Интернет | ||||||||||||||||||||||||||||||||
Внешние домены | Внешний домен 1 | Внешний домен 2 | Внешний домен n | |||||||||||||||||||||||||||||
Переключающий сервер | ||||||||||||||||||||||||||||||||
Локальная сеть | ||||||||||||||||||||||||||||||||
На одном сервере обслуживаются (взаимодействуют с WAN) несколько внешних почтовых доменов (SMTP MTA), почтовые серверы которые обеспечивают работу этих доменов с пользователями находятся в локальной сети (LAN).
Переключающий сервер обеспечивает взаимодействие между внешними почтовыми доменами и доменами внутри локальной сети.
Пример реализован на Postfix с применением технологии работы с несколькими экземплярами программы.
Сначала нужно содать структру папок по технологии работы с несколькими экземплярами программы.
postmulti -I postfix-domain1 -G in -e create postmulti -i postfix-domain1 -e enable
unknown_local_recipient_reject_code = 550 readme_directory = no inet_protocols = ipv4 recipient_delimiter = + compatibility_level=2 multi_instance_enable = yes multi_instance_group = special multi_instance_name = postfix-domain1 data_directory=/var/lib/postfix-domain1 queue_directory = /var/spool/postfix-domain1 mynetworks = 127.0.0.0/8 АДРЕС_И_МАСКА_ЛОКАЛЬНОЙ_СЕТИ myhostname = mail.domain1.ru smtpd_proxy_ehlo = mail.domain1.ru smtpd_banner = $myhostname ESMTP inet_interfaces = 111.222.333.444 smtp_bind_address = 111.222.333.444 mydestination = domain1.ru relayhost = delay_warning_time = 4h virtual_alias_maps = hash:/etc/postfix-domain1/virtual ldap:/etc/postfix-domain1/ldap-users.cf ldap:/etc/postfix-domain1/ldap-groups.cf receive_override_options = no_address_mappings transport_maps = hash:/etc/postfix-domain1/transport
Также в файл /etc/postfix/postfix-domain1/main.cf
нужно вставить следующие настройки:
bind = yes version = 3 server_host = ldap.domain1.ru search_base = ou=groups,dc=domain1 query_filter = (&(|(mail=%s)(mailRoutingAddress=%s))(objectclass=mailGroup)) special_result_attribute = member result_attribute = maildrop
bind = yes version = 3 server_host = ldap.domain1.ru search_base = ou=users,dc=domain1 query_filter = (&(!(l=disabled)) (|(mail=%s)(maildrop=%s))(objectclass=mailUser)) result_attribute = maildrop
Таблицы:
domain1.ru smtp:АДРЕС_ПЕРЕКЛЮЧАЮЩЕГО_СЕРВЕРА
test: info@domain1.ru
Скрипт для компиляции таблиц:
#!/bin/bash
postmap transport
postalias virtual
Сначала нужно содать структру папок по технологии работы с несколькими экземплярами программы.
postmulti -I postfix-mx -G in -e create postmulti -i postfix-mx -e enable
unknown_local_recipient_reject_code = 550 readme_directory = no inet_protocols = ipv4 recipient_delimiter = + compatibility_level=2 multi_instance_enable = yes multi_instance_group = special multi_instance_name = postfix-mx data_directory=/var/lib/postfix-mx queue_directory = /var/spool/postfix-mx delay_warning_time = 4h myhostname = ИМЯ_ХОСТА smtpd_proxy_ehlo = ИМЯ_ХОСТА #smtp_helo_name = $myhostname smtpd_banner = $myhostname ESMTP (MX) mynetworks = 127.0.0.0/8 АДРЕС_И_МАСКА_ЛОКАЛЬНОЙ_СЕТИ inet_interfaces = АДРЕС_В_ЛОКАЛЬНОЙ_СЕТИ smtp_bind_address = АДРЕС_В_ЛОКАЛЬНОЙ_СЕТИ relay_domains = СПИСОК_ДОМЕНОВ receive_override_options = no_address_mappings relay_recipient_maps = hash:/etc/postfix-mx/table-in sender_dependent_relayhost_maps = hash:/etc/postfix-mx/table-out transport_maps = hash:/etc/postfix-mx/transport disable_dns_lookups = yes
Таблицы:
@domain.ru smtp:mail.domain.ru:25
@domain.ru [111.222.333.444]:25
domain.ru smtp:mail.domain.ru:25
test: info@domain.ru
Скрипт для компиляции таблиц:
#!/bin/bash
postmap transport table-in table-out
postalias virtual