Установка почтового шлюза на Postfix для почтового сервера MS Exchange 2010.

 Данная статья предназначена для новичков. Для тех, кто никогда не устанавливал и не настраивал Postfix. Или для тех, кто не настраивал Exchange как back-end сервер.

 

 И так имеем тестовую схему.  В данном случае IP адресация не имеет значения.

 Маршуртизатор (в моём случае DIR-100) имел правила на проброс портов 25 (SMTP) на внутренний адрес MS Exchange сервера. Для подключения POP3 клиентов нужно создать правила для портов 110 (POP3), 995 (POP3S). Так же были правила брэндмауэра, разрешающие трафик по SMTP между серверами Ubuntu и MS Exchange. Если вы будете подключать клиентов из интернета, вам нужно будет разрешить подключения по 443 порту для ActiveSync & Autodiscover.

 На сервер 192.168.30.2 была установлена Ubuntu-server 11.04 x64.

 root@mail:/# uname -a
 Linux proxy 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

 На сервер 192.168.0.2 был установлен Small Business Server 2011. Далее приведу настройки Exchange сервера. Их не много. Этих настроек хватит для обмена сообщениями между серверами с ограничениями по умолчанию. В начале добавляем наш домен в список разрешённых.

 

 Далее создаём политику для E-mail адресов. Тут только одна настройка. Что такое %m я думаю вы догадаетесь сами, во время создания политики. У вас может будет другое значение, в зависимости от ваших предпочтений в наименований почтовых ящиков.

 

 Далее создаём коннектор для отправки почты на внешний шлюз 192.168.30.2.

  

 Переходим к настройке коннектора для получения почты.

 

В Exchange 2010 есть встроенный антиспам. Но по умолчанию он включён на запрет получения спама. Включение приёма и указания почтового ящика осуществляется здесь:

 Ну, а теперь приступим к самому интересному. Настройке Postfix и ClamAV. В Ubuntu я буду всегда работать под root. Мне так удобнее. При установке Postfix можно указывать любые параметры. Их всё равно потом можно будет поменять в конфигурационном файле.

 root@mail:/#apt-get install postfix

 Конфигурационный файл /etc/postfix/main.cf. Привожу пример своего уже рабочего конфига. Красным я выделил то, что должно быть разным у нас с вами. Это ваш домен и IP адрес Exchange сервера.

 root@mail:/# cat /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt
smtpd_tls_key_file = /etc/ssl/private/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.ваш.домен
mydomain = ваш.домен

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination =
relayhost =
relay_domains = ваш.домен
relay_recipient_maps = hash:/etc/postfix/relay_recipients
local_recipient_maps =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.30.200/32
transport_maps = hash:/etc/postfix/transport
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

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

touch /etc/postfix/relay_recipients
touch /etc/postfix/transport
root@mail:/# cat /etc/postfix/transport
ваш.домен     smtp:[192.168.30.200]
root@mail:/# cat /etc/postfix/relay_recipients
admin@ваш.домен           ok

 Затем создадим так называемые "карты":

 postmap hash:/etc/postfix/relay_recipients
 postmap hash:/etc/postfix/transport

 После этого создадутся два файла .db: relay_recipients.db & transport.db

 Далее настроим сертификаты для TSL. Нужно вводить команды по очереди и отвечать на предложенные вопросы.

openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
mv smtpd.key /etc/ssl/private/
mv smtpd.crt /etc/ssl/certs/
mv cakey.pem /etc/ssl/private/

  С настрйокой Postfix пока всё. Его можно запустить: postfix start. Теперь нужно настроить SMTP-аутентификацию. Для этого будем использовать SASL. Установим необходимые пакеты libsasl2, sasl2-bin. Правда первый у меня уже был установлен:

apt-get install libsasl2
apt-get install sasl2-bin

 Потом нужно сделать вот это и не спрашивайте меня почему. Так надо. Это связанно с chroot. Ниже есть ссылки, там немного описано для чего это.

mkdir -p /var/spool/postfix/var/run/saslauthd
rm -rf /var/run/saslauthd

 Отредактируем конфигурационный файл /etc/default/saslauthd. У меня вот такой. Красным я выделил сделанные изменения.

root@mail:/# cat /etc/default/saslauthd
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
# Should saslauthd run automatically on startup? (default: no)
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"

# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"
# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd" 
# Which authentication mechanisms should saslauthd use? (default: pam)
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
# Only one option may be used at a time. See the saslauthd man page
# for more information.
# Example: MECHANISMS="pam"
MECHANISMS="pam" 
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS="" 
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5 
# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/run/saslauthd"

 Обновим конфигурацию:

dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd

 Приступим к настройке антивируса ClamAV. Вначале его нужно установить, а таже демон:

apt-get install clamav
apt-get install clamsmtpd

 Конфигурационный файл. Править там ничего не стал, хотя многие рекомендуют поменять сокет с clamd.ctl на clamd.sock.

