Сам себе почтальон: настраиваем свой SMTP/IMAP-сервер (часть 2)

Итак, почту настроили. Теперь же нужно ей управлять. И, желательно, управлять из web-интерфейса. Потому что консоль – это, конечно, труЪ, но нам же нужно удобно и просто, правда?

Для этого пользуем postfixadmin:

# sudo apt-get install postfixadmin


Далее переходим к установке:

http://example.com/postfixadmin/setup.php

В ней нет ничего сложного, основные параметры (доступ к БД) нас спросили еще раньше, при установке пакета. А может, БД у вас уже готова (мы указывали настройки доступа к БД, когда настраивали postfix, помните?).
После ввода пароля должна появится строка с хешем, копируем её, открываем файл config.inc.php находим там эту строку и вставляем хеш:

# /etc/postfixadmin/config.inc.php
...
$CONF['setup_password'] = '  ';

В этом же файлике проверяем настройки БД:

# /etc/postfixadmin/config.inc.php
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = '123';
$CONF['database_name'] = 'postfixadmin';
$CONF['database_prefix'] = '';

изменяем алгоритм шифрования:

# /etc/postfixadmin/config.inc.php
$CONF['encrypt'] = 'dovecot:CRAM-MD5';

Он должен совпадать с методом, указанным в настройках dovecot!

Так же меняем пусть до генератора паролей dovecot (он сменился в dovecot2)

# /etc/postfixadmin/config.inc.php
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

И настраиваем формат ящиков с почтой (так же как мы выше указывали в настройках dovecot.

# /etc/postfixadmin/config.inc.php
# Формат ящика будет такой: /var/vmail/example.com/username
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

Теперь можно заходить в админку и настраивать почтовые домены, пользователей и т.д.
Там же, в конфиг-файле можно изменить еще много полезных параметров – не поленитесь его изучить.

Теперь переходим к веб-интерфейсу собственно для почты. Я остановился практически на первом попавшемся – roundcubemail.
Скачиваем тарболл, добавляем новый virtualhost в apache:


	ServerAdmin webmaster@example.com
	ServerName mail.example.com
	DocumentRoot /var/www/vhosts/mail.example.com
	
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	

	ErrorLog ${APACHE_LOG_DIR}/error.log

	LogLevel warn

	CustomLog ${APACHE_LOG_DIR}/access.log combined

Включаем сайт, перегружаем apache:

#sudo a2ensite mail.example.info
#sudo service apache2 restart

Далее заходим на наш сайт, установка тоже довольно простая. Нужно будет создать еще одну базу и ответить на несколько вопросов. Если что-то введете не так – можно будет потом поправить в конфиге.
В конце установщик предложит нам сохранить конфигурационные файлы, чтобы залить их на сервер. Ну или можно скопировать их содержимое прямо из веб-интерфейса и скопировать в файл на сервере – кому как удобней.

Например, у меня получилось нечто такое (естественно, показываю не все, а только самую мякотку)

# /var/www/vhosts/mail.example.com/config/main.inc.php
# Настройки логирования. Может пригодиться при отладке. После того, как все настроите, лучше отключить
$rcmail_config['log_driver'] = 'file';
$rcmail_config['smtp_log'] = false;
$rcmail_config['log_logins'] = false;
$rcmail_config['log_session'] = false;
$rcmail_config['sql_debug'] = false;
$rcmail_config['imap_debug'] = false;
$rcmail_config['ldap_debug'] = false;
$rcmail_config['smtp_debug'] = true;

# Т.к. IMAP у нас с шифрованием, то порт будет не 143, как по дефолту, и явно указываем SSL
$rcmail_config['default_host'] = 'ssl://localhost';
$rcmail_config['default_port'] = 993;
# SMTP у нас тоже не простой, а с шифрованием. Так что тоже уточняем использование TLS
$rcmail_config['smtp_server'] = 'tls://%n';
# Эту строку генерирует установщик, но можно и самому. Здесь должно быть ровно 24 символа
$rcmail_config['des_key'] = 'QzzTNlFdFnMbGgWbzABF2811';
# Для паролей в не-английской раскладке
$rcmail_config['password_charset'] = 'UTF-8';

После того, как конфиг-файлы успешно залиты на сервер, начинается самое интересное – это тестирование smtp и imap. Должно проходить и то, и другое. Если письма отправляются и авторизация на IMAP проходит – значит, по крайней мере, с авторизацией проблем возникнуть не должно.

Удаляем installer, заходим на mail.example.com.

Авторизуемся с той учетной записью, что создали в postfixadmin, смотрим нашу почту. Пробуем отправить письмо в мир и получить ответ. Если письма доходят в обе стороны – значит все ок.
Небольшой нюанс: папки создаются не сразу, а по мере появления в них сообщений. Так, при первом входе у нас будет только видно только папку “Входящие”. Это поведение можно изменить в конфиг-файле.

На этом настройка закончена, можно приглашать пользователей и пользоваться. Разумеется, вряд ли такой сервис можно выпускать в публичное использование посторонними. Но как сервис “для своих” такой вариант вполне годен.

UPD: При переходе с debian 7 на debain 8 выяснилось, что в PHP5.6 (который идет в комплекте с jessie) крайне серьезно подошли к вопросу использования самоподписанных сертификатов. В RoundCube, в
свою очередь (начиная с версии 1.0RC) эти возможности стали активно испоьзовать, а потому в конфиг надо добавить следующие опции в config.inc.php:
Для IMAP:

$config['default_host'] = 'ssl://mail.nixman.info';
$config['imap_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verify_depth' => 3,
'cafile' => '/etc/openssl/certs/rootCA.crt',
),
);

