Сервер в кармане, или просто о сложном!

главная - Статьи - Почта - Postfix + Dovecot + MySQL

Настройка почтового сервера Linux

Теги: Настройка сервера Почтовый сервер

Последнее изменение: 03 апреля 2013 года.

Dovecot Postfix MySQL Apache PostfixAdmin Roundcube

Вступление

Это первая статья по настройке почтового сервера на Linux в составе Dovecot 2.0.9, Postfix 2.6.6, базой данных MySQL, интерфейсом администрирования PostfixAdmin, веб-интерфейсом к почте RoundCube и все это на CentOS 6.3.

Вообще, эту и все связанные с ней статьи я пишу для того, чтобы задокументировать всякие тонкости, с которыми я сталкивался при настройке почтового сервера на CentOS. А заодно уж и поделюсь с общественностью приобретенным опытом. Несмотря на то, что все в этой статье прошло проверку не раз и не два, вы должны понимать, что от релиза к релизу что-то чуть-чуть меняется, от того, прописано у вас имя хоста или нет, где-то что-то может сработать не так, как здесь написано. Директория /var/log/ должна стать вашим хорошим знакомым :) В этом нет ничего страшного.

Я уже где только не предлагал - скажу еще раз - есть отличный проект iRedMail.org, с помощью которого вы можете легко и просто установить все, что описано ниже и даже намного больше. Я тестировал этот продукт, мне понравилось. По-крайней мере, вы получаете на своем любимом дистрибутиве работающий почтовый сервер. И не за 2-3 дня, а сразу. А зачем я тогда писал эту  и сопутствующие статьи? Мне не нужны антиспамы и прочее для внутреннего корпоративного сервера. Мне не нужны куча привязок и заморочек, так что обновить что-либо достаточно непросто. Наконец, я хочу понимать, что происходит в моем сервере.

Для кого это руководство? Для начинающих системных администраторов, у которых куча вопросов, нехватка времени и желание получить все и сразу. Совсем сразу не выйдет, но большинство вопросов тут описано. 

Оглавление

  1. Установка базы данных MySQL, в которой будем хранить настройки пользователей, список доменов и пр.
  2. Установка веб-сервера Apache для доступа к инструментам управления почтовым сервером
  3. Установка PostfixAdmin для управления почтовым сервером (пользователи, виртуальные домены и др.).
  4. Postfix - МТА, отвечает за доставку почты (SMTP).
  5. Dovecot - IMAP, POP3, авторизация, хранение почты.

Итак, поехали!

Предварительная настройка сети в CentOS

На свежеустановленной системе (например, из дистрибутива minimal, без X-Window) перед началом настройки проверьте настройки сети:

> ifconfig

Если сетевой интерфейс не активен (в выводе только lo), то надо подправить файл:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

a) адрес сети получаем через DHCP (пример):

DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"

б) адрес сети установлен вручную (пример): 

DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.1.2
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
NETWORK=192.168.1.0
NOZEROCONF=yes

DNS-сервер: 

# vi /etc/resolv.conf

nameserver 127.0.0.1
nameserver your_provider_dns_ip

Шлюз по-умолчанию:

# vi /etc/sysconfig/network

GATEWAY=192.168.1.1

После этого перезагрузите компьютер и попробуйте пропинговать, например, yandex.ru. Если все ок, идем дальше, непосредственно к программному обеспечению.

1. Установка MySQL

 

Как вариант, посмотрите здесь.

1.1 Установка и минимальная настройка

# yum install mysql-server mysql-devel
# service mysqld start
# /usr/bin/mysql_secure_installation

На этом шаге:

1) установили пароль на root:

Set root password? [Y/n] y
New password: mySQL_passWord

2) удалили анонимный вход:

Remove anonymous users? [Y/n] y
 ... Success!

3) ограничили вход только localhost:

Disallow root login remotely? [Y/n] y
 ... Success!

4) удалили тестовую базу и безпарольный вход:

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
 
 5) обновили новые настройки:
 Reload privilege tables now? [Y/n] y
 ... Success!

1.2 Создание базы данных для Postfix и Dovecot

[root@localhost ~]# mysql -p
Enter password:

mysql> CREATE DATABASE mail;
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixPassword';
mysql> GRANT ALL PRIVILEGES ON `mail`.* TO 'postfix'@'localhost';
mysql> exit

Дальше никакие таблицы создавать НЕ НАДО. Для этого мы установим PostfixAdmin и веб-сервер для управления базой данных почтового сервера.

