Welcome to eComStation.RU site!

Select your language: Russian English Deutch Spanish Italian Portuguese Czech Polish French

Frequently asked questions and answers:

eComStation.RU

ru · en · de · es · it · pt · cz · pl · fr
eComStation - это совершенно другая операционная система для PC (IBM OS/2 Warp)
Программы, новости, статьи, поддержка пользователей, оборудование, вопросы и ответы.
 
      Что такое OS/2?НовостиУстановкаОбновлениеПрименениеБудущееСообществоКупить    
(Карта сайта)

 
 
Списки протестированного OS/2 оборудования
Как получить драйверы OS/2 бесплатно

 
Обновление

 
Программы

 
(Санкт-Петербург)

 
Преимущества (1)

 
Разработчику (1)

 
(Пайпы программ)

 
Компании: (1)

 
История (1):

 
(Бонусы)

 
Советы:

 
(Барьеры и решения)

 
Технологии: (1)

 
(Применение в науке, лаборатории, ..)

 

 
Готовые решения:

 
Новая eComStation:

 
Будущее: (1)

 
(Ссылки на другие сайты)

 
(Картинка дня)

 
Артефакты OS/2

 
Гаджеты

 

Распределение одного почтового домена между несколькими SMTP-серверами в локальной сети с помощью Weasel


TITLE: Распределение одного почтового домена между несколькими SMTP-серверами в локальной сети с помощью Weasel

DATE: 2005-02-03 14:25:45

AUTHOR: Vasilkin Andrey

Задача

Рассмотрим ситуацию: жила-была локала в одной конторе, у конторы были удалённые подразделения, которые худо-бедно по дайлапу обменивались почтой через конторский сервер, исправно оплачивая междугородние звонки. Со временем объём почты рос, появились хоть и медленные, но принадлежащие конторе, цифровые линии связи с подразделениями. Естественно, возникла необходимость направить почту по этим линиям, а т.к. скорость передачи не позволяла пользователям комфортно получать/отправлять корреспонденцию, решено было установить в подразделениях свои почтовые сервера.

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

Первое приближение

Итак, схема движения почты представляется таким образом: Конторский сервер в своей базе содержит всех пользователей конторы и подразделений.

При получении письма конторским сервером производится поиск адресата в базе. Если найденный адресат - работник конторы, письмо записывается в соответствующий почтовый ящик, если же найденный адресат - работник какого-либо удалённого подразделения, письмо пересылается на соответствующий сервер внутри своей сети. Т.е. каждый адрес из удалённых подразделений должен быть прописан на своём и на конторском серверах.

Удалённые SMTP-серверы всю корреспонденцию не для своего домена отправляют на конторский сервер (релэй) для дальнейшего разбора.

Сложности начинаются при отправке письма с удалённого подразделения в другое подразделение, либо в контору, т.е. когда письмо направлено в свой домен, но адресата нет в базе данного SMTP-сервера. В этом случае, используется следующая логика: просматривается база своих пользователей, если пользователь не найден, то письмо отправляется на конторский сервер, для этого в письме адреса получателей из вида user@my.domain преобразуется в user@main-SMTP.my.domain , где main-SMTP - имя конторского сервера. (Имеется ввиду не поле "To:", а служебная информация, которой руководствуется сервер при отправке почты). Аналогично преобразуется обратный адрес отправляемого письма: из sender@my.domain в sender@SMTP-1.my.domain, где SMTP-1 - имя отправляющего удалённого SMTP-сервера.

Реализация

На всех серверах в качестве почтового сервера установлен Weasel Питера Мойлана. В настройках необходимо указать в списке "LIST OF DOMAIN NAMES FOR THE LOCAL HOST" адреса данного SMTP-сервера, В нём будет 2 пункта: my.domain и xxxx.my.domain, где xxxx - имя данного сервера.

В Weasel имеется полезная для нас функция: пересылка почты для конкретного пользователя на другой адрес. Это и используется на конторском сервере: для каждого адреса пользователей удалённых подразделений указано на какой SMTP-сервер пересылать почту, например для адресата Ivanov на адрес Ivanov@SMTP-1.my.domain , где SMTP-1 - сервер подразделения, в котором находится адресат Ivanov.

На удалённых серверах указан relay-сервер main-SMTP в режиме "always" для отправки всей исходящей почты (в домены отличные от my.domain) на конторский сервер. Для пересылки почты внутри своего домена на серверах подразделений заведены (скажем так, "фиктивные") пользователи unknown и алиасы "*" (т.е. этот алиас будет срабатывать для любого адресата, не найденного в своей базе пользователей) на пользователя unknown. Таким образом, все письма для нашего домена, не нашедшие адресата на данном сервере будут отправляться в ящик unknown. Теперь нам нужно эти письма переслать на конторский сервер, этим занимается скрипт unknown.cmd, указанный для пользователя unknown как фильтр, т.е. будет выполняться для каждого письма, попадающего в unknown.

