Postfix как почтовый шлюз для MS Exchange Server.

В данной статье рассматривается, как настроить почтовый сервер Postfix, который будет выступать в роли почтового шлюза для Exchange (Postfix MailGate for Exchange Server).
Данная конфигурация тестировалась на серверах FreeBSD, OpenBSD и RedHat Linux.
Сервера стоят в разных организациях, кол-во почтовых ящиков в этих организациях от 200 до 600.


Как поставить Postfix из исходников - рассказывать не буду. Перейдём сразу к настройке.


Открываем main.cf и находим следующие строчки (если их не существует в конфигурационном файле - допишите сами):


myhostname = mailgate.faq-cisco.ru (задаёте полное (FQDN) имя Вашей машины)


mydomain = faq-cisco.ru (соответственно имя Вашего домена)


Затем, указываем постфиксу, что локальных получателей у него нет:


local_recipient_maps =


Указываем, с каких подсетей/ip адресов можно пересылать почту через постфикс (релей)


mynetworks = 127.0.0.0/8, 192.168.1.0/24


Задаём имена доменов, для которых мы будем принимать почту:


mydestination = $myhostname, localhost.$mydomain, $mydomain, faq-cisco.ru, firma.ru


Указываем путь к файлу в котором прописан транспорт до нашего Exchange сервера:


transport_maps = hash:/etc/postfix/transport


В файле сопоставляем именам доменов ip адреса Exchange серверов:


faq-cisco.ru smtp:[192.168.1.3]


firma.ru smtp:[192.168.3.4]


(Квадратные скобки в данном случае нужны для того, чтобы postfix не резолвил в DNS указанные IP адреса наших Exchange
серверов)


Затем создаём lookup таблицу


Для создания этой таблицы необходимо воспользоваться командой postmap


(чтобы точно знать, где лежит файл postmap, наберите в консоли Вашего сервера
whereis postmap - она покажет Вам полный путь к команде).


/usr/sbin/postmap /etc/postfix/transport