root@mail:/# cat /etc/clamav/clamd.conf
#Automatically Generated by clamav-base postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-base
#Please read /usr/share/doc/clamav-base/README.Debian.gz for details
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket true
LocalSocketGroup clamav
LocalSocketMode 666
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
User clamav
AllowSupplementaryGroups true
ScanMail true
ScanArchive true
ArchiveBlockEncrypted false
MaxDirectoryRecursion 15
FollowDirectorySymlinks false
FollowFileSymlinks false
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog false
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/lib/clamav
SelfCheck 3600
Foreground false
Debug false
ScanPE true
ScanOLE2 true
ScanHTML true
DetectBrokenExecutables false
ExitOnOOM false
LeaveTemporaryFiles false
AlgorithmicDetection true
ScanELF true
IdleTimeout 30
PhishingSignatures true
PhishingScanURLs true
PhishingAlwaysBlockSSLMismatch false
PhishingAlwaysBlockCloak false
DetectPUA false
ScanPartialMessages false
HeuristicScanPrecedence false
StructuredDataDetection false
CommandReadTimeout 5
SendBufTimeout 200
MaxQueue 100
ExtendedDetectionInfo true
OLE2BlockMacros false
StreamMaxLength 25M
LogFile /var/log/clamav/clamav.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0
Bytecode true
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
OfficialDatabaseOnly false
CrossFilesystems true

 Правим конфигурационный файл clamsmtpd.conf:

root@mail:/# cat /etc/clamsmtpd.conf
# ------------------------------------------------------------------------------
#                        SAMPLE CLAMSMTPD CONFIG FILE
# ------------------------------------------------------------------------------
# - Comments are a line that starts with a #
# - All the options are found below with their defaults commented out
# The address to send scanned mail to.
# This option is required unless TransparentProxy is enabled
OutAddress: 10025
# The maximum number of connection allowed at once.
# Be sure that clamd can also handle this many connections
#MaxConnections: 64
# Amount of time (in seconds) to wait on network IO
#TimeOut: 180
# Address to listen on (defaults to all local addresses on port 10025)
Listen: 127.0.0.1:10026
# The address clamd is listening on
ClamAddress: /var/run/clamav/clamd.ctl
# A header to add to all scanned email
#Header: X-AV-Checked: ClamAV using ClamSMTP
# Directory for temporary files
# TempDirectory: /var/spool/clamsmtp
TempDirectory: /tmp
# PidFile: location of PID file
PidFile: /var/run/clamsmtp/clamsmtpd.pid
# Whether or not to bounce email (default is to silently drop)
#Bounce: off
# Whether or not to keep virus files
#Quarantine: off
# Enable transparent proxy support
#TransparentProxy: off
# User to run as
User: clamsmtp
# Virus actions: There's an option to run a script every time a
# virus is found. Read the man page for clamsmtpd.conf for details.

 Обратите внимание на OutAdrress и Listen. Во многих (да почти во всех) значения меняют на оборот. Я тоже менял - не работало. Когда второй раз начал настраивать, решил не менять - всё ок. Теперь добавим две строчки в файл /etc/postfix/main.cf:

content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings

 

 И последня правка одного конфигурационного файла postfix /etc/postfix/master.cf. Туда нужно добавить несколько строк. Вот эти строчки:

# AV scan filter (used by content_filter)
scan      unix  -       -       n-       16      smtp
        -o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet  n -       n-       16      smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks_style=host
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

 Обратите внимание на правильность этих строк. Я встречал статьи, где permit_mynetworks,reject находились не сразу после знака =, а на другой строчке. При перезапуске postfix вы получили бы ошибку о неверной записи в строке такой-то.

 Всё, делаем куищще (reboot) и проверяем работу почты. Я делал по следующим статьям: http://samag.ru/archive/article/280 - тут я наткнулся на строчки "Повторяю еще раз, что мы описываем взаимодействие Postfix и Exchange, и если вы не видите здесь строчек, касающихся smtp-аутентификации или еще чего-либо, то это не значит, что этого не должно быть в конфигурации вашего сервера." После этого нашёл вот эту статью: www.linuxcookbook.ru/books/ubuntu/serverguide/ru/email-services.html А антивирус устанавливал по этой статье: http://www.nixp.ru/articles/ClamAV-Plus-clamsmtpd-Plus-Postfix.html. Как видите, статьи не новые. Моя статья касается Exchange 2010 SP1, Ubuntu-server 11.04 x64, postfix 2.8.2, clamsmtpd 1.10. 

20.08.2011

 

 P.s. для себя: для чистой установки Exchange понадобится два пакета установить:

http://www.microsoft.com/en-us/download/details.aspx?id=17062

- второй позже напишу. вроде это http://www.microsoft.com/en-us/download/details.aspx?id=4705 для роли unified messaging