Журнал Системный Администратор, Июль 2005

Журнал Системный Администратор

Июль 2005

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Устанавливаем связку Postfix + Exchange

Владимир Агапов

Перед нами нетривиальная задача. Требуется организовать внутрикорпоративный документооборот на базе 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.




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению