Wednesday, October 18th, 2017

Корпоративный почтовый сервер

Published on Март 30, 2009 by   ·   Комментариев нет

анная статья является подведением некоторых итогов над
моими экспериментами с Postfix. Вы можете использовать ее как базовый
документ, длясоздания на базе Postfix своих почтовых серверов работающих
под управлением RedHat подобных дистрибутивов Linux. Эта статья не
является официальным документом. Я надеюсь, что вы имеете опыт работы в
Linux.

Введение

Данная почтовая система построена на операционной системе Linux, а
еслибыть точнее под дистрибутивом Linux CentOS. Как упоминалось ранее,
данная статья, может быть использована для построения почтовых систем на
дистрибутивах Linux подобных на Red Hat. Я использовал Postfix, как MTA
для своей системы, IMAP/

POP3 сервером служит dovecot. Из-за ограниченности аппаратного
обеспечения, какантиспам решение я использовал postgrey. Clalmav
выступает в роли антивирусногофильтра для нашей почтовой системы. База
пользователей храниться в MySQL.

Структуру базы данных мы будем использовать от проекта postfixadmin,
а соответственно сам проект как веб интерфейс к панели управления
почтовой системы.

Все программы устанавливались в большинстве случаев из rpm пакетов. А
если ситуация требовала доработки, то скачивался с Интернета src.rpm
пакет, которыйпересобирался в rpm пакет и устанавливался в систему.

В написании данной статьи я использовал статью автора Johnny Chada.
Выражаю ему благодарность за его работы.

MySQL

Как я отметил ранее, MySQL нужен для хранения в ней базы
данных пользователей, а если быть точнее: названия учетной записи, пароля
в шифрованномвиде, пути, на основе которого MTA будет складывать почту и
многое другое. Нампонадобится:

1.установить СУБД;
2.обезопасить нашу СУБД и подкорректировать работу СУБД под нашинужды;
3.создать базу данных;
4.создать пользователя, который будет с ней работать и назначить емуправа

Воспользовавшись программой yum, я установил MySQL сервер. Ну а если
это вас не устраивает, то вы вольны установить MySQL сервер любым удобным
вам методом.

    yum -y install mysql-server mysql-devel

Установка программы может занять некоторое время. При каннеле 2 Mbps это
заняло у меня минут 5-7.

Теперь нам необходимо отконфигурировать демон СУБД и установить
пароль для супер пользователя. Для этого необходимо запустить скрипт
/usr/bin/mysql_secure_installation. Он представляет собой визард. Все
что нужно — это читатьвопросы и отвечать на них. Далее необходимо
принудить MySQL слушать толькоlocalhost и включить регистрацию событий
MySQL. На этапе установки этонеобходимая функция для того, чтобы видеть
какие запросы отправляет система вСУБД. Позже её можно будет отключить.
Для этого надо открыть файл /etc/my.cnf идобавить в него следующие
строки:

        [mysqld]
        log=/var/log/mysqld.log
        bind-address=127.0.0.1
        ...

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

        #mysql -u root -p
        Enter password:
        mysql>CREATE DATABASE mail;
        mysql>GRANT ALL PRIVILEGES ON mail.* TO postmaster@localhost IDENTIFIEDBY password

С настройкой СУБД мы закончили, перейдем к настройкам postfix.

Postfix

Postfix это довольно быстрый в работе и простой в настройке Mail
Transport Agent. Как я отметил ранее, я не стремился собирать программы
из исходных кодов, мне интересно было насколько быстро можно развернуть
систему. К сожалению, поумолчанию rpm пакет postfix идет без поддержки
mysql. Соответственно нужно былонайти src.rpm пакет данного пакета,
который нашел на http://rpmfind.net .

После установкиданного пакета необходимо открыть для редактирования spec
файл пакета. Изменяемпараметры %define MYSQL 0 на %define MYSQL 1. Далее
необходимо будет найти иотключить PostgreSQL параметры и собрать пакет с
помощью команды rpmbuild(rpmbuild ba postfix.spec). Компиляция и
создание rpm пакета в зависимости отвозможности компьютера может занять
до 5 минут. Собранный пакет лежит в /usr/src/ redhat/RPMS/i386

Примечание: данный путь действителен для ОС i386 если у вас
иная архитектура, то путь будет соответственно другим.

Устанавливаем данный пакет:

  rpm -ivh postfix-X.Y.Z.i386.rpm

Пакет установлен, его конфигурационные файлы находятся в /etc/postfix.
У postfix есть два конфигурационных файла, которые мы и будем
редактировать (этоmain.cf и master.cf). Так же во время конфигурации нам
нужно будет создать несколько конфигурационных файлов. И так, начнем с main.cf:

#vim /etc/postfix/main.cf

        soft_bounce = no
        queue_directory = /var/spool/postfix
        soft_bounce = no
        daemon_directory = /usr/libexec/postfix
        mail_owner = postfix
        default_privs = nobody
        myhostname = mail.mailserver.tld
        mydomain = mailserver.tld
        myorigin = $mydomain
        mydestination = $myhostname,localhost.$myhostname,localhost
        local_recipient_maps = $virtual_mailbox_maps,
            $virtual_alias_maps,
            $transport_maps
        unknown_local_recipient_reject_code = 550
        mynetworks = 127.0.0.0/8
        relay_domains = $transport_maps
        alias_maps = hash:/etc/aliases
        alias_database = hash:/etc/aliases.db
        mail_spool_directory = /var/mail
        smtpd_banner = $myhostname ESMTP
        debug_peer_level = 2
        debug_peer_list = 127.0.0.1
        debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        xxgdb $daemon_directory/$process_name $process_id & sleep 5
        sendmail_path = /usr/sbin/sendmail
        mailq_path = /usr/bin/mailq
        setgid_group = postdrop
        html_directory = no
        manpage_directory = /usr/local/man
        config_directory = /etc/postfix

Это базовые настройки Postfix, которые достаточны для старта сервера. Но
это ещё не все. Не закрывая конфигурационный файл, дописываем
конфигурацию дляработы с виртуальными пользователями.

        virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf
        virtual_mailbox_base = /var/vmail
        virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf
        virtual_alias_maps = mysql:$config_directory/sql/valias.cf
        virtual_minimum_uid = 1150
        virtual_uid_maps = static:1150
        virtual_gid_maps = static:12
        virtual_transport = dovecot
        dovecot_destination_recipient_limit = 1
        smtpd_sasl_auth_enable = yes
        smtpd_sasl_exceptions_networks = $mynetworks
        smtpd_sasl_security_options = noanonymous
        broken_sasl_auth_clients = yes
        smtpd_sasl_type = dovecot
        smtpd_sasl_path = private/auth

Значения всех этих параметров вы можете найти на сайте postfix. Но здесь
есть некоторые параметры, которые я хотел бы пояснить. Параметры
virtual_minimum_uid иvirtual_uid_maps указывают на ID пользователя,
которого я специально создал дляобработки почты. virtual_gid_maps
указывает ID на группу mail. В моем случае эточисло равное 12. Уточните
ID вашей группы mail. И так давайте создадимпользователя, который будет
обрабатывать пользователя.

        #useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin \
            -c Virtual Mailbox vmail
        #mkdir -pv /var/vmail
        #chmod 770 /var/vmail
        #chown vmail:mail /var/vmail

Мы не хотим, чтобы наш почтовый сервер был открытым релеем,
поэтому допишем следующие строки в main.cf

        smtpd_recipient_restrictions = permit_mynetworks,
            permit_sasl_authenticated,
            reject_unauth_destination,
            permit

Этот параметр мы будем редактировать, но на данном этапе нам хватает.

Теперь нам необходимо создать конфигурационные файлы в соответствии с
данными, которые я указал в main.cf, чтобы postfix мог обращаться к
нашей базе данных.

#vim /etc/postfix/sql/vdomains.cf

        user = postmaster
        password = password
        hosts = localhost
        dbname = mail
        table = domain
        select_field = domain
        where_field = domain
        additional_conditions = and backupmx = '0' and active = '1'
        #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'

#vim /etc/posfix/sql/

        user = postmaster
        password = password
        hosts = localhost
        dbname = mail
        table = mailbox
        select_field = CONCAT(domain,'/',maildir)
        where_field = username
        additional_conditions = and active = '1'
        #query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s'AND active = '1'

#vim /etc/postfix/sql/valias.cf

        user = postmaster
        password = password
        hosts = localhost
        dbname  = mail
        table = alias
        select_field = goto
        where_field = address
        additional_conditions = and active = '1'
        #query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Примечание: параметры user и password это пользователь и его пароль,
который вы задали для работы postfix c базой данный в разделе MySQL.

Как видно из конфигурационного файла локально внутри сервера
обработкой почты будет занимать dovecot. Поэтому сначала нам необходимо
установить dovecot.

   yum -y install dovecot

(Конфигурация dovecot будет рассмотрена ниже)

Для того, чтобы dovecot служил локальным транспортом нам необходимо
добавить в master.cf следующие строки.

#vim /etc/postfix/master.cf

  dovecot unix  - n n - - pipe
             flags=-DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)

Перед тем как перейти к настройке dovecot, давайте завершим
конфигурацию postfix. Сначала давайте допишем ограничения самого postfix,
а далее подключим кpostfix-у postgrey и clamav. Открываем файл main.cf
для редактирования, находимпараметр smtpd_recipient_restrictions и
дописываем следующие строки:

#vim /etc/postfix/main.cf

        smtpd_recipient_restrictions = permit_mynetworks,
                permit_sasl_authenticated,
                reject_unauth_destination,
                reject_non_fqdn_recipient,
                reject_unverified_recipient,
                reject_rbl_client cbl.abuseat.org,
                reject_rbl_client dialups.mail-abuse.org,
                reject_rbl_client dull.ru

Пояснения о каждом параметре можно прочитать на http://www.postfix.org

Перед тем как приступить к установке clamav и postgrey
рекомендую произвести поиск в своем репозитарии на наличии этих пакетов.

Примечание: в стандартном репозитарии CentOS я не нашел пакета postgrey,
а clamav есть демон clamd. В репозитарии Fedora не было postgrey, а у
clamav отсутствовал демон clamd. Проблему эту можно решить, в Интернете я
набрел нарепозитарий для Enterprise Linux полностью открытый и
поддерживаемый сообществом. Вот ссылка на этот репозитарий, вы можете
скачать и установитьданный репозитарий и установить нужные вам пакеты
без проблем.

    yum -y install postgrey

После установки нам нужно дописать всего 1 строчку после, которого postfix
подружиться с postgrey. Открываем main.cf и делаем соответствующие изменения:

#vim /etc/postfix/main.cf

        smtpd_recipient_restrictions = permit_mynetworks,
            permit_sasl_authenticated,
            reject_unauth_destination,
            check_policy_service unix:/var/spool/postfix/postgrey/socket
            reject_non_fqdn_recipient,
            reject_unverified_recipient,
            reject_rbl_client cbl.abuseat.org,
            reject_rbl_client dialups.mail-abuse.org,
            reject_rbl_client dull.ru

Примечание: check_policy_service должен быть обязательно прописан
после параметра reject_unauth_destination. Так же check_policy_service
как видно работаетчерез UNIX сокет, есть так же возможность работы через
TCP порт. Вам нужнобудет проверить скрипт автозапуска для выяснения по
как стартует демон.

На этом привязка postgrey к postfix-у закончилась. Приступим к установке
инастройке clamav.

  yum -y install clamd

У clamav есть конфигурационный файла, которые нужно привести к
нижеследующему виду:

#vim /etc/clamd.conf

        LogFile /var/log/clamav/clamd.log
        LogFileMaxSize 0
        LogTime yes
        LogSyslog yes
        LogFacility LOG_MAIL
        LogVerbose yes
        PidFile /var/run/clamav/clamd.pid
        TemporaryDirectory /var/tmp
        DatabaseDirectory /var/clamav
        LocalSocket /var/run/clamav/clamd.sock
        FixStaleSocket yes
        TCPSocket 3310
        TCPAddr 127.0.0.1
        MaxConnectionQueueLength 30
        MaxThreads 50
        ReadTimeout 300
        User clamav
        AllowSupplementaryGroups yes
        ScanPE yes
        ScanELF yes
        DetectBrokenExecutables yes
        ScanOLE2 yes
        ScanPDF yes
        ScanMail yes
        ScanHTML yes
        ScanArchive yes
        ArchiveBlockEncrypted no

И конфигурационный файл freshclam, который отвечает за
обновление вирусной базы антивируса:

#vim /etc/freshclam.conf

        DatabaseDirectory /var/clamav
        UpdateLogFile /var/log/clamav/freshclam.log
        LogSyslog yes
        LogFacility LOG_MAIL
        DatabaseOwner clamav
        DatabaseMirror db.az.clamav.net
        DatabaseMirror db.local.clamav.net
        NotifyClamd /etc/clamd.conf

Привязать clamav можно разными путями. Я предпочел привязку
спомощью ClamSMTP. На сайте проекта я нашел ссылку на Source RPMS
данной программы которая облегчила бы установку и интеграцию.
Соответственно я зашел искачал нужный мне пакет, собрал его и установил
его на свою систему. После этогонужно сконфигурировать демон ClamSMTP и
привязать его к postfix.

#vim /etc/clamsmtp

        OutAddress: 10026
        TimeOut: 180
        KeepAlives: 0
        XClient: on
        Listen: 127.0.0.1:10025
        ClamAddress: /var/run/clamav/clamd.sock
        Header: X-Virus-Scanned: ClamAV using ClamSMTP
        TempDirectory: /tmp
        Action: drop
        Quarantine: on
        User: clamav

Для того, чтобы привязать clamav с помощью ClamSMTP нам нужно дописать в
main.cf и master.cf следующие строки:

#vim /etc/postfix/main.cf

        content_filter = scan:127.0.0.1:10025
        receive_override_options = no_address_mappings

#vim /etc/postfix/master.cf

   scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes

Таким образом, мы пере направляем почту для проверки в clamav. Но нам
также нужно, чтобы письма возвращались обратно в postfix. Для этого в
master.cf файле мыдобавляем нижеследующие строки:

#vim /etc/postfix/master.cf

        127.0.0.1:10026 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

Вот и все, в принципе SMTP часть почтового сервера готова, за
исключением схемы, которую мы будем использовать в нашей базе данных (как
отмечалось ранее еемы возьмем из postfixadmin-а. Он будет
рассматриваться ниже в разделе Apache). Ночто это за почтовый сервер, у
которого нет IMAP/POP3 части. Ранее мы установилиdovecot, который и
будет отвечать за эту часть нашего почтового сервера.

Dovecot

Конфигурационный файл dovecot по формату немного отличается
от конфигурационных файлов, с которыми мы работали до этого. Мы
будем редактировать 2 конфигурационных файла (dovecot.conf и
dovecot-sql.conf), которыележат в директории /etc. Вы можете скачать
src.rpm пакет и указать другое месторасположение данных файлов.

Итак, откроем конфигурационный файл dovecot.conf для редактирования
и приведем его к следующему виду:

#vim /etc/dovecot.conf

        base_dir = /var/run/dovecot/
        protocols = imap pop3
         protocol imap {
            listen = *:143
         }
         protocol pop3 {
            listen = *:110
         }
       
        log_timestamp = "%Y-%m-%d %H:%M:%S"
        syslog_facility = mail
        mail_location = maildir:/var/vmail/%d/%u
        mail_debug = yes
        first_valid_uid = 1150
        last_valid_uid = 1150
        maildir_copy_with_hardlinks = yes
        protocol imap {
             login_executable = /usr/libexec/dovecot/imap-login
             mail_executable = /usr/libexec/dovecot/imap
             imap_max_line_length = 65536
        }

        protocol pop3 {
             login_executable = /usr/libexec/dovecot/pop3-login
             mail_executable = /usr/libexec/dovecot/pop3
             pop3_uidl_format = %08Xu%08Xv
        }
        protocol lda {
             postmaster_address = postmaster@mailserver.tld
             sendmail_path = /usr/lib/sendmail
             auth_socket_path = /var/run/dovecot/auth-master
        }
        auth_verbose = yes
        auth_debug = yes
        auth_debug_passwords = yes
        auth default {
             mechanisms = plain
             passdb sql {
                args = /etc/dovecot-sql.conf
             }
             userdb sql {
                 args = /etc/dovecot-sql.conf
             }
             user = nobody
             socket listen {
             master {
                 path = /var/run/dovecot/auth-master
                 mode = 0660
                 user = vmail
                 group = mail
                }
                 client {
                 path = /var/spool/postfix/private/auth
                 mode = 0660
                 user = postfix
                 group = postdrop
                 }
            }
        }
        dict {
        }
        plugin {
        }

Как видно из данного конфигурационного файла нам нужен
другой конфигурационный файл под названием dovecot-sql.conf. По умолчанию
данный конфигурационный файл лежит в следующей директории
/usr/share/doc/dovecot-X.Y.Z/ examples/dovecot-sql-example.conf. Можно
скопировать его в директорию /etc илисоздать в директории /etc файл
dovecot-sql.conf. Нужно привести данныйконфигурационный файл к ниже
следующему виду:

#vim /etc/dovecot-sql.conf

        driver = mysql
        connect = host=localhost dbname=postfix user=postmaster password=uRandom57
        default_pass_scheme = MD5
        user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROMmailbox WHERE username = '%u' AND active = '1'
        password_query = SELECT username as user, password, '/var/vmail/%d/%n' asuserdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 as userdb_uid, 12 asuserdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

Примечание: dovecot чувствителен к реестрам символов в
своих конфигурационных файлах

Apache

Плоха та система, которой невозможно управлять. Для того, чтобы
установить postfixadmin нам необходим Apache с поддержкой php. Необходимо
установить следующее программное обеспечение:

   yum y install httpd php php-imap php-mbstring php-common php-pdo php-mysqlphp-cli

Для установки postfixadmin нужно скачать архив с сайта программы
и выполнить следующие команды

#cd /var/www/html

        #wget http://surfnet.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-2.2.1.1.tar.gz
        #tar zxvf postfixadmin-2.2.1.1.tar.gz

После распаковки архива необходимо перейти в директорию postfixadmin
и отредактировать файл config.inc.php. В принципе данный конфигурационный
файл ничего сложного из себя не представляет. (Подводным камнем является
параметр $CONF[emailcheck_resolve_domain]). В обозревателе открываете
путь к даннойпанели управления.

Послесловие

Данная конфигурация работает в одной организации, которая
попросила заменить их коммерческий продукт на данную систему.
























































































































Смотрите также:

Readers Comments (Комментариев нет)




Да человек я, человек! =)

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]