Следующий шаг: установка веб-сервера.

 

 

2. Установка Apache

 

Собственно, сам веб-сервер:

> yum install httpd

Необходимые библиотеки:

> yum install php
> yum install php-mysql
> yum install php-mbstring
> yum install php-imap

 

 

3. Установка PostfixAdmin

 

Скачиваем архив с сайта (на 03.04.12 это будет версия 2.3.5):

> cd /var/www/html
> wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.5/postfixadmin-2.3.5.tar.gz
> tar xvfz postfixadmin-2.3.5.tar.gz

Получаем папку /var/www/html/postfixadmin-2.3.5/

Дальше создадим ссылку на эту версию postfixadmin и отредактируем файл начальной конфигурации PostfixAdmin:

> ln -s /var/www/html/postfixadmin-2.3.5/ /var/www/html/postfixadmin/
> nano /var/www/html/postfixadmin/config.inc.php

В файле изменяем:

$CONF['configured'] = true; // По-умолчанию, false
$CONF['database_name'] = 'mail'; // По-умолчанию, postfix
$CONF['database_password'] = 'postfixPassword'; // Пароль от пользователя postfix в базе данных.
$CONF['encrypt'] = 'dovecot:CRAM-MD5';

Закрываем файл, перезапускаем веб-сервер:

> service httpd restart

Открываем в браузере адрес вида: http://почтовый_сервер/postfixadmin/setup.php

Если не открывается страница, то убедитесь, что сервис httpd запущен, попробуйте отключить iptables командой "service iptables stop".

Также вы можете столкнуться с неявными проблемами, которые создаст вам SELinux, который охраняет вашу систему от нестандартного поведения служб, а вы как раз эти службы терзаете почем зря. Поэтому рекомендую отключить SELinux на время настройки. Делается это разными способами:
 
  1. Временное отключение (до перезагрузки):
    # setenforce 0
    или
    # echo 0 > /selinux/enforce
  2. Выключить насовсем - в файле /etc/selinux/config изменить параметр SELINUX=disabled
    Перезагрузить компьютер.

Запоминаем пароль от настроек PostfixAdmin ("postfixAdminPassword") и жмем "Generate password hash".

Получаем ответ:

If you want to use the password you entered as setup password, edit config.inc.php and set
$CONF['setup_password'] = '785c37b013896e6d19dc57ecec:60965d6fe4d785c37b013a65a9836bf877aceecb';

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

Я введу email "admin@mailserver.local" и пароль "adminPassword".

Здесь надо отметить, что скорее всего Postfixadmin выдаст вам такую ошибку:

Почтовый адрес
Некорректный адрес администратора!


Это может произойти от того, что email может не резолвится, например, если вы ввели название виртуального домена "от балды". Для того, чтобы postfixadmin не проверял доменное имя, надо в файле config.inc.php поменять параметр $CONF['emailcheck_resolve_domain'] с 'YES' на 'NO'. Вот и все.

Пробуем залогиниться со страницы: http://почтовый_сервер/postfixadmin/

По идее, у вас не возникнет проблем, потому что раз уж вы дошли до этого шага, то все у вас в порядке.

Так, кратко резюмируем: у нас есть база данных, в которой сохраняются виртуальные пользователи, домены, пароли и пр.

 

Если вы забыли логин/пароль суперпользователя postfixadmin (который вы вводите на странице http://бла-бла-бла/postfixadmin/ ), вы можете сделать вот что:

1. Узнать логин (логины) суперпользователя postfixadmin:

# mysql -u root -p
mysql> use mail;
mysql> select * from admin;

Поле username - это логин. Поле password - хеш пароля.

2. Сброс пароля суперпользователя postfixadmin:

В файле postfixadmin/config.inc.php ищем параметр $CONF['encrypt']'.

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

Например, если $CONF['encrypt'] = 'dovecot:CRAM-MD5' то новый пароль сгенерируем так:
# dovecot pw -s CRAM-MD5 -p testTEST123 | sed 's/{CRAM-MD5}//'

2858fffd54326fff886f30f05357d4d690cf61f6583533a6f5b1f30f7dea1cd2

Полученную строку подставляем в поле password нашего суперюзера postfixadmin (например, это может быть admin@mailserver.local):
mysql> update admin set password='2858fffd54326fff886f30f05357d4d690cf61f6583533a6f5b1f30f7dea1cd2' where username='admin@mailserver.local';

Теперь администратор postfixadmin "admin@mailserver.local" имеет пароль "testTEST123". Логинимся, меняем его на нормальный пароль. Почему сразу не сделать хороший пароль? Потому что мы все команды вводим в консоли и если не стереть всю историю команд, наш пароль будет виден всем, кто может работать в консоли.

 

Теперь самое время перейти к главному - к установке и настройке собственно почтового сервера.

Начем, пожалуй, с сервера SMTP - Postfix.

 

 

 

 Бонус!!! Лучше всего ставить после установки Postfix и Dovecot.

Ставим Roundcubemail

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

Сразу могу порекомендовать оригинал инструкции по установке Roundcubemail.

Итак, скачиваем архив последней версии, распаковываем его, удаляем файл ахива и ждем указаний:

> mkdir /var/www/html/webmail
> cd /var/www/html/webmail
> wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.7.2/roundcubemail-0.7.2.tar.gz
> tar xvfz roundcubemail-0.7.2.tar.gz
> mv roundcubemail-0.7.2 roundcubemail
> rm roundcubemail-0.7.2.tar.gz
> cd /var/www/html/webmail/roundcubemail

Ок, у нас есть заготовка по адресу /var/www/html/webmail/roundcubemail/

Копируем оригиналы конфигов (мало ли что?):

> cp config/db.inc.php.dist config/db.inc.php
> cp config/main.inc.php.dist config/main.inc.php

Создаем базу данных Roundcubemail:

> mysql -p
Enter password:

mysql> CREATE DATABASE roundcubemail;
mysql> CREATE USER 'roundcubemail'@'localhost' IDENTIFIED BY 'roundCubePassword';
mysql> GRANT ALL PRIVILEGES ON `roundcubemail`.* TO 'roundcubemail'@'localhost';
mysql> exit

Правим config/main.inc.php:

$rcmail_config['default_host'] = 'localhost';
$rcmail_config['imap_auth_type'] = PLAIN;
$rcmail_config['smtp_server'] = '';
$rcmail_config['enable_installer'] = true; (после установки изменить на false!!!)

Правим config/db.inc.php:

$rcmail_config['db_dsnw'] = 'mysql://roundcubemail:roundCubePassword@localhost/roundcubemail';

Ставим необходимые расширения php:

yum -y install php-dom php-intl

Пользователь, от имени которого запускается веб-сервер, должен иметь возможность записывать в директории temp и logs:

# chown -R apache:apache /var/www/html/webmail/roundcubemail/logs
# chown -R apache:apache /var/www/html/webmail/roundcubemail/temp
# ls -al /var/www/html/webmail/roundcubemail/

Запускаем установщик http://почтовый_сервер/webmail/roundcubemail/installer/

Инициализируем базу данных нажатием кнопки «Initialize Database».
Проверяем отправку и авторизацию стандартными средствами Roundcubemail.

На этом этапе может быть будут всякие мелочи, их лучше решить сразу и не идти дальше. Например, если у вас пароли не PLAIN, а, скажем, MD5 или еще как, у вас могут возникнуть проблемы. В принципе, именно из-за этого я был вынужден отказаться от шифрования паролей. Мы все-таки состыковываем кучу софта (веб-морду, dovecot, postfix, mysql, потом возможно еще что-то), и различия в терминах алгоритмов шифрования и др. делают работу с зашифрованными паролями настолько трудной, что я пока забил на это. Если кто-то знает работающую схему шифрования паролей, в комментариях напишите об этом и опишите как вы это сделали. Мы работаем для себя и для всех, по крайней мере, на этом сайте!

После прохождения тестов Roundcube напишет вам такое:

After completing the installation and the final tests please remove the whole installer folder from the document root of the webserver or make sure that enable_installer option in config/main.inc.php is disabled.

These files may expose sensitive configuration data like server passwords and encryption keys to the public. Make sure you cannot access this installer from your browser.

Запрещаем повторную переустановку приложения в main.inc.php:

$rcmail_config['enable_installer'] = false;

Удаляем установщик:

# rm -f -r /var/www/html/webmail/roundcubemail/installer

Заходим по адресу http://почтовый_сервер/webmail/roundcude/ и наслаждаемся web интерфейсом.

Обратите внимание: доступ через веб-сайт к каталогу config должен быть запрещен!. Для этого надо в конфиге Apache изменить "AllowOverride None" на "AllowOverride All", чтобы файл .htaccess, поставляемый вместе с Roundcube, заработал.

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?