(мне удобней всегда придерживаться правила (запускать команды с полными путями - это избавляет в некоторых случаях от недоразумений, таких как запуск исполняемых файлов различных версий, одного и того же приложения. (samba например)

После всех вышеуказанных действий перезапускаем постфикс:

/usr/sbin/postfix reload

Теперь перейдём к нашему Exchange серверу.

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

Воспользуемся LDAP запросами нашей Active Directory:

Открываем консоль Active Directory Users and Computers

В левом верхнем углу находим папку Saved Queries (сохранённые запросы)

Жмём правой кнопкой мыши по этой папке и в появившемся меню выбираем

New - Query

Задаём имя запроса и жмём кнопку Define Query

Настраиваем привычный фильтр - Выбираем только учётные записи, которые хранятся на Вашем Exchange сервере.

В меню выбираем Exchange Recipients и оставляем галку Users With Exchange Mailbox

Жмём ОК и получаем список наших получателей.

Для удобства оставляем в получившемся списке только колонку E-Mail Address

(чтобы выбрать необходимый столбец щёлкаем правой кнопкой мыши по нашему списку далее в меню View выбираем Add/Remove Columns)

Затём нажимаем правой кнопкой мыши по сохранённому запросу и в появившемся меню выбираем Export List.

В итоге получаем текстовый файл со списком email адресов нашей организации.

Открываем сохранённый файл в Excel.

Убираем из него служебные и отключенные почтовые ящики.

Ставим в соседней ячейке, (напротив email адреса) ОК и растягиваем это значение на все нижние ячейки.

В самом конце файла (следующая ячейка после последнего email адреса) дописываем
faq-cisco.ru REJECT (reject соотвественно в соседней ячейке - табуляция) firma.ru REJECT

Что делать, если Ваш Exchange Server “держит” несколько доменов?

Всё просто - в нерабочее время вы меняете recipient policy на exchange сервер таким образом, чтобы интересующий Вас домен был для всех по умолчанию. (Дело в том, что при выборке Exchange показывает ТОЛЬКО PRIMARY SMTP адреса). После экспорта возвращаете всё на свои места.

Сохраняем исправленный документ как текстовый файл.

Заливаем его в директорию postfix под именем recipients (к примеру).

Проверяем права на этот файл (учётная запись postfix должна иметь доступ на запись к этому файлу).

Затем создаём lookup таблицу:

/usr/sbin/postmap /etc/postfix/recipients

Открываем main.cf и прописываем следующее:

smtpd_sender_restrictions =
..
check_recipient_access hash:/etc/postfix/recipients
(вместо точек Вы указываете необходимые по Вашему мнению директивы, к примеру
reject_non_fqdn_sender,
reject_rhsbl_sender blackhole.securitysage.com
reject_unknown_sender_domain
)

Перезагружаем MTA Postfix

/usr/sbin/postfix reload

Таким образом необходимо ПОСТОЯННО следить за файлом, ведь в случаях увольнения либо приёма на работу сотрудников будет удаляться/создаваться почтовый адрес.

Так же рекомендую прописать следующее:

smtpd_helo_required = yes
smtpd_helo_restrictions =
# reject_unknown_hostname,
reject_invalid_hostname,
reject_non_fqdn_hostname,
permit

# - у меня эта директива отключена. Многие почтовые серверы не имеют PTR записи в DNS
smtpd_recipient_limit = 4

Задаём кол-во получателей в одном письме.

Так же можно по вкусу добавить

smtpd_recipient_restrictions = permit_mynetworks,
check_sender_access hash:/etc/postfix/access
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_multi_recipient_bounce,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_unauth_pipelining,
reject_unknown_sender_domain,
reject_rbl_client dnsbl.ahbl.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client china.blackholes.us,
reject_rbl_client korea.blackholes.us,
reject_rbl_client cn-kr.blackholes.us,
reject_rbl_client opm.blitzed.org,
reject_rbl_client relays.ordb.org,
check_sender_access hash:/etc/postfix/access - эта запись говорит о следующем:

Если отправитель был внесён вышеперечисленными RBL серверами в чёрный список, а в НАШЕМ файле он отмечен как “белый” то postfix не будет “резать письма” от данного отправителя.

Стоит учитывать “правильность” записей в данном файле.

Пример:
yahoo.com OK (эта запись разрешает принимать почту от данного ДОМЕНА - обратите внимание - отсутствует знак @ и *)

Аналогично, чтобы “закрыть” приём писем от определённого отправителя или домена - записи должны выглядеть следующим образом
admin@faq-cisco.ru REJECT
cognize@faq-cisco.ru OK
faq-cisco.ru REJECT

После изменений в файле не забываете выполнять команды

/usr/sbin/postmap /etc/postfix/access
/usr/sbin/postfix reload

Проще всего написать исполняемый файл вида:

/usr/bin/ee /etc/postfix/access
/usr/sbin/postmap /etc/postfix/access
/usr/bin/ee /etc/postfix/recipients
/usr/sbin/postmap /etc/postfix/recipients
/usr/sbin/postfix reload

Это оптимизирует повседневные задачи.

Так же хочу обратить Ваше внимание на небольшую особенность директив

header_check
body_check

В данных директивах НЕЛЬЗЯ сделать исключений.

То есть, если письмо попало под эти правила, то оно будет обрабатываться без исключения (хотя в синтаксисе можно указывать OK и DUNNO)

Единственный вариант - заворачивать письмо на внешние фильтры - но это уже другая история.

После того, как вы всё настроили, можете прикручивать антивирусные и спам фильтры к Postfix.

Мне по душе связка clamav+clamsmtp+spamassassin (считаю это более гибким решением - как раз в отношении header и body check). В последнее время несколько раз использовал Amavis - из-за недостатка времени.

Если у Вас возникли вопросы, можете задать их в форуме

Удачи.

Comments are closed.


@Mail.ru