Владимир Агапов
Перед нами нетривиальная задача. Требуется организовать
внутрикорпоративный документооборот на базе MS Exchange, оставив пользователям
возможность общаться по электронной почте с внешним миром. И при этом не
уменьшить уровень внутренней безопасности. Предлагаем вам быстрое и эффективное
решение данной задачи.
Итак, вы – системный администратор. Большой конторы или маленькой,
принципиального значения не имеет. Равно как и то, настроена ли у вас почтовая
система или это только предстоит сделать в ближайшее время. Главное другое:
однажды вас вызывает к себе начальник и говорит: «хочу». Хочу, чтобы у нас все
было как у людей: и книга адресная единая, корпоративная, и планировщик задач,
и календарь событий на месяцы и годы, ну, в общем, все, что только он где-то
слышал или, не дай бог, видел. Озадаченные этим вопросом, вы возвращаетесь к
себе, попутно думая, а что же проще: настроить The Bat на работу с LDAP и
найти какие-нибудь утилиты, позволяющие получить данный функционал, или снести The Bat
со всех машин, и поставить туда Outlook, закрыв глаза на резко упавшую в этом
случае безопасность? Подумав с полчасика, приходим к выводу: придется ставить Outlook,
и не только его, что было бы только половиной беды, но и Exchange в качестве
почтового сервера. Поскольку начальнику может прийти в голову и еще что-нибудь
неприличное, типа внутрикорпоративного документооборота. Вместо MS Exchange
можно, конечно, использовать и OpenXchange, Hula, Opengroupware и пр. Но мы остановимся
на первом варианте.
Скорее всего, у вас совершенно нет желания
вывешивать наружу машину с установленной на ней ОС Windows и Exchange в
придачу. Значит, придется разделить функции внешнего и внутреннего почтовых
серверов. На внутреннем пусть себе крутится Exchange, а на внешнем поставим
UNIX-подобную операционную систему и, например, Postfix в качестве почтового
сервера. Вот из этих предпосылок и будем исходить.
Поставить и запустить эти два сервера – задача
сама по себе для новичка нетривиальная, но такой вариант нас не устраивает, в
нашем случае необходимо, чтобы эти сервера взаимодействовали между собой и
прозрачно пропускали почту в мир и обратно.
В результате всех размышлений
получается примерно следующий список задач:
1. Установка
на все рабочие машины Microsoft Office Outlook в качестве почтового клиента.
2. Установка
на первый сервер (exchange) ОС Windows и Microsoft Exchange (в данном документе
будет подразумеваться версия 2003).
3. Установка
на второй сервер (gate) ОС из семейства UNIX и Postfix (FreeBSD 5.3 и postfix
2.2 соответственно).
4. Настройка
Exchange для работы с Postfix
5. Настройка
Postfix для работы с Exchange
6. Дополнительное
конфигурирование для поддержки alias и прочего.
Пункты с 1-го по 3-й выходят за рамки обсуждения
данной статьи, поэтому детально описывать их я не буду, а более подробно
остановлюсь на пунктах 4, 5 и 6.
Одно из решений задачи уже было предложено в
журнале [1]. Мы же в отличие от него будем использовать вариант проверки
Postfix наличия почтового аккаунта в Windows-домене перед приемом почты.
Настраиваем Exchange для работы
совместно с Postfix
Для начала определимся, что именно мы хотим получить от Exchange
в данной конфигурации:
n Он должен получать почту, которую будет перенаправлять
ему Postfix и доставлять ее в соответствующие почтовые ящики пользователей.
n Почта пользователей, отправляемая за пределы
домена, должна попадать в Exchange и пересылаться им для дальнейшей обработки
на внутренний интерфейс gate для дальнейшей отсылки ее в мир уже Postfix.
n В связи с тем, что название Windows-домена в AD
часто не совпадает с почтовым доменом, необходимо включить маскарадинг.
n Во избежание локальных эпидемий внутреннюю
почту также необходимо проверять на вирусы.
Приступим к настройке Exchange
Запускаем Exchange System Manager:
n Разворачиваем «Administrative Group company Servers
Exchange protocols SMTP». Открываем свойства default. На закладке «Access»
выбираем «Relay Restrictions» и записываем туда IP-адрес нашего
Postfix-сервера. В некоторых случаях может потребоваться указать подсети
целиком. Например, в случае использования приложений, напрямую общающихся с
SMTP-сервером.
n Там же, на закладке «Delivery», выбираем «Advanced»
и указываем в поле «Smart Host» IP-адрес Postfix-сервера в квадратных скобках.
n Здесь же, в поле «masquerade domain», указываем
наш почтовый домен, для того чтобы Exchange отправлял всю почту от имени этого
домена.
n Выбор антивирусного сканера под Exchange я
оставляю за вами, поскольку почти все крупные производители антивирусных продуктов
имеют в своих линейках такие решения.
Этих настроек на данный момент достаточно. Более
детальную настройку и конфигурирование оставляю на ваше усмотрение.
Настраиваем Postfix для работы
с Exchange
Определимся, что мы ожидаем от Postfix.
n Принимать почту, пересылаемую ему Exchange и
отправлять ее дальше в мир.
n Проверять всю входящую и исходящую почту на
вирусы.
n Проверять всю входящую почту на наличие спама и
выставлять ей соответствующие балы.
n Для экономии трафика необходимо проверять, есть
ли получатель входящего письма в нашем домене, и в зависимости от результата
либо принимать, либо отвергать письмо.
n Пересылать все прошедшие проверку входящие
письма на Exchange.
Прежде всего нам потребуется
установить Postfix. Об этом достаточно много имеется информации в Интернете,
поэтому остановлюсь лишь на главных моментах. У нас есть два варианта
установки:
n просто пересылать всю входящую почту внутрь
сети, не задумываясь, есть ли такой почтовый пользователь;
n предварительно проверять наличие пользователя в
AD и в случае его отсутствия не принимать почтовое сообщение.
По первому варианту вы можете посмотреть уже
упоминавшуюся здесь статью [1]. Однако я предпочел остановиться на втором
варианте. Это позволит нам существенно сэкономить трафик и поможет уменьшить
количество приходящего спама.
Для начала установим LDAP-client.
# cd /usr/ports/net/openldap22-client/
# make install clean
Далее устанавливаем Postfix с поддержкой LDAP.
Если вы собираете его из портов, отметьте соответствующий пункт, в другом
случае вам потребуется указать это явно:
# gmake tidy
# gmake makefiles
CCARGS="-I/usr/local/include -DHAS_LDAP" AUXLIBS="-L/usr/local/lib
-R/usr/local/lib -lldap -L/usr/local/lib -R/usr/local/lib -llber"
# gmake install
Приступаем к конфигурированию Postfix
Для начала установите все минимально необходимые значения.
Что именно, можно узнать в документации на Postfix и в Интернете.
n Добавим в значение переменной «mynetworks»
IP-адрес Exchange-сервера (например, 192.168.1.2/32).
n В качестве антивирусного сканера я использую ClamAV.
Как его подключить к Postfix, можно прочитать в статье [2].
n Как подключить SpamAssassin, можно прочитать
там же.
n Для проверки наличия учетной записи будем
использовать LDAP-запросы к AD. Именно для этого мы и собирали Postfix с
поддержкой LDAP. Внесем следующие записи в main.conf:
# имя Windows-домена
ldapmap_search_base = dc=office,
dc=company, dc=ru
# IP-адрес PDC
ldapmap_server_host =
192.168.16.1
# LDAP-порт
ldapmap_server_port = 3268
ldap_timeout = 60
ldapmap_query_filter =
(&(proxyAddresses=smtp:%s)(|(objectClass=user)(objectClass=group)(objectClass=contact)))
ldapmap_result_filter = %s
ldapmap_result_attribute = canonicalName
ldapmap_special_result_attribute
=
ldapmap_scope = sub
ldapmap_bind = yes
ldapmap_bind_dn = ldapquery@office.company.ru
ldapmap_bind_pw = LdaPassworD
ldapmap_cache = no
ldapmap_dereference = 0
ldapmap_domain = office.company.ru
ldapmap_debuglevel = 0
virtual_mailbox_maps = ldap:ldapmap
virtual_mailbox_domains = company.ru
Для того
чтобы у Postfix были права на выборку информации о пользователях домена,
заведем в домене нового пользователя ldapquery с паролем LdaPassworD.
В
результате данной процедуры Postfix будет опрашивать домен на наличие
пользователя с заведенным почтовым ящиком типа user@company.ru. В случае
положительного ответа письмо будет приниматься для дальнейшей доставки, в
случае отрицательного – отвергаться с кодом, указанным в переменной unknown_local_recipient_reject_code.
n Чтобы Postfix после всех проверок отправлял
письмо Exchange, добавим в main.conf:
virtual_transport
= hash:/etc/postfix/virtual_transport
transport_maps = hash:/etc/postfix/virtual_transport
и
создадим файл /etc/postfix/virtual_transport:
company.ru smtp:[192.168.16.5]
где
192.168.16.5 – IP-адрес Exchange-сервера, а company.ru – домен, всю приходящую
для которого почту следует пересылать на другой сервер. Не забываем после
создания или редактирования этого файла делать:
postmap /etc/postfix/virtual_transport
Дополнительное конфигурирование
Для полноценной работы нам, возможно, потребуется еще
несколько штрихов, а именно:
n Создать группы рассылок на Exchange. Для этого
необходимо сделать следующее:
n Создать группу распределения.
n Создать почтовый аккаунт для этой группы.
n Добавить в эту группу всех, кто должен быть
подписан на эту рассылку.
n Разобраться, как можно сделать алиасы в Exchange.
Для этого можно использовать два варианта:
n Создать в Active Directory дополнительные
SMTP-записи для каждого пользователя, которому необходимо прописать alias. Этот
вариант проще и предпочтительнее.
n Там же можно создать запись типа CC для тех же
целей.
На этом можно считать минимально необходимую
настройку для работы данной связки законченной. Все возможные ошибки и проблемы
всегда возможно отследить в логах postfix, где все достаточно информативно
пишется. Так же для обсуждения этой статьи и всех дополнительных вопросов
существует специально созданный топик на форуме [3].
Данный вариант является рабочим, проверен на
офисе компании. Но у него есть как минимум один недостаток – он
потенциально не защищен от атак типа DoS на AD, в случае большого количества
одновременных внешних SMTP-сессий. Чтобы этого избежать, можно либо настроить в
Postfix ограничения на количество одновременных сессий, либо скриптом по cron
забирать информацию из AD и складывать ее на машине с Postfix. Но это тема уже
совсем другой статьи.
Литература,
ссылки:
1. Полянский
И. Postfix как шлюз для Exchange. – Журнал «Системный администратор», №5, 2004
г. – 34-37 с.
2. Почтовая
система на базе Postfix, PostgreSQL, с фильтрацией вирусов и спама на FreeBSD
5.3 – www.deepnet.ru, раздел «Статьи».
3. http://forum.deepnet.ru.