Здесь rootCA.crt – это сертификат нашего CA, которым мы подписали сертификаты для почтового сервера. Адрес сервера, разумеется, стоит указать свой.

Для SMTP:

$config['smtp_server'] = 'tls://mail.nixman.info';
$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verify_depth' => 3,
'cafile' => '/etc/openssl/certs/rootCA.crt',
),
);

20 Comments

  1. В первой части статьи написано “Секция настройки почтовых ящиков.” и пошло
    # ———————- VIRTUAL DOMAINS START ————
    а потом # ————————- SASL PART START ————————- и так далее
    ВОПРОС: где это прописывать??? в main.cf

  2. Вот спасибо! Самая понятная статья из всех, которые я встречал. Правда мне кое-что переделывать надо, так как раньше была связка exim4 + dovecot + postfixadmin. Но exim4 (хоть его и хвалят все привсе) оказался редкостной какашкой – поработал два дня и сдох. У postfix все же понятней где, чего и как.

  3. А еще такой вопросик: файла dovecot-sql.conf в стандартных уже нет, но есть dovecot-sql.conf.ext
    Я так понимаю нужно вписать настройки уже в dovecot-sql.conf.ext ? или переименовать его отбросив “.ext”
    Как бы вы поступили?

  4. а вот если в логах ругается на MySQL “access denied for use postfixadmin….” это надо дать ему все привелегии на базу почты в MySQL?

    1. Да, разумеется. Пользователь postfix должен присутствовать и у него должны быть все права на базу с настройками почты

  5. Короче с MySQL разобрался, но вот другие ошибки в логах
    virtual_alias_maps map lookup problem for root@localhost ….

  6. postfixadmin ставил, хеш пароль скопировал

    теперь пишет can’t encrypt password with dovecotpw, see error log for details
    По логам вроде к базе подключается и таблицы создает. По крайней мере я залогинился в MySQL под postfixadmin и по команде “shoq tables;” – выдало таблицы, раньше было пусто

  7. И еще хотел задать вопрос, какие у нас в итоге получаются настройки :
    imap 993 (ssl -yes), и адрес сервера “хостнейм”, а для smtp

  8. Все настроил, спасибо за помощь!
    Веб-морду нашел интересную, SOGo называется, получше всяких там сквиреллов и раундкубов

  9. Статья отличная, спасибо, но возник вопрос:
    всё сделал по статье, вроде бы все заработало, добавил учётку админа и тут затык: не пускает он меня в интерфейс. в чем может быть трабл? бд проверял, запись есть.

    1. Смотрите логи roundcube, postfix и dovecot
      Причин может быть несколько: разные типы аутентификации (Plain и cram-md5), может где-то не указали tls или вводите имя пользователя без домена

      1. Добрый день.

        Сделал по инструкции. Был ряд ошибок.

        Postfix ругался на эту строчку:
        smtpd_sender_restrictions = reject_unknown_sender_domain,
        check_sender_mx_access pcre:/etc/postfix/regex_blacklist,
        check_sender_access pcre:/etc/postfix/regex_blacklist,
        check_sender_ns_access pcre:/etc/postfix/regex_blacklist,
        permit

        Заменил на :

        smtpd_sender_restrictions = permit_sasl_authenticated

        Дальше по TLS:

        smtpd_tls_CAfile = /etc/ssl/certs/rootCA.crt
        smtpd_tls_cert_file = /etc/ssl/certs/postfix.crt
        smtpd_tls_key_file = /etc/ssl/private/postfix.key

        Вы указываете данные пути, но при этом в инструкции нигде не создаете этих сертификатов.
        И еще вы снова упоминаете эти сертификаты, но пути к ним уже другие.

        $config[‘smtp_server’] = ‘tls://mail.nixman.info’;
        $config[‘smtp_conn_options’] = array(
        ‘ssl’ => array(
        ‘verify_peer’ => false,
        ‘verify_depth’ => 3,
        ‘cafile’ => ‘/etc/openssl/certs/rootCA.crt’,
        ),
        );

        При чем в Дебиане нет папки openssl. Есть только ssl. Но и там нет этих файлов.

        В инструкции вы создаете пары файлов для постфикаса и довекота с расширением *.pem, а в инструкции пишите:

        # файлы сертификатов в кодировке pem
        ssl_cert = </etc/ssl/certs/postfix.crt
        ssl_key = </etc/ssl/private/postfix.key

        Тут я поменял расширение на нужное.

        Итог: не работает TLS

        Теперь вопрос: как так может получатся, что по smtp подключаюсь как без авторизации так и с авторизацией?

        (Конфиг ваш)

  10. Шифрование
    /etc/dovecot/conf.d/10-ssl.conf

    В первой строку нужно добавить (Решетку)

    #SSL/TLS support: yes, no,

    Вот почему у людей ругается на:

    can’t encrypt password with dovecotpw, see error log for details

Leave a Reply