мая 18 2008 02:03 пп

Установка почтового сервера Postfix + Dovecot + MYSQL и виртуальных доменов

email

Данное руководство описывает установку почтового сервера Postfix в связке с dovecot и базой данных mysql для хранения данных. По окончанию настройки мы получим почтовый сервер с поддержкой SMTP, POP3, IMAP, поддержку SSL, TLS, работу с виртуальными доменами. Так же данное руководство не является исчерпывающим, и может быть трудным для понимания новичкам, так как описано конкретно как настроить сервисы, но не описано как оно работает и так далее. Конфигурация была проверена и отлично работает на серверах с установленным Linux Ubuntu версий 6.10-8.04 и Debian GNU Linux, но я думаю она подойдет и для других дистрибутивов. Описание установки приведено на примере Ubuntu, все пакеты взяты из стандартных репозиториев.

При настройке нашего нового сервиса я буду использовать примеры команд, оратите внимание на интерпритатор, их будет использоваться два, обычная командная строка (bash) и mysql, выглядит это так:

bash: $>

mysql: mysql>

Так же все действия производятся от имени пользователя root. На этом вступительную часть можно закончить и давайте приступим к установке и настройке нашего почтовика.

Установим все необходимые пакеты

Код:


aptitude install postfix-mysql mysql-server dovecot-pop3d dovecot-imapd openssl

Так же в дальнейшем вам может понадобится phpmyadmin и простой веб интерфейс для работы с почтовым ящиком, установить все это можно командой

Код:


aptitude install phpmyadmin squirrelmail

Создадим базу данных для почтового сервера

Код:


mysql>
create database mailserver;
mysql>
grant all on mailserver.* to mailuser@localhost identified by 'mailuser2007';
exit

Затем создайте таблицы в базе данных

Код:


mysql>
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
) ENGINE = InnoDB;
mysql>
CREATE TABLE `virtual_users` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
user VARCHAR(40) NOT NULL,
password VARCHAR(32) NOT NULL,
CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE = InnoDB;
mysql>
CREATE TABLE `virtual_aliases` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
source VARCHAR(40) NOT NULL,
destination VARCHAR(80) NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE = InnoDB;

Дальше необходимо создать файлы конфигурации для Postfix’a с информацией о базе данных.
Создадим файл /etc/postfix/mysql-virtual-mailbox-domains.cf и впишем в него следующее содержание

Код:


user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Этот файл содержит запрос к базе данных из которого сервер извлекает виртуальный домен.

Теперь внесем изменения в конфигурацию самого сервера Postfix

Код:


$>
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Внесем в нашу базу данных запись о виртуальном домене, в примере указан домен example.com

Код:


$>
mysql -p mailserver
mysql>
INSERT INTO virtual_domains (id, name) VALUES (1, 'example.com');
exit

Венитесь в обратно в шелл bash и проверьте правильность настроек виртуального домена командой, не забудьте сменить домен с example.com на свой.

Код:


$>
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Вы должны увидеть цифру 1 если все правильно настроено.

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

Код:


$>
groupadd -g 5000 vmail
$>
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Внесем изменения в конфигурацию Postfix’a

Код:


$>
postconf -e virtual_uid_maps=static:5000
$>
postconf -e virtual_gid_maps=static:5000

Создадим первый тестовый почтовый ящик, например john@example.com с паролем summersun

Код:


mysql>
INSERT INTO virtual_users (id, domain_id, user, password)
VALUES (1, 1, 'john', MD5('summersun'));

Потом нам необходимо создать view в базе данных для нормальной работы сервера Postfix

Код:


mysql>
CREATE VIEW view_users AS
SELECT CONCAT(virtual_users.user, '@', virtual_domains.name) AS email,
virtual_users.password
FROM virtual_users
LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;

Проверим результат командой

Код:


mysql>
SELECT * FROM view_users;

Вы должны увидеть это:

+------------------+----------------------------------+
| email | password |
+------------------+----------------------------------+
| john@example.com | 14cbfb845af1f030e372b1cb9275e6dd |
+------------------+----------------------------------+

Создадим еще один файл конфигурации для Postfix’a в котором укажем даные для работы с почтовыми ящиками нащих юзеров, создайте файл /etc/postfix/mysql-virtual-mailbox-maps.cf и впишите в него это

Код:


user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM view_users WHERE email='%s'

Внесем измения в главный файл конфига Postfix

Код:


$>
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Проверьте результат командой

Код:


$>
postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Вы должны увидеть цифру 1 если все правильно настроено.

Настроим альясы (для пересылки почты с одного ящика на другой, или с нескольких на один)

Добавим в базу данных тестовый альяс для нашего польователя john@example.com, вся почта пришедшая на его ящик будет дополнительно пересылаться на ящик jmiller@gmail.com

Код:


mysql>
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, 'john', 'john@example.com'),
(2, 1, 'john', 'jmiller@gmail.com');

Создадим view для альясов по аналогии с view для пользователей

Код:


mysql>
CREATE VIEW view_aliases AS
SELECT CONCAT(virtual_aliases.source, '@', virtual_domains.name) AS email,
destination
FROM virtual_aliases
LEFT JOIN virtual_domains ON virtual_aliases.domain_id=virtual_domains.id;

Проверим результат

Код:


mysql>
SELECT * FROM view_aliases;

Вы должны увидеть это

+------------------+-------------------+
| email | destination |
+------------------+-------------------+
| john@example.com | john@example.com |
| john@example.com | jmiller@gmail.com |
+------------------+-------------------+

Дополним конфигурацию Postfix, создайте файл /etc/postfix/mysql-virtual-alias-maps.cf и впишите в него

Код:


user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email='%s'

Проверим правильность настроек

Код:


$>
postmap -q john@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Вы увидите это
john@example.com,jmiller@gmail.com

Создадим следующий файл, /etc/postfix/mysql-email2email.cf впишем в него

Код:


user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email='%s'

Запишем настройки в главный файл конфига Postfix

Код:


$>
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf

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

Код:


$>
chgrp postfix /etc/postfix/mysql-*.cf
$>
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf

Далее настроим dovecot в качестве локального агента доставки писем, для этого отредактируйте файл /etc/postfix/master.cf добавив в конец это

Код:


dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Перезагрузите Postfix командой postfix reload, и добавьте информацию о виртуальном транспорте в главный конфиг Postfix

Код:


$>
postconf -e virtual_transport=dovecot
$>
postconf -e dovecot_destination_recipient_limit=1

Перейдем к настройкам dovecot, все файлы его конфигурации хранятся в папке /etc/dovecot, начнем настройку с файла /etc/dovecot/dovecot.conf

Найдите строку protocols и смените на

Код:


protocols = imap imaps pop3 pop3s

Так же найдите и измените строку disable_plaintext_auth до состояния disable_plaintext_auth = no

Далее измените параметр mail_location

Код:


mail_location = maildir:/home/vmail/%d/%n

Найдите строку namespace private и измените до

Код:


namespace private {
separator = .
prefix = INBOX.
inbox = yes
}

Перейдите к секции «auth default» и отредактируйте разрешенные механизмы аутентификации

Код:


mechanisms = plain login

В этой же секции измените

Код:


passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}

Измените так же параметр userdb static

Код:


userdb static {
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}

Перейдите к секции socket listen сдесь мы укажем файлы сокета для аутентификации dovecot

Код:


socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}

Перейдите к секции protocol lda, не забудьте сменить адрес постмастера на реальный

Код:


protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
mail_plugins = cmusieve
global_script_path = /home/vmail/globalsieverc
}

На этом файл можно сохранить.
Отредактируйте файл /etc/dovecot/dovecot-sql.conf, измените настройки на приведенные ниже

Код:


driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuser2007
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email='%u';

Перезапустите dovecot командой /etc/init.d/dovecot restart и загляните в лог файл /var/log/mail.log, там вы должны увидеть

Код:


dovecot: Dovecot v1.0.rc15 starting up
dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mymailserver)

Теперь выставим права доступа к файлам конфигурации dovecot

Код:


$>
chgrp vmail /etc/dovecot/dovecot.conf
$>
chmod g+r /etc/dovecot/dovecot.conf

Настроим TLS/SSL

Код:


$>
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
-keyout /etc/ssl/private/dovecot.pem

Ответьте на несколько вопросов и сертификат будет создан, не забудьте указать правльно все параметры вместо примеров привеленных ниже

Код:


Generating a 1024 bit RSA private key
.........++++++
............................++++++
writing new private key to '/etc/ssl/certs/dovecot.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:Russia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:postmaster@example.com

Выставим права доступа на файл

Код:


$>
chmod o= /etc/ssl/private/dovecot.pem

Создадим еще один сертификат по аналогии с предыдущим

Код:


$>
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem \
-keyout /etc/ssl/private/postfix.pem

Сменим права доступа

Код:


chmod o= /etc/ssl/private/postfix.pem

Внесите изменения в конфиг Postfix’a

Код:


$>
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
$>
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
$>
postconf -e smtpd_use_tls=yes

Теперь настроим аутентификацию SMTP, внесите следующие изменения в конфиг Postfix’a, не забудьте сменить примеры на реальные адреса сетей! В примере используется сеть 192.168.50.0/24 ей разрешено отправлятиь почту без SMTP авторизации.

Код:


$>
postconf -e mynetworks=192.168.50.0/24
$>
postconf -e smtpd_sasl_type=dovecot
$>
postconf -e smtpd_sasl_path=private/auth
$>
postconf -e smtpd_sasl_auth_enable=yes
$>
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

Отредактируйте файл /etc/postfix/main.cf ищменив параметр размера почтового ящика например на 10 мегабайт

Код:


mailbox_size_limit = 102400

На этом настройка нашего почтового сервера закончена, перезапустите сервисы postfix и dovecot, выполните команду postfix check для проверки правильности настроек и прав доступа на файлы, команда должна отдать пустой результат.

Все ошибки и прочие события из жизни вашего почтовика вы можете найти в логах
/var/log/mail.log
/var/log/mail.err
/var/log/mail.warn
/var/log/mail.info

Удачной настройки =)





215 комментариев »


215 комментариев to “Установка почтового сервера Postfix + Dovecot + MYSQL и виртуальных доменов”

  1. vol.denis on 10 Июн 2012 at 02:06 #

    Здравствуйте, настроил все строго по вашей инструкции, однако у меня проблема, я создал пользователя denis@pmail.loc, в the bat отправляю сообщение самому себе чтобы проверить возможность отправки. На сервер уходит без проблем, однако обратно возвращаться не желает.
    В логах увидел вот такое:
    postfix/pipe[5769]:match_list_match: pmail.loc: no match, однако стоит мне прописать в mydestination pmail.loc, как сразу же в логах появляется warning: do not list domain pmai.loc in BOTH mydestination and Virtual_mailbox_domains. как поступить?
    еще в логах нашел вот такую запись:
    postfix/local [5932]: E1E9E23256: to=, relay=local, delay=0.09, delays=0.05/0.01/0/0.03, dsn=5.1.1, status=bounced (unknown user: «denis»)

  2. Максим Степанов on 10 Июн 2012 at 04:21 #

    Сервер с почтой доступен локально?

  3. vol.denis on 10 Июн 2012 at 10:10 #

    да, локально. в virtual box-е у меня ubuntu server с настройками по вашей инструкции (ip 192.168.0.106). С основная ОС windows XP (192.168.0.102) соединен в режиме сетевой мост. между интернетом и локалкой стоит роутер (192.168.0.1). в файле /etc/hosts были следующие записи:
    127.0.0.1 localhost
    127.0.1.1 mydlp.medratech.com mydlp
    я дописал 192.168.0.102 mail.pmail.loc.
    в правильном ли я направлении мыслю, и что я мог упустить?

  4. vol.denis on 10 Июн 2012 at 10:37 #

    еще в логах очень много информации подобного вида:
    postfix/pipe: dovecot_socket: wanted_atribute:
    и там очень много параметров, например original_recipient, queue_name, log_client_address

    и еще один попутный вопрос, в вашей инструкции, вы создаете /etc/ssl/certs/dovecot.pem и /etc/ssl/private/dovecot.pem, однако в настройках dovecot про их подключение у вас ни слова. В одном из комментариев в файле dovecot.conf они присутствуют. Я правильно понимаю, что они должны быть?

  5. svol4 on 05 Дек 2012 at 13:42 #

    вопрос немного не в тему, стоит почта по статье выше изложенной, как можно ее бэкапнуть? чтобы после установки не прописывать все заного, файлы настройки только надо? или лучше все файлы слить?

  6. Максим Степанов on 05 Дек 2012 at 14:14 #

    Бэкап конфигов postfix, dovecot, дамп mysql базы. Бэкап почты по желанию.

  7. svol4 on 06 Дек 2012 at 04:56 #

    как это сделать? или вообще образ всего как? чтобы развернуть и понеслось дальше почтить

  8. Максим Степанов on 06 Дек 2012 at 08:54 #

    Спросите у гугла например 😉

  9. svol4 on 06 Дек 2012 at 13:19 #

    спросил, конкретики мало, а сам в никсах деревянный)

  10. Максим Степанов on 06 Дек 2012 at 13:26 #

    tar mysqldump решат проблему

  11. Почтовый SMTP / IMAP сервер своими руками. | Artgruden Photo Gallery on 12 Дек 2012 at 10:35 #

    […] Статья по настройке почтового сервера на sudouser.com […]

  12. tugik on 16 Мар 2013 at 01:14 #

    хорошая статья… помню когда то давно по ней делал сервер и все сразу заработало…..

    но вот недавно опять настраивал сервер…..

    и ввиду того что с момента написания статьи с 2008го года, прошло много времени и версии, всего чего можно, обновились и в следствии чего после всех настроек появляется ошибка….

    в логах /home/vmail/dovecot-deliver.log
    2013-03-14 22:04:36 deliver(user@exemple.com): Fatal: Plugin cmusieve not found from directory /usr/lib/dovecot/modules/lda

    в логах mail.log
    типа что то такого….
    Mar 14 23:53:39 cmail postfix/pipe[10331]: 80B42BE4178: to=, relay=dovecot, delay=410, delays=410/0.01/0/0.01, dsn=4.3.0, status=deferred (temporary failure)

    Это произошло по причине обновления dovecot с версии 1.0 до версии 1.2
    и поменялось имя плагина с cmusieve на sieve …

    Заходим в /etc/dovecot/dovecot.conf и ищем строку:
    mail_plugins = cmusieve
    заменяем на:
    mail_plugins = sieve
    Перезапускаем dovecot

    так что опишите это в статье в настройках dovecont в разделе lda

  13. tugik on 16 Мар 2013 at 01:54 #

    еще вот на форуме нашел подобное объяснение…

    The correct syntax is now:
    mail_plugins = sieve

    because the file was renamed from:
    /usr/lib/dovecot/modules/lda/lib90_cmusieve_plugin.so (karmic)
    to:
    /usr/lib/dovecot/modules/lda/lib90_sieve_plugin.so (lucid)

  14. nata267 on 14 Дек 2013 at 00:57 #

    А какие логин и пароль вводить для входа в squirrelmail? Вроде все сделала по инструкции, но ничего не работает

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »



Server load average: 0.00, 0.00, 0.00
Server uptime: 21 days, 3:57
Your IP is: 54.198.134.32.