Установка Iredmail-почтового сервера как шлюз перед Exchange

Опишу здесь свой опыт настройки Iredmail для работы с Exchange

Требования

Требуется настроить почтовый сервер как шлюз перед Exchange:

  • Должна быть поддержка antispam-решения
  • Должна быть поддержка greylist-решения
  • Должна быть поддержка DKIM-решения
  • Должна быть поддержка Active Directory
  • Список пользователей должен выгружаться из Active Directory
  • Список групп должен выгружаться из Active Directory

Что подходит

Я выбрал Iredmail как решение наиболее подходящее. Из коробки поддерживает antispam, antivirus, greylist, DKIM, spf. Есть бакэнд для работы с LDAP-серверами, в том числе с Active Directory. На сайте присутствует полная информация по настройке.

Установка

Для установки мне предоставили сервер на базе CentOS 6.2. Сервер был обновлен до последней версии 6.8.

DNSMASQ

Я считаю, что на почтовом сервере должен работать кэширующий днс-сервер. я выбрал DNSMASQ, ниже мой конфиг


[root@mail ~]# cat /etc/dnsmasq.conf 
conf-dir=/etc/dnsmasq.d

[root@mail ~]# cat /etc/dnsmasq.d/activedirectory.conf 
server=/mydomain.kz/192.168.1.1
server=/mydomain.kz/192.168.1.2
server=/mydomain.kz/192.168.1.3
server=/1.168.192.in-addr.arpa/192.168.1.1
server=/1.168.192.in-addr.arpa/192.168.1.2
server=/1.168.192.in-addr.arpa/192.168.1.3

[root@mail ~]# cat /etc/dnsmasq.d/dns.conf 
no-dhcp-interface=eth0
interface=lo

[root@mail ~]# cat /etc/dnsmasq.d/resolvfile.conf 
resolv-file=/etc/resolv.conf.dnsmasq

[root@mail ~]# cat /etc/resolv.conf.dnsmasq 
nameserver 8.8.8.8
search mydomain.kz 

DNSMASQ знает где находятся сервера Active Directory, все остальные запросы отправляет в днс-сервер Гугла.

Iredmail + Active Directory

Iredmail устанавливается с поддержкой LDAP, затем по этой статье настраиваем поддержку Active Directory.

В нашем решение нам не нужно было настраивать dovecot, webmail, так что эти разделы можно пропустить.

но есть отличие о которых я хотел написать.

Настройка транспорта для postfix

[root@mail postfix]# postconf|grep transport_maps
transport_maps = hash:/etc/postfix/transport
[root@mail postfix]# cat /etc/postfix/transport
mydomain.kz smtp:[192.168.1.4]:25

Настройка ldap

[root@mail postfix]# postconf |grep ldap
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ad_sender_login_maps.cf
virtual_alias_maps = proxy:ldap:/etc/postfix/ad_virtual_alias_maps.cf, proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf
virtual_mailbox_maps = proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf

[root@mail postfix]# cat /etc/postfix/ad_sender_login_maps.cf 
server_host     = srv01.mydomain.kz
server_port     = 389
version         = 3
bind            = yes
start_tls       = yes
tls_ca_cert_file= /etc/pki/tls/certs/mydomain.der
bind_dn         = username
bind_pw         = password
search_base     = dc=mydomain,dc=kz
scope           = sub
query_filter    = (&(userPrincipalName=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= userPrincipalName
debuglevel      = 0

[root@mail postfix]# cat /etc/postfix/ad_virtual_alias_maps.cf 
server_host     = srv01.mydomain.kz
server_port     = 389
version         = 3
bind            = yes
start_tls       = yes
tls_ca_cert_file= /etc/pki/tls/certs/mydomain.der
bind_dn         = username
bind_pw         = password
search_base     = dc=mydomain,dc=kz
scope           = sub
query_filter    = (&(objectClass=person)(mail=%s))
result_attribute= mail
debuglevel      = 0

[root@mail postfix]# cat /etc/postfix/ad_virtual_group_maps.cf 
server_host     = srv01.mydomain.kz
server_port     = 389
version         = 3
bind            = yes
start_tls       = yes
tls_ca_cert_file= /etc/pki/tls/certs/mydomain.der
bind_dn         = username
bind_pw         = password
search_base     = dc=mydomain,dc=kz
scope           = sub
query_filter    = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail
result_attribute= userPrincipalName
debuglevel      = 0

[root@mail postfix]# cat /etc/postfix/ad_virtual_mailbox_maps.cf 
server_host     = srv01.mydomain.kz
server_port     = 389
version         = 3
bind            = yes
start_tls       = yes
tls_ca_cert_file= /etc/pki/tls/certs/mydomain.der
bind_dn         = username
bind_pw         = password
search_base     = dc=mydomain,dc=kz
scope           = sub
query_filter    = (&(objectclass=person)(userPrincipalName=%s))
result_attribute= userPrincipalName
result_format   = %d/%u/Maildir/
debuglevel      = 0
[root@mail postfix]# 

Данный конфиг помог побороть проблему с пользователями и их емайлами. Основные емайлы имели вид userXXXX@mydomain.kz, использовались только для служебных целей. Для переписки использовались другие alias - name.familyname@mydomain.kz. Стандартный конфиг не мог найти alias, находил только основные емайлы. Пришлось почитать, погуглить. Решение в файле ad_virtual_alias_maps.cf.

Поддержка LDAP-TLS

В Windows Server 2012 по умолчанию включен режим tls, даже если обращаться по порту 389, то происходит starttls, и уже в безопасной среде происходит обмен данными. В документации этого документа не было. Решение - попросил Windows-администратора выгрузить мне ca-сертификат, который использует домен. Затем преобразовать его в der-формат, указать в конфиге ldap и postfix использовать tls-режим

[root@mail ~]# cat /etc/openldap/ldap.conf
HOST srv01.mydomain.kz
PORT    636
TLS_CACERT /etc/pki/tls/certs/mydomain.der
TLS_REQCERT demand

Установка Let’s Encrypt

Пользуясь случаем установил сертификат let’s encrypt. Настраивал по этой статье.

DKIM, spf

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

comments powered by Disqus