мая 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. Itachi1701 on 28 Апр 2010 at 18:39 #

    Кстати еще в папке /home/vmail/ ниче нема а в логах на счет нее пишет что permission denied (видимо должно само создавать папки) — мона ли както решить это?

    прошу ответить на 1 и 2 вопросик

  2. ivan on 28 Апр 2010 at 19:48 #

    Пробую отправлять и с почтового клиента и с телнета

    cms porn

  3. Максим Степанов on 28 Апр 2010 at 22:06 #

    ivan что за спам в комментариях, у вас вирусы?
    Itachi1701 что в логах по поводу ошибки? права на директорию выставить надо нормально, chown -R vmail:vmail /home/vmail

  4. ivan on 29 Апр 2010 at 08:50 #

    ivan что за спам в комментариях, у вас вирусы?

    Прошу прощенья, виноват, буду разбираться.

  5. Itachi1701 on 29 Апр 2010 at 11:20 #

    ubuntuserver postfix/virtual[11710]: fatal: bad string length 0 < 1: virtual_mailbox_base =

    ubuntuserver dovecot: POP3 : file_dotlock_open() failed with file /home/vmail/itachi1701/dovecot.index.log : Rermission denied

    и еще — почту отпавляю — алиас работает — но даже самому себе не доходит! отправлено но не дошло! когда ввожу mailuser с паролем mailuser2007 (как у вас) то его не принимает

  6. Itachi1701 on 29 Апр 2010 at 11:25 #

    короче максим спасибо — сделаю сначала еще раз и все буква к букве как у вас а потом уже если вдруг не выйдет то буду вас мучать — решил ошибку сначала в себе найти! СПС — начну буква в букву как в статье — там посмотрим

  7. Максим Степанов on 29 Апр 2010 at 11:27 #

    Права на директорию поправить надо. В конфиге ошибка. Это логин пароль на базу данных, при чем тут почта? Статью читайте внимательно, а не между строк, там все описано верно, и работает в конце настройки.

  8. Itachi1701 on 30 Апр 2010 at 11:25 #

    кстати не хочу нече плохого сказать но когда мы создаем и заполняем базу
    CREATE TABLE `virtual_domains` ( — то на эти ковычки в начале ругается синтакс еррором! удалю ковычки — работает!

  9. Максим Степанов on 30 Апр 2010 at 12:11 #

    У меня в консоле mysql не ругается.

  10. Itachi1701 on 04 мая 2010 at 00:08 #

    все терь сделал все буква в букву без ошибок вроде! check прошел успешно!

    терь через telnet 25 отправил почту сам себе

    а вот telnet 110 не могу забрать

    пишу
    user john
    pass summersun
    — ERR Authentication Failed

    снова

    user mailuser
    pass mailuser2007
    — ERR Authentication Failed

    и без пароля пробовал!

    как забрать почту которую отправил сам себе? что это за фигня с паролями (все как у вас в статье)

  11. Максим Степанов on 04 мая 2010 at 08:19 #

    Хватит страдать херней с телнетом, есть почтовые клиенты. Авторизация по почтовому ящику полностью, про это написано в статье.

  12. Itachi1701 on 04 мая 2010 at 12:35 #

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

  13. Itachi1701 on 04 мая 2010 at 12:42 #

    через The Bat не могу забрать почту — сам себе посылаю без проблем а не могу принять!

  14. Максим Степанов on 04 мая 2010 at 12:44 #

    Если вы почитаете вопросы других комментаторов статьи вы поймете что они по делу, а вот ваши наводят на мысли что вы не видите разницы между паролем от mysql и паролем от почтового ящика. Вы читали как надо авторизоваться через телнет? Мне кажется что нет. Статью внимательно читали? Видимо опять же нет, так как там сказано в каком формате вводится логин для ящиков. Вы настраиваете почтовый сервер или просто копируете примеры конфига из статьи? Видимо второе, что не даст вам желаемого результата. Я не хотел вас обидеть, но ваши вопросы наводят на мысли о низком уровне знаний в области Linux, и если вы не в состоянии самостоятельно настроить сервер не надо задавать глупые вопросы в комментариях к статье по его настройке, это же блог, в не форум с обсуждением и попутным обучением новичков настройкам Linux сервера. Скопируйте ссылку на статью на форум и попросите помощи. Форум выберите сами. Хотите помощи по настройке от меня — пожалуйста, но она не будет безвозмездной.

  15. RTFM « Timpson's blog on 16 мая 2010 at 16:07 #

    […] бы все разжевывалось и объяснялось, примерно как вот тут. В сети можно найти огромное количество copy-paste методов […]

  16. Kolian on 19 мая 2010 at 11:36 #

    Привет есть ряд вопросов. Настроил без проблем.
    Читал http://workaround.org/ispmail/etch
    Вопросы 1 и 2 наиболее мне важны.

    1.Не работает пересылка почты с наружи, на внешние домены пишет relay закрыт.
    5.7.1 Relay accessdenied
    May 19 11:12:26 smtp postfix/smtpd[5544]: connect from unknown[XXX.XXX.XXX.XX]
    May 19 11:12:26 smtp postfix/smtpd[5544]: NOQUEUE: reject: RCPT from unknown[XXX.XXX.XXX.XX]: 554 5.7.1 : Relay access denied; from=testuser@mydomain.ru to= proto=SMTP helo=
    May 19 11:12:26 smtp postfix/smtpd[5544]: disconnect from unknown[XXX.XXX.XXX.XX]

    Добавлю что в обратной зоне для моего сервера, нет записи.

    2.Нужно авторизовывать пользователей по имени, без указания домена. Делал так как написано выше , у меня не работает.
    изменить запрос.
    password_query = SELECT email as user, password FROM view_users WHERE email=’%u’;
    На
    password_query = SELECT email as user, password FROM view_users WHERE email=CONCAT(‘%u’,’@mydomain.ru’);
    не помогло.

    May 19 11:32:10 smtp dovecot: auth-worker(default): sql(test,XXX.XXX.XXX.XX): Password query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘��test’,’@mydomain.ru’)’ at line 1

    3.Прикрутил роунд куб. Нужен доступ с наружи для webпочты.
    Помогите настроить его через https или дайте линк на ман. И вообще по подробней расскажите , если кто знает, про правильную настройку, чтоб всё было безопасно. На данный момент просто по 80 порту всё работает, вызывает вопросы , нужно или нет делать виртуальный хост, пока тупо в www положил.

    4. PostfixAdmin запускается но не видит и не создаёт доменов. Пока решилис пользовать этот скрипт (UserReg http://narod.ru/disk/17990441000/madmin-1.0.0.4.zip.html). Но PostfixAdmin выглядит приятней и солидней.

    Main.cf
    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    # appending .domain is the MUA’s job.
    append_dot_mydomain = no
    # Uncomment the next line to generate «delayed mail» warnings
    #delay_warning_time = 4h
    readme_directory = no
    # TLS parameters
    smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
    smtpd_tls_key_file = /etc/ssl/private/postfix.pem
    smtpd_use_tls = yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.
    myhostname = smtp. mydomain.ru
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = smtp.mydomain.ru, localhost. mydomain.ru, , localhost
    relayhost =
    mynetworks = 192.168.XX.0/24
    mailbox_size_limit = 0
    recipient_delimiter =
    inet_interfaces = all
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
    smtpd_tls_auth_only = yes
    content_filter = smtp-amavis:[127.0.0.1]:10024
    receive_override_options = no_address_mappings

    master.cf
    #
    # Postfix master process configuration file. For details on the format
    # of the file, see the master(5) manual page (command: «man 5 master»).
    #
    # Do not forget to execute «postfix reload» after editing this file.
    #
    # ==========================================================================
    # service type private unpriv chroot wakeup maxproc command args
    # (yes) (yes) (yes) (never) (100)
    # ==========================================================================
    smtp inet n — — — — smtpd
    #AMaViS:
    smtp-amavis unix — — n — 2 smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

    127.0.0.1:10025 inet n — — — — smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
    -o local_header_rewrite_clients=
    #submission inet n — — — — smtpd
    # -o smtpd_tls_security_level=encrypt
    # -o smtpd_sasl_auth_enable=yes
    # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #smtps inet n — — — — smtpd
    # -o smtpd_tls_wrappermode=yes
    # -o smtpd_sasl_auth_enable=yes
    # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #628 inet n — — — — qmqpd
    pickup fifo n — — 60 1 pickup
    cleanup unix n — — — 0 cleanup
    qmgr fifo n — n 300 1 qmgr
    #qmgr fifo n — — 300 1 oqmgr
    tlsmgr unix — — — 1000? 1 tlsmgr
    rewrite unix — — — — — trivial-rewrite
    bounce unix — — — — 0 bounce
    defer unix — — — — 0 bounce
    trace unix — — — — 0 bounce
    verify unix — — — — 1 verify
    flush unix n — — 1000? 0 flush
    proxymap unix — — n — — proxymap
    proxywrite unix — — n — 1 proxymap
    smtp unix — — — — — smtp
    # When relaying mail as backup MX, disable fallback_relay to avoid MX loops
    relay unix — — — — — smtp
    -o smtp_fallback_relay=
    # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
    showq unix n — — — — showq
    error unix — — — — — error
    retry unix — — — — — error
    discard unix — — — — — discard
    local unix — n n — — local
    virtual unix — n n — — virtual
    lmtp unix — — — — — lmtp
    anvil unix — — — — 1 anvil
    scache unix — — — — 1 scache
    #
    maildrop unix — n n — — pipe
    flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
    #
    uucp unix — n n — — pipe
    flags=Fqhu user=uucp argv=uux -r -n -z -a$sender — $nexthop!rmail ($recipient)
    #
    ifmail unix — n n — — pipe
    flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
    bsmtp unix — n n — — pipe
    flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
    scalemail-backend unix — n n — 2 pipe
    flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
    mailman unix — n n — — pipe
    flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
    #Dovecot
    dovecot unix — n n — — pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

  17. Максим Степанов on 19 мая 2010 at 12:17 #

    Без mx записей и ptr многие сервера будут отвергать почту.

    password_query = select user, password from virtual_users where user=’%u’; но это будет работать только с одним доменом, если будет два домена, и одинаковый юзер и там и там то как сервер отличит к какому домену авторизовать?

    Возьмите любой пример настройки https хоста и все.

    в Postfix admin query другие, поэтому он не работает, перепишите их под свои если очень надо.

  18. Kolian on 20 мая 2010 at 16:54 #

    1. mx конечно есть

    2. Мне нужно в любом случае такую схему.
    @domain.ru
    @domain2.ru (alias)
    @domain3.ru (alias)
    @domain4.ru (alias)
    Т.е. если люди шлют почту на адрес vasia@ domain.ru или vasia@domain2.ru или vasia@ domain3.ru, все письма получает пользователь vasia@ domai.ru.
    Авторизация по имени (без указания домена) является для меня обязательным условием.

    P.S.Да чуть не забыл, спасибо ваши ответы.

  19. Mogidin on 02 Июн 2010 at 16:45 #

    хочу уточнить про релэй.
    у прова на сайте написано:

    Рекомендуется использовать :
    Сервер исходящей почты SMTP: relay.mts-nn.ru
    Порт для отправки почты должен быть 2525
    Обязательно должна быть установлена авторизация при отправке.

    в этом случае надо в конфиге писать relayhost=relay.mts-nn.ru:2525 ?
    а про последний пункт я немного в непонятках. что, где?

  20. Максим Степанов on 02 Июн 2010 at 16:54 #

    Понастройке relay тут немного написано: http://www.postfix.org/BASIC_CONFIGURATION_README.html

  21. lexmakh on 03 Июн 2010 at 16:23 #

    Доброго времени суток!
    у меня такая ошибка:
    на команду:
    postmap -q ‘example.com’ mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    получаю ошибку:
    postmap: warning: mysql query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘??example.com???’ at line 1

    где копать подскажите плз…???

  22. Максим Степанов on 03 Июн 2010 at 16:32 #

    Кавычки нормально напишите, у вас у одного такая ошибка.

  23. k0n0n3nk0 on 22 Июн 2010 at 10:01 #

    Скажите, каким образом теперь можно забирать почту (например fetchmail’ом) с внешних ящиков и раскидывать по виртуальным почтовым клиентам?

    Сейчас я использую связку postfix dovecot fetchmail, где все почтовые клиенты являются реальными unix пользователями. fetchmail забирает почту с нужных адресов и раскидывает по почтовым ящикам определенных пользователей.

    Каким образом это можно сделать с виртуальными почтовыми пользователями?

  24. Alexey Astashov on 11 Окт 2010 at 21:50 #

    Блин все класcно, все сделал на Dovecot 2.0.5 Pigeonhole 0.21 пришлось долго мучится но заставил работать (обращаю внимание, что все версии dovecot включая версию 2.0.5 имеют ошибку (вылетает dovecot-lda/deliver c ошибкой 11) ввиду отсутствия проверки статуса почтового ящика maildir, поэтому для того чтобы заработало надо патчить файл maildir-save.c, но следующие версии видимо будут уже исправленные.)

    Теперь другой вопрос, вот у меня есть виртуал е-майл типа john@example.com, он же пользователь, но как сделать такой алиас без заведения новых почтовых ящиков, пусть виртуальных, чтобы получить типа — вся почта для адреса info@example.com безусловно отправляются на адрес john@example.com.

  25. Alexey Astashov on 11 Окт 2010 at 22:00 #

    все разобрался, не было ни одного ID пользователя для того чтобы заработал auto increment.

  26. breeze on 30 Дек 2010 at 23:18 #

    доброго времени вам!
    тоже решил осилить почтовый сервер. почта уходит на яндекс, но вот приходит она почему то не в maildir:/home/vmail/%d/%n как прописано в dovecot.conf а в /var/mail/%USER% чтото лишнее стоит и перехватывает почту о_О?

  27. breeze on 04 Янв 2011 at 22:25 #

    Все замечательно, однако немного напрягает один момент — при запуске почтовика (оутглюк экспресс) вываливает окно
    «Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.»
    подскажите как бороться? подкладывать кудато сертификаты? откуда их брать? уж простите за нубский вопрос, по безопасности пока я не ковырялся

  28. Максим Степанов on 04 Янв 2011 at 23:29 #

    Надежные сертификаты нужно покупать для каждого домена, у вас же они сгенерированы вами, и для программ они считаются ненадежными.

  29. breeze on 04 Янв 2011 at 23:50 #

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

  30. Максим Степанов on 05 Янв 2011 at 00:12 #

    Не работал с аутлуком, и по моему проще отключить шифрование.

  31. breeze on 08 Янв 2011 at 21:25 #

    поднял второй сервер на конечной машине. При попытке отправить почту ждет 60 секунд и ругается «тайм-аут в процессе связи с сервером». Telnet’ом на 25ый порт хожу, там выдает «220 post ESMTP Postfix (Ubuntu)» далее по-видимому ожидает какие то команды. smtpd в процессах сервера вижу. куда смотреть?

  32. Максим Степанов on 08 Янв 2011 at 21:30 #

    В логи смотреть.

  33. Psholty on 17 Янв 2011 at 14:43 #

    Привет!
    Спасибо за отличное руководство! Настроил связку, все работало как часы, при очередной перезагрузке, неожиданно перестали логиниться клиенты, в логах вот что:
    Jan 17 17:26:08 mx1 dovecot: Dovecot v1.2.12 starting up (core dumps disabled)
    Jan 17 17:26:08 mx1 dovecot: auth-worker(default): mysql: Connect failed to 127.0.0.1 (mailserver): Access denied for user ‘mailuser’@’myhost.mydomain.ru’ (using password: YES) — waiting for 1 seconds before retry

    Естественно dovecot не коннектится к базе со всеми вытекающими, вместо ‘mailuser’@’myhost.mydomain.ru’ должно быть ‘mailuser’@’localhost’ но добиться этого не могу, перепроверил на десять развсе конфиги, менял имя хоста и т.д. ни в какую!
    Поможите добрым советом )

    P.S. Траблы по времени совпали с настойкой NAT-a

  34. Почтовый сервер SMTP / IMAP своими руками. | Ky6uk's Blog on 15 Апр 2011 at 20:15 #

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

  35. rgatiz on 28 Апр 2011 at 15:53 #

    Подскажите в чем может быть проблема.
    При получении спама с несуществующем адресом в домене, автоматом создается папка в /home/vamail/domein.ru/ с названием несуществующего ящика, на который пришел спам.
    Настроил в точности по статье.

  36. rgatiz on 28 Апр 2011 at 16:22 #

    Ок уже исправил!

  37. virtualization and administration » Blog Archive » postfix+dovecot+mysql on 11 мая 2011 at 13:08 #

    […] Еще одна статья на тему postfix+dovecot+mysql http://sudouser.com/ustanovka-pochtovogo-servera-postfix-dovecot-mysql-i-virtualnyx-domenov.html […]

  38. qq.nix9 on 16 мая 2011 at 08:40 #

    есть способ намного проще 🙂 iredmail называется
    об установке почтового сервера — http://www.iredmail.ru/index.php/install
    за 10 минут поднимается рабочий сервак(зависит от скорости интернета)
    http://www.iredmail.ru/

  39. Максим Степанов on 20 мая 2011 at 22:14 #

    Есть zimbra, там вообще все автоматом настраивается.

  40. okta on 10 Июн 2011 at 10:42 #

    Настроил все по данной статье, за исключением того, что пришлось повозиться с dovecot 2.0. Ставил на Archlinux — все прекрасно работает. Если кому полезно будет — то чтобы перекинуть настройки из первого довекота во второй — на офф.сайте есть конвертор — все отлично конвертирует! А, и косяк один обнаружил — настраивал 2003 аутлук — пришлось ставить галку, что требуется ssl шифрование smtp. в 2007 делаешь так же — не работает ))) ТАм достаточно поставить галку на smtp сервер требует авторизацицю )) Статья отличная!

  41. okta on 10 Июн 2011 at 10:48 #

    Да, и забыл сказать — по умолчанию почему владелец файла /var/spool/postfix/private/auth root — и сервер не дает ничего отправить =( надо менять на postfix:postfix

  42. Настройка почтового сервера Postfix+Dovecot+MySQL+SSL. Часть 1. Postfix. | Блог Павла Батанова on 10 Июл 2011 at 22:50 #

    […] […]

  43. Alexey Astashov on 29 Авг 2011 at 19:34 #

    Дополнение, кому просто необходимо незаметно контроллировать исходящую почту сотрудников (корпоративную) то необходимо сделать следующее:

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

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

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

    mysql>
    CREATE TABLE `virtual_bcc_sender` (
    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;

    Прикрепляем к таблице View:

    mysql>
    CREATE VIEW view_bcc_sender AS
    SELECT CONCAT(virtual_bcc_sender.source, ‘@’, virtual_domains.name) AS email,
    destination
    FROM virtual_bcc_sender
    LEFT JOIN virtual_domains ON virtual_bcc_sender.domain_id=virtual_domains.id;
    —————

    Теперь внесем изменения в конфигурацию самого сервера Postfix
    $> postconf -e sender_bcc_maps = mysql:/etc/postfix/mysql-virtual-sender-bcc-maps.cf

    в общем-то вот, позже будет нормально исправленная админка, а то от автора админка кривая, при удалении пользователя легко можно удалить целиком домен 🙂

  44. Alexey Astashov on 29 Авг 2011 at 20:14 #

    Почемуто с ошибкой отпостилось сообщение и надо использовать прямую одинарную кавычку — ‘

    mysql>
    CREATE VIEW view_bcc_sender AS
    SELECT CONCAT(virtual_bcc_sender.source, ‘@’, virtual_domains.name) AS email,
    destination
    FROM virtual_bcc_sender
    LEFT JOIN virtual_domains ON virtual_bcc_sender.domain_id=virtual_domains.id;

  45. Alexey Astashov on 29 Авг 2011 at 20:15 #

    В общем это вопрос к автоу блога, после поста опять поменялось!, тем не менее обратите на это внимание!

  46. Alexey Astashov on 30 Авг 2011 at 19:15 #

    Вот ссылка на админку пожалуйста пользуйтесь:

    http://narod.ru/disk/23449972001/madmin-2.0.4(SSR).rar.html

    (помощь в доработке мультисерверной версии приветвуется)

  47. ПавелК » Blog Archive » Почтовый сервер для малого офиса dovecot + postfix +mysql + fetchmail + public folder on 01 Окт 2011 at 11:03 #

    […] /var/log/mail.warn /var/log/mail.info Основная часть статьи взята c sudouser.com c   с моими дополниниями и […]

  48. ПавелК » Blog Archive » Почтовый сервер для малого офиса dovecot + postfix +mysql + fetchmail + public folder on 03 Окт 2011 at 08:40 #

    […] /var/log/mail.warn /var/log/mail.info Основная часть статьи взята c sudouser.com c с моими дополниниями и исправлениями. Эта запись […]

  49. xamen on 20 Мар 2012 at 17:45 #

    Здравствуйте. Этот почтовик у меня первый и вроде все сделал как у вас. И dovecot запустился. Однако почту не могу отправит и в логах выдает следующее в mail.err:
    Mar 20 14:31:32 mail postfix/trivial-rewrite[1650]: fatal: mysql:/etc/postfix/mysql/email2email.cf(0,lock|fold_fix): table lookup problem
    mail.log:
    Mar 20 14:31:15 mail dovecot: Dovecot v1.2.15 starting up (core dumps disabled)
    Mar 20 14:31:15 mail dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mailserver)
    Mar 20 14:31:32 mail postfix/trivial-rewrite[1650]: warning: connect to mysql server localhost: Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
    Mar 20 14:31:32 mail postfix/trivial-rewrite[1650]: fatal: mysql:/etc/postfix/mysql/email2email.cf(0,lock|fold_fix): table lookup problem
    Mar 20 14:31:33 mail postfix/qmgr[1423]: warning: problem talking to service rewrite: Success
    Mar 20 14:31:33 mail postfix/master[1417]: warning: process /usr/lib/postfix/trivial-rewrite pid 1650 exit status 1
    Mar 20 14:31:33 mail postfix/master[1417]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup — throttling

    Вот конфиг main.cf:
    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no

    # appending .domain is the MUA’s job.
    append_dot_mydomain = no

    # Uncomment the next line to generate «delayed mail» warnings
    #delay_warning_time = 4h

    readme_directory = no

    # TLS parameters
    smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
    smtpd_tls_key_file = /etc/ssl/private/postfix.pem
    smtpd_use_tls = yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.

    myhostname = mail.xxxx.ru
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = $mydomain
    mydestination = xxxx.ru, localhost
    relayhost =
    mynetworks =xx.xxx.xx.48/28 127.0.0.1/24
    mailbox_command = procmail -a «$EXTENSION»
    mailbox_size_limit = 102400000
    recipient_delimiter =
    inet_interfaces = all
    virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual-mailbox-domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql/virtual-alias-maps.cf,mysql:/etc/postfix/mysql/email2email.cf
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = /private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

  50. Установка почтового сервера Postfix + Dovecot + MYSQL и виртуальных доменов | Зона SU on 06 мая 2012 at 23:25 #

    […] Установка почтового сервера Postfix + Dovecot + MYSQL и виртуальн… […]

  51. xamen on 28 мая 2012 at 22:31 #

    Итак, все исправил. Оказалось что закралось пара синтаксических ошибок в конфигах (сам виноват) и я не стал использовать файл «mysql-email2email.cf» . Я не понял его назначение и с ним postfix у меня не запускался. Но без него теперь отлично работает почта! Правда пришлось немного изменить main.conf для увеличения максимального размера передаваемого файла, а так все супер. Спасибо за подробную инструкцию!

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »

  • Реклама

  • Ссылки



    Гидра
    go2hydra.com

    Доставка, отправка и упаковка груза, складское и ответственное хранение
    w-tc.ru

    Не знаешь о чем создать сайт
    hydrafree.com

  • Теги



Server load average: 0.29, 0.28, 0.27
Server uptime: 93 days, 4 min
Your IP is: 34.236.145.124.