главная - Статьи - Почта - Postfix + Dovecot + MySQL
Настройка почтового сервера Linux
Теги: Настройка сервера Почтовый сервер
Последнее изменение: 03 апреля 2013 года.
Вступление
Это первая статья по настройке почтового сервера на Linux в составе Dovecot 2.0.9, Postfix 2.6.6, базой данных MySQL, интерфейсом администрирования PostfixAdmin, веб-интерфейсом к почте RoundCube и все это на CentOS 6.3.
Вообще, эту и все связанные с ней статьи я пишу для того, чтобы задокументировать всякие тонкости, с которыми я сталкивался при настройке почтового сервера на CentOS. А заодно уж и поделюсь с общественностью приобретенным опытом. Несмотря на то, что все в этой статье прошло проверку не раз и не два, вы должны понимать, что от релиза к релизу что-то чуть-чуть меняется, от того, прописано у вас имя хоста или нет, где-то что-то может сработать не так, как здесь написано. Директория /var/log/ должна стать вашим хорошим знакомым :) В этом нет ничего страшного.
Я уже где только не предлагал - скажу еще раз - есть отличный проект iRedMail.org, с помощью которого вы можете легко и просто установить все, что описано ниже и даже намного больше. Я тестировал этот продукт, мне понравилось. По-крайней мере, вы получаете на своем любимом дистрибутиве работающий почтовый сервер. И не за 2-3 дня, а сразу. А зачем я тогда писал эту и сопутствующие статьи? Мне не нужны антиспамы и прочее для внутреннего корпоративного сервера. Мне не нужны куча привязок и заморочек, так что обновить что-либо достаточно непросто. Наконец, я хочу понимать, что происходит в моем сервере.
Для кого это руководство? Для начинающих системных администраторов, у которых куча вопросов, нехватка времени и желание получить все и сразу. Совсем сразу не выйдет, но большинство вопросов тут описано.
Оглавление
- Установка базы данных MySQL, в которой будем хранить настройки пользователей, список доменов и пр.
- Установка веб-сервера Apache для доступа к инструментам управления почтовым сервером
- Установка PostfixAdmin для управления почтовым сервером (пользователи, виртуальные домены и др.).
- Postfix - МТА, отвечает за доставку почты (SMTP).
- 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
Запоминаем пароль от настроек 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".
Почтовый адрес
Некорректный адрес администратора!
Это может произойти от того, что 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, заработал.
Авторизуйтесь для добавления комментариев!
service iptables stop
".Также вы можете столкнуться с неявными проблемами, которые создаст вам SELinux, который охраняет вашу систему от нестандартного поведения служб, а вы как раз эти службы терзаете почем зря. Поэтому рекомендую отключить SELinux на время настройки. Делается это разными способами:
# setenforce 0
или
# echo 0 > /selinux/enforce
/etc/selinux/config
изменить параметрSELINUX=disabled
Перезагрузить компьютер.