В этом скрипте преобразуются адреса получателей и отправителя дописыванием имён машин, соответственно, конторского и своего серверов; эти адреса записываются в заголовок файла письма в соответствии с форматом файлов отправляемых писем weasel; преобразованное письмо перекладывается в директорию %путь для почты Weasel%\forward и устанавливается системный симофор \SEM32\WEASEL\FORWARDMAIL , что заставляет Weasel немедленно отправить почту из forward (в любом случае, forward проверяется раз в несколько минут). В конце работы скрипт возвращает результат, сообщающий серверу, что письмо фильтр не прошло и его сохранять не надо (т.к. в действительности письмо переписано в очередь на отправку).

Адрес отправителя читается из поля return-path: или From:, если домен отправителя наш - производится поиск пользователя в weasel.ini для определения принадлежности отправителя к данному серверу, если пользователь "свой", к доменной части его адреса приписывается имя данного сервера (например, SMTP-1). Полученный адрес записывается в служебный заголовок файла для weasel.

Адреса получателей читаются из полей To: Cc: Bcc:, если адрес получателя направлен не в наш домен, он игнорируется (т.к. на все не свои домены письмо уже отправлено сервером на наш релэй), если домен получателя наш - производится поиск пользователя в weasel.ini для определения принадлежности адресата к данному серверу, если пользователь "свой", его адрес так же игнорируется (письмо уже ему доставлено). Когда находится адресат из нашего домена, но не являющийся пользователем данного сервера - к доменной части его адреса приписывается имя конторского сервера (например, main-SMTP) и полученный адрес добавляется в список получателей (в заголовок файла для weasel).

В unknown.cmd необходимо задать переменные:

  • MyDomain='MY.DOMAIN' /* имя нашего домена большими буквами */
  • RealaySMTP='ns' /* имя релея нашего домена, если задана пустая строка - будет сделана попытка определить имя релея из weasel.ini, если оно задано ввиде xxxx или xxxx.my.domain, тогда RealaySMTP='xxxx' */
  • MySMTP = 'yes1-gw' /* имя данного сервера, если задана пустая строка - MySMTP=%HOSTNAME% */
  • WeaselPath = 'c:\programs\weasel' /* путь к weasel.ini, если задана пустая строка - используется путь данного скрита */

Для работы скрипта потребуется бибилиотека RXU.DLL из пакета rxu1a.zip (Dave Boll)

Замечания

В нашем случае, со стороны наших локальных сетей, в домене my.domain на DNS-сервере прописаны как локальные не реальные ip-адреса удалённых SMTP-серверов, так и реальный ip-адрес конторской почтовой машины для домена my.domain (MX-запись). Если же в локальной сети отсутствует сервер DNS, либо используется локальный не реальный домен, необходимо установить на всех серверах в файлах config.sys переменную SET USE_HOSTS_FIRST=1 и прописать локальные адреса SMTP-серверов в файлах %ETC%\hosts по примеру:

192.168.1.1 main-SMTP
127.0.0.1 my.domain
192.168.1.100 SMTP-1.my.domain
192.168.1.200 SMTP-2.my.domain

При правильной работе скрипта-фильтра для "фиктивного" пользователя unknown директория %путь для почты Weasel%\unknown во время работы сервера должна оставаться пустой.

Как упоминалось, линии связи с подразделениями очень медленные и, при загрузке каналов почтой, управлять Weasel по telnet с помощью конфигурационной программы viosetup довольно сложно. Поэтому, для упрощения редактирования списка пользователей на периферийных серверах с рабочей станции в конторе был написан скрипт weasel-ctrl.cmd (хэлп выдаётся по запуску без параметров), который можно запускать по telnet или rexec. В реальности, я использую самописный веб-интерфейс на php, который выполняет weasel-ctrl.cmd на удалённых серверах через rexec.

Антивирусная защита

Почти вся почта предприятия проходит через центральный сервер (за исключением случая, когда пользователь удалённого подразделения отсылает письмо на адрес в своём же подразделении), поэтому логично будет использовать на нём антивирусную защиту. Для этих целей, на мой взгляд, наиболее удобным антивирусом будет DrWeb. По-хорошему, в таких случаях, используется DrWeb daemon. Т.е. антивирусные базы постоянно хранятся в памяти, а DrWeb daemon принимает запросы на проверку файлов.

Но в нашем случае использована более банальная (более надёжная?) схема: DrWeb запускается для каждого проходящего через сервер письма, что весьма накладно. Поэтому антивирус со всеми базами, а так же и все почтовые скрипты разумно хранить на виртуальном диске (т.е. копировать при загрузке системы, например в startup.cmd). При такой схеме письма проверяются довольно быстро.

Запуском антивируса занимается скрипт filter.cmd, который в Weasel прописан как Filter 4. 4й фильтр выполняется когда письмо полностью получено сервером. В случае обнаружения вируса, будет выслано предупреждение отправителю и возвращён код, сообщающий Weasel, что сохранять письмо и отправлять ошибку пользователю не нужно.

В filter.cmd необходимо задать переменные:
LogFile = 'D:\logs\MailVir.log' /* лог, куда будет записываться информация об обнаруженных вирусах */
AntivirPath = 'H:\' /* путь к DrWeb (мы используем виртуальный диск) */
и отредактировать virus.msg по вкусу.

Стоит обратить внимание, что для отсылки сообщения отправителю о вирусе используется слегка подправленный скрипт send.cmd П. Мойлана.

Для своевременного обновления баз, раз в сутки через cron запускается скрипт VDBUpdate.cmd (см. readme в архиве), который пополняет антивирусные базы на винчестере и копирует их на виртуальный диск.

Все необходимые скрипты так же можно взять с ftp://ftp.os2.snc.ru/pub/weasel/.


Попробуй программу:

NetDrive - подключи ftp-каталог на букву диска (webDAV, .iso, NTFS том, ..)

Комментарии:

Papa Karlo
2005-02-04 00:48:43

мммм.... Weasel pro используется или я что-то путаю ?

Digi
2005-02-04 01:53:48

2Papa Karlo Нет, не pro

Constantin
2005-02-04 15:17:29

Эх, Domino-хи на вас нет...

Для неё N серверов с одном домене - штатная конфигурация

Digi
2005-02-04 15:51:16

2Constantin: В реальности, на месте моей работы, более сложная схема и в центре стоит linux с sendmail'ом которым рулят в другой конторе. В случае Domino, я так понимаю, на всех серверах должен стоять Domino?

Oleandr
2005-02-04 18:20:11

2Constantin А что Domino-ха умеет?... Слабо написать? И с вирусной и со спамовой проверкой? А то мне тут IPS советуют, хуки, говорят есть...

Eugene Gorbunoff
2005-02-05 14:52:21

* Сыграем в "Домино" -- [url]

* Сыграем в Домино, часть вторая -- [url]

Constantin
2005-02-07 12:56:28

2Oleandr: Писали уж (Женя, thnks).. Одно НО: Осёвая Доминоха кончилась 5.0.13, а осн. антиспамовые вкусности начались с 6.х.х. Антивирь - 3-х фирм, интегрируются нормально независимо от № релиза

2Digi: не обязательно везде Домино. Конечно, балансировать нагрузку с "чужаками" Домино не будет, но уживется со всеми, кто соблюдает SMTP

Digi
2005-02-07 14:48:46

Ну чтож, хорошо когда есть выбор между кучей вкусностей в одном флаконе (Domino) и бесплатным решением (Weasel) -;)

Digi
2005-02-15 02:01:38

На практике в качестве ведомого SMTP-сервера был успешно опробован InetPowerServer. Для отправки писем в свой домен не для своих пользователей использовался хук на поступающие команды:

[url]

Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).


Ваше имя:

Ваш E-Mail:

CODE:
......

  

Ваш комментарий:


eComStation 2.0 готова для ACPI компьютеров. В течение трех лет операционная система была перестроена для работы с новыми PC компьютерами (обновлены самые разные драйверы, изменены настройки системы) Что нового в eCS 2.0?

Статьи

Операционная система
Программное обеспечение
Оборудование
Для разработчика
Разное
Колонка редактора


Готовая eComStation на SSD диске

 





Последний активный опрос: Какая высота барьера RPM?

IBM OS/2 Warp

 
Обучение новичков

Списки протестированного OS/2 оборудования

 
Статьи


   
  Почему eComStation?
Возможности
Особенности
Применение
Ролики и скриншоты
   eComStation для
для бизнесменов
для студентов и инженеров
для продавцов компьютеров
сообщество пользователей
   Разработчик
Распространить программу
Описание API, библиотеки
Начать новый проект
Конкурсы
   Программы
Он-лайн каталог
Выбрать через eCo Market
   Служба поддержки
Отправить вопрос
Купить eComStation
Вопросы и ответы
Обучение новичков
 
 
© 2001 - 2014 eCo Software, All rights reserved
eComStation is a registered trademark of Serenity Systems International
OS/2 Warp is a registered trademark of IBM Corporation
 

 

 
Картинка дня: