Сам себе почтальон: настраиваем свой 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',
),
);
Просто хотел сказать, спасибо мужик!
Рад стараться 🙂
В первой части статьи написано “Секция настройки почтовых ящиков.” и пошло
# ———————- VIRTUAL DOMAINS START ————
а потом # ————————- SASL PART START ————————- и так далее
ВОПРОС: где это прописывать??? в main.cf
в том же main.cf и пишете, немного ниже
Вот спасибо! Самая понятная статья из всех, которые я встречал. Правда мне кое-что переделывать надо, так как раньше была связка exim4 + dovecot + postfixadmin. Но exim4 (хоть его и хвалят все привсе) оказался редкостной какашкой – поработал два дня и сдох. У postfix все же понятней где, чего и как.
Спасибо за лестный отзыв 🙂
А еще такой вопросик: файла dovecot-sql.conf в стандартных уже нет, но есть dovecot-sql.conf.ext
Я так понимаю нужно вписать настройки уже в dovecot-sql.conf.ext ? или переименовать его отбросив “.ext”
Как бы вы поступили?
Не имеет большого значения, главное, на него правильно сослаться.
а вот если в логах ругается на MySQL “access denied for use postfixadmin….” это надо дать ему все привелегии на базу почты в MySQL?
Да, разумеется. Пользователь postfix должен присутствовать и у него должны быть все права на базу с настройками почты
Короче с MySQL разобрался, но вот другие ошибки в логах
virtual_alias_maps map lookup problem for root@localhost ….
В первой части я писал содержимое файлов:
http://nixman.info/?p=2290
Проверяйте. postfixadmin поставили?
postfixadmin ставил, хеш пароль скопировал
теперь пишет can’t encrypt password with dovecotpw, see error log for details
По логам вроде к базе подключается и таблицы создает. По крайней мере я залогинился в MySQL под postfixadmin и по команде “shoq tables;” – выдало таблицы, раньше было пусто
И еще хотел задать вопрос, какие у нас в итоге получаются настройки :
imap 993 (ssl -yes), и адрес сервера “хостнейм”, а для smtp
Все настроил, спасибо за помощь!
Веб-морду нашел интересную, SOGo называется, получше всяких там сквиреллов и раундкубов
Всегда рад помочь 🙂
Статья отличная, спасибо, но возник вопрос:
всё сделал по статье, вроде бы все заработало, добавил учётку админа и тут затык: не пускает он меня в интерфейс. в чем может быть трабл? бд проверял, запись есть.
Смотрите логи roundcube, postfix и dovecot
Причин может быть несколько: разные типы аутентификации (Plain и cram-md5), может где-то не указали tls или вводите имя пользователя без домена
Добрый день.
Сделал по инструкции. Был ряд ошибок.
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 подключаюсь как без авторизации так и с авторизацией?
(Конфиг ваш)
Шифрование
/etc/dovecot/conf.d/10-ssl.conf
В первой строку нужно добавить (Решетку)
#SSL/TLS support: yes, no,
Вот почему у людей ругается на:
can’t encrypt password with dovecotpw, see error log for details