Многодоменная почтовая система с использованием mail server`а IPS
У меня возникла такая задача:
- SMTP-сервер (только входящий), обслуживающий много доменов и пользователей;
- POP3-сервер на много пользователей и доменов, при этом должны быть доступны одинаковые имена в разных доменах (пример: postmaster@domain1.com и postmaster@domain2.com);
- всё это должно жить на одном IP-адресе;
- должны существовать аккаунты "на домен", то есть если юзера не найдено, но такой домен есть, то всё должно падать на него. Причём для некоторых доменов это было нужно, а для других -- нет;
- добавление доменов и юзеров не должно требовать рестарта сервера и должно просто автоматизироваться.
- программа должна иметь текстовые конфиги (см. 4) и не требовать PM (так как управление у меня -- ssh only)
- некоторые домены -- алиасы (например, alias.com и domain1.com).
Для начала вам потребуется свежий IPS. О том, как его настраивать, написанно в документации, я расскажу лишь о настройках, специфичных для нашей задачи.
Секция [SMTP-1] у меня содержит такие настройки:
[SMTP-1] Address=217.66.96.131 # my ip address Protocol=smtpd ClientAddress=* Host=smtp ForwardAddress= ForwardToServer= QueueDirectory=.\queue\mail LocalDomain=localhost # You need to specify ONLY localhost here. LocalDomains=@localhost @[127.0.0.1] hookOnCommand=.\scripts\smtp\rxOnCommand.rexx # our rexx script.Из нижеприведённого следует, что IPS думает, что обслуживает ТОЛЬКО 1 домен, а на каждую комманду запускает скрипт rxOnCommand.rexx.
Далее наша статья посвящена работе данного скрипта.
Что делает этот скрипт ?
- Перехватывает строчку RCPT TO: и разбирает e-mail на домен и имя
пользователя. Проверяет установленные алиасы и заменяет их на основной
домен (cм строку после
/* alias1 */ ). - Читает файл, указанный в переменной domain_file (текстовый файл, содержащий список локальных доменов, строка==домен) и проверяет, наш ли это домен. Если нет, то отдаёт строку без изменений (после чего IPS говорит, что forward not allowed).
- Если это наш домен, то ищем пользователя вида user%domain
(e.g. samm%domain1.com).
Если такой пользователь найден -- отдаём IPS`у строку вида"RCPT TO: <user%domain@localhost>" (например,RCPT TO: <samm%domain1.com@localhost> ). Если нет -- то строку вида"RCPT TO: <domain@localhost>" (например,RCPT TO: <domain1.com@localhost> ).
- устанавливаем IPS и настраиваем секцию [SMTP-1] согласно моим рекомендациям;
- копируем скрипт в IPS\scripts\smtp\rxOnCommand.rexx;
- редактируем в xOnCommand.rexx переменную domain_file, чтобы она указывала на файл, где вы планируете разместить список доменов. Создаём этот файл и вносим туда список доменов и алиасов (строка=домен);
- прописываем после строчки alias все наши alias`ы (если они есть).таким образом:
if domain='alias.com' then domain='primary.com' /* alias */
- Если мы хотим создать пользователя, который будет получать только адресованные ему сообщения (e.g. samm@domain1.com), то создаете пользователя с именем вида user%domain (в нашем случае samm%domain1.com). Теперь все сообщения, адресованные ему, будут падать в его mailbox. Его pop3-логин будет вида user%domain (в нашем примере -- samm%domain1.com).
- Если мы хотим создать пользователя, получающего почту на весь домен (в случае если пользователь-адресат не найден), то надо создать пользователя вида domain (например, domain1.com). Его pop3-логин будет domain (в нашем случае -- domain1.com).
Alex Samorukov
Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