Постановка задачи: Необходимо установить почтовый сервер Postfix в качестве MTA для произвольного числа доменов; установить и настроить Dovecot 2.x в качестве MDA; в качестве хранилища пользователей — использовать базу данных MySQL; в качестве бэкэнда для управления доменами и пользователями установить и настроить PostfixAdmin; в качестве web-интерфеса установить и настроить RoundCube; обеспечить защиту от спама и вирусов используя цифровую подпись DKIM, dspam и ClavaAV соответственно.
Таки да, существует масса статей по настройке почтового сервера Postfix в связке с Dovecot и хранением виртуальных пользователей в базе MySQL. В первую очередь, статью писал для себя лично. На best practice не претендую, но данная конфигурация замечательно работает нескольких серверах и обслуживает десяток доменов. Кстати, настройка почтового сервера — эта та часть работы, когда создать тестовый вариант и протестировать всё «в живую» довольно сложно, и часто приходится настраивать сразу Production сервер со всеми вытекающими… Кстати, Dovecot значительно меньше представлен в русскоязычном Интернете, и если представлен — то в виде массы разрозненных частей с абсолютно разной реализацией для версии 1.х. Да и многим статьям уже по нескольку лет)).
Примечание: Статья до сих пор актуальна (03/2018), хотя местами, было дело, немного подустарела. Давеча развёртывал новый почтовый сервер на Debian9, пришлось слегка повозиться и внести некоторые «косметические» правки.
Что имеем в исходных данных:
- Плaтформа Debian 9 (Stretch)
- PostfixAdmin 3.0.x
- Postfix 3.1.x
- Dovecot 2.2.x;
- MySQL MariaDB 10.x;
- Roundcube, OpenDKIM — дополнительные пакеты.
Итак, приступаем к настройке почтового сервера:
- Предварительные настройки
- Установка и настройка PostfixAdmin
- Настройка Postfix для работы с MySQL
- Детальная настройка Postfix
- Настройка Dovecot
1. Предварительные настройки
Уверен, что LAMP уже успешно настроен на Вашем сервере… Если нет, до-установите его и вот эту небольшую «вязанку» пакетов:
dmitry@mail:~$ sudo apt-get install apache2 libapache2-mod-php7.0 php7.0 php7.0-common php7.0-curl php7.0-gd php7.0-mysql php7.0-imap mysql-server default-mysql-client mysql-common
Убедитесь, что Ваш сервер имеет верные значения в /etc/hostname, /etc/mailname и /etc/hosts. Приведите их к следующему виду:
dmitry@mail:~$ cat /etc/hostname mail dmitry@mail:~$ cat /etc/mailname example.com dmitry@mail:~$ cat /etc/hosts 127.0.0.1 localhost 32.64.22.54 mail.example.com mail
Здесь 32.64.22.54 — IP-адрес Вашего почтового сервера; mail.example.com — каноническое имя Вашего почтового сервера, в mailname можете оставить FQDN-имя. Не забудьте добавить PTR-запись в карточку DNS Вашего домена — многие почтовые сервера проверяю наличие этой записи, и отклоняют почту в случае, если IP-адрес не соответствует каноническому имени сервера.
Примечание: На самом деле, не сильно принципиально, что Вы пропишите в файле mailname, согласно документации рекомендуется использовать FQDN-имя и эти данные используются различными службами самой системы (non-MTA программами) и к настраиваемому MTA отоношение имеют крайне посредственное. Однако, позаботьтесь о том, чтобы корректно работал резолвинг имени Вашего почтового сервера (mail.example.com) в обе стороны (прямое преобразование: имя -> IP и обратное: IP -> имя). Ведь по факту, мы настраиваем мультидоменный почтовый сервер, который будет обслуживать дестяки доменов и самое важное, как именно Вы настроите сам MTA и MDA.
Финальным аккордом поставм пакеты Postfix и Dovecot с конфигурацией по умолчанию — это нужно, чтобы остальные пакеты устанавливались впоследствии правильно.
dmitry@mail:~$ sudo apt-get install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-sieve
Примечание: Dovecot уже не ставится одним пакетом — необходимо выбирать и устанавливать именно те пакеты, которые Вам нужны. В нашем случае это dovecot-core, dovecot-mysql, dovecot-imapd, dovecot-pop3d и dovecot-sieve. Если мастер postfix предложит вам выбрать вариант настройки - смело выбирайте «Только локальное использование». Эта опция сгенерирует минимально-необходимую конфигурацию и создаст базовые конфигурационне файлы /etc/postfix/{mail.cf,master.cf} - всю остальную настройку мы сделаем самостоятельно.
2. Установка и настройка PostfixAdmin
Всю настройку начинаем именно с PostfixAdmin — это удобный и бесплатный интерфейс для управления почтовым сервером, созданием доменов, ящиков, альясов и проч. Противникам и идейным «линуксоидам» могу ответить, что когда у Вас с десяток доменов и пара сотен ящиков — Вы непременно оцените преимущество данного бэк-энда. С точки зрения разграничения прав, возможности пустить рядовых пользователей в свои настройки и с точки зрения безопасности — у меня никаких нареканий к PostfixAdmin нет. Остальное — вопрос прямоты рук. Решать естественно вам. Можете погуглить дамп базы PostfixAdmin и «залить» его в базу вручную.
Кстати, пакет PostfixAdmin имеется в репозиториях Debian «Stretch» — установим его оттуда:
dmitry@mail:~$ sudo apt-get install postfixadmin
Выбираем apache2, соглашаемся на настройку пакета через dbconfig-common, указываем тип БД как mysql, делимся паролем root-а от БД, указываем новый пароль для пользователя postfixadmin, потдверждаем его и всё! Конфигуратор создаст базу, проведёт все необходимые настройки за Вас — этот процесс характерен для PostfixAdmin 2.3+. В предыдущих версиях чуток разнятся общие «телодвижения».
Теперь открываем в браузере http://your.name.or.ip/postfixadmin/setup.php, указываем пароль супер-администратора и забираем хэш… Теперь редактируем /etc/postfixadmin/config.inc.php, обращая внимание на следующие параметры:
$CONF['configured'] = true; $CONF['setup_password'] = '63b314e5c67718e98b4ec820527d3ed4:a3484f30c65e69472312c57728e77b4776478084'; $CONF['default_language'] = 'ru'; // указываем шифрование паролей, соответствующее тому, которое используется у Dovecot $CONF['encrypt'] = 'dovecot:CRAM-MD5'; // Отключаем проверку сущестоввания домена. Бывают ситуации, когда домен еще не виден в Интернете, // а почта уже должна работать -- эта опция разрешит Вам создать аккаунт для домена, // который еще «не вывешен» в Интернет $CONF['emailcheck_resolve_domain']='NO'; // Мы будем использовать dovecot, поэтому убираем префикс $CONF['create_mailbox_subdirs_prefix']=''; // укажем утилиту doveadm для создания паролей dovecot $CONF['dovecotpw'] = '/usr/bin/doveadm pw';
Устранение ошибок: Если Вы столкнулись с ошибкой 'can't encrypt password with dovecotpw, see error log for details', проверьте присутствие файла /usr/sbin/dovecotpw в вашей системе, в ином случае используйте /usr/bin/doveadm, для этого подправите $CONF['dovecotpw'] = '/usr/bin/doveadm pw'. Дополнительно, можете проверить работоспособность doveadm:
root@mail:/# doveadm pw -s CRAM-MD5 -p 'password' {CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740Также, как видите, с версии PostfixAdmin 2.3+ внесли ясность с форматом шифрования паролей для Dovecot. Ранее это был особый вариант извращения, решить проблему использования md5crypt и CRAM-MD5. Задавайте метод шифрования изначально, так как выбрав один раз MD5 Вы не сможете в дальнейшем безболезненно перейти, например, на CRAM-MD5.
Устранение ошибок:
Если на странице http://your.name.or.ip/postfixadmin/setup.php есть ошибки, исправьте их все, как то, например:
- Error: Smarty template compile directory templates_c is not writable. Please make it writable. => chmod 777 /usr/share/postfixadmin/templates_c/
- change the database_type to 'mysqli' => vi /etc/postfixadmin/dbconfig.inc.php, $dbtype='mysqli';
Установленный PostfixAdmin добавит таблицы в БД. Их дамп Вы можете посмотреть/скачать здесь. Основываясь именно на этом дампе, мы и будем строить наш бесплатный, отказо- и спамо- устойчивый почтовый сервер на базе Postfix.
Изначально добавим один наш домен example.com в обслуживание почтового сервера, настроим парочку альясов и еще чего зацепим по дороге… Где-то так —
3. Настройка Postfix для работы с MySQL
Оглядываясь на структуру mysql-таблиц PostfixAdmin, создадим необходимые файлы конфигурации и свяжем Postfix, PostfixAdmin и MySQL…
3.1 Виртуальные домены Postfix
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-virtual-mailbox-domains.cf
user = postfixadmin
password = myVerySecurePasswordFromUserPostfixadmin
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT 1 FROM `domain` WHERE `domain` = '%s' AND backupmx = '0' AND active = '1'
Этот файл содержит запрос к базе данных из которого сервер извлекает виртуальный домен с учётом активен он или «отключён за неуплату». Теперь внесем изменения в конфигурацию самого сервера Postfix:
dmitry@mail:/etc/postfix$ sudo postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Проверим, что наш вирутальный домен находится в БД и postfix его видит:
dmitry@mail:/etc/postfix$ sudo postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf 1
Вы должны увидеть цифру 1 если все правильно настроено.
3.2 Альясы
Настроим альясы (для пересылки почты с одного ящика или домена на другой, или с нескольких на один). Ранее мы добавили несколько стандартных альясов (abuse@example.com, hostmaster@example.com, postmaster@example.com webmaster@example.com) для нашего реального пользователя admin@example.com и один домен-альяс. Другими словами, вся почта, пришедшая на адреса этих альясов будет пересылаться на ящик admin@example.com.
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-virtual-alias-maps.cf user = postfixadmin password = myVerySecurePasswordFromUserPostfixadmin hosts = 127.0.0.1 dbname = postfixadmin query = select `goto` from `alias` where `address` = '%s'
Здесь же настроим пересылку почты между доменами. Мы создали в PostfixAdmin основной домен example.com и добавили домен-альяс mail.example.com. Научим наш почтовый сервер принимать почту для этого домена-альяса и пересылать её на основной домен…
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-virtual-alias-domain-maps.cf user = postfixadmin password = myVerySecurePasswordFromUserPostfixadmin hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1
Научим Postfix работать с альясами почтовых ящиков и доменами-альясами:
dmitry@mail:/etc/postfix$ sudo postconf -e 'virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-alias-domain-maps.cf'
Проверим работоспособность наших альясов. Вы должны увидеть ящик на который будет пересылаться почта если все правильно настроено.
dmitry@mail:/etc/postfix$ sudo postmap -q postmaster@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf admin@example.com dmitry@mail:/etc/postfix$ sudo postmap -q webmaster@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf admin@example.com dmitry@mail:/etc/postfix$ sudo postmap -q admin@mail.example.com mysql:/etc/postfix/mysql-virtual-alias-domain-maps.cf admin@example.com
3.3 Ретрансляция (пересылка) почты
Укажем перечень (список) доменов для которых будет приниматься почта для дальнейшей пересылки. Этот механизм также необходим для организации ретрансляции почты. Например, у Вас существует несколько MX записей с разными приоритетами, и если почта пришла на сервер с более низким приоритетом мы примем её и перешлём на основной(главный)почтовый сервер.
Как пример, добавим в наш почтовый сервер домен mail.customer.com для обслуживания, отметив его как «Резервный MX». Этого достаточно, чтобы заработала ретрансляция почты для данного отдельно выбранного домена через наш почтовый сервер.
Часто данный механизм используют, чтобы разрешить отправку почты со всех серверов отдельного кластера, без необходимости полноценной настройки почтовой службы на каждом отдельном сервере. В таком случае, наш почтовый сервер становится релеем для всех серверов кластера.
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-relay-domains.cf user = postfixadmin password = myVerySecurePasswordFromUserPostfixadmin hosts = 127.0.0.1 dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '1' AND active = '1'
Добавим настройку в Postfix:
dmitry@mail:/etc/postfix$ sudo postconf -e 'relay_domains = mysql:/etc/postfix/mysql-relay-domains.cf'
Проверим, что ретрансляция почты работает правильно.
dmitry@mail:/etc/postfix$ sudo postmap -q mail.customer.com mysql:/etc/postfix/mysql-relay-domains.cf mail.customer.com
3.4 Виртуальные пользователи или почтовые ящики Postfix
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-virtual-mailbox-maps.cf
user = postfixadmin
password = myVerySecurePasswordFromUserPostfixadmin
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT username FROM mailbox WHERE username='%s' AND active = '1'
Этот файл содержит запрос к базе данных из которого сервер извлекает пользователя с учётом активен этот ящик или нет. Внесем изменения в конфигурацию самого сервера Postfix:
dmitry@mail:/etc/postfix$ sudo postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Проверим, что наш вирутальный пользователь находится в БД и postfix его видит:
dmitry@mail:/etc/postfix$ sudo postmap -q admin@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf admin@example.com
Настройка связывания Postfix с MySQL завершена.
4. Детальная настройка Postfix
Сложилось исторически, что почта будет работать из-под свежесозданного пользователя и группы, так давайте создадим их:
dmitry@mail:/$ sudo groupadd vmail -g 5000 dmitry@mail:/$ sudo useradd vmail -g vmail -u 5000 -d /home/vmail -m dmitry@mail:/$ sudo cat /etc/passwd | grep vmail vmail:x:5000:5000::/home/vmail:/bin/sh
Внесем эти изменения в конфигурацию Postfix’a:
dmitry@mail:/$ sudo postconf -e virtual_uid_maps=static:5000 dmitry@mail:/$ sudo postconf -e virtual_gid_maps=static:5000
Выставим правильные права доступа на файлы конфигурации почтового сервера, ведь в них хранятся пароли от базы данных
dmitry@mail:/$ sudo chgrp postfix /etc/postfix/mysql-*.cf dmitry@mail:/$ sudo chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Заодно подготовим самоподписанный сертификат для Postfix
root@mail:/# mkdir /etc/postfix/certs root@mail:/# mkdir /etc/postfix/certs/private root@mail:/# openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/postfix.pem -keyout /etc/postfix/certs/private/postfix.pem Generating a 2048 bit RSA private key ...+++ ........................................................+++ writing new private key to '/etc/postfix/certs/private/postfix.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]:BY State or Province Name (full name) [Some-State]: Locality Name (eg, city) []:Minsk Organization Name (eg, company) [Internet Widgits Pty Ltd]:demon.of.by Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:demon.of.by Email Address []:spam2ban@demon.of.by
Теперь подправим «чуток» наш основной конфигурациооный файл /etc/postfix/main.cf. Идея в принципе светлая — получить безопасный и надежный почтовик с поддержкой мультидоменов и спамоустойчивый по максимому. Вначале, как принято «простыня» конфигурационных опций, потом описание что и куда и как.
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname ## # General # smtpd_banner = $myhostname ESMTP $mail_name 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 # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 myhostname = mail.example.com mydomain = example.com myorigin = $mydomain # Следите, чтобы здесь не было $myhostname и $mydomain иначе посыпятся # ошибоки вида "do not list domain in BOTH mydestination and virtual_mailbox_domains" mydestination = localhost.ec2.internal, localhost, localhost.$mydomain # Альясы системных пользователей сервера alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv4 ## # TLS parameters # smtpd_tls_cert_file = /etc/postfix/certs/postfix.pem smtpd_tls_key_file = /etc/postfix/certs/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. ## # Virtual # virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-alias-domain-maps.cf relay_domains = mysql:/etc/postfix/mysql-relay-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf ## # Restrictions # smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, check_helo_access hash:/etc/postfix/access_helo, reject_invalid_helo_hostname, reject_non_fqdn_recipient smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_multi_recipient_bounce smtpd_etrn_restrictions = permit_mynetworks, reject broken_sasl_auth_clients = yes smtpd_delay_reject = yes smtpd_helo_required = yes strict_rfc821_envelopes = yes disable_vrfy_command = yes ## # Limits # max_use = 100 mailbox_size_limit = 0 default_process_limit = 100 header_size_limit = 10485760 message_size_limit = 104857600 smtpd_error_sleep_time = 20s anvil_rate_time_unit = 60s smtpd_client_connection_count_limit = 100 smtpd_client_connection_rate_limit = 250 smtpd_client_message_rate_limit = 250 ## # Queue # maximal_queue_lifetime = 1d bounce_queue_lifetime = 1d
Создать файл /etc/postfix/access_helo диктует необходимость. К сожалению, существуют почтовые сервера, от которых надо принимать почту, но настроены они не совсем правильно.
root@mail:/# vim /etc/postfix/access_helo proxmox.packlines.local OK packline.com OK mail.ru OK 127.0.0.1 REJECT Your server configured incorrectly localhost REJECT Your server configured incorrectly localhost.localdomain REJECT Your server configured incorrectly localhost.domain.com REJECT Your server configured incorrectly 10 REJECT Your server configured incorrectly 172.16 REJECT Your server configured incorrectly 192.168 REJECT Your server configured incorrectly 1.2.3.4 REJECT Your server configured incorrectly root@mail:/etc/postfix# postmap access_helo
Заодно обработаем файл альсов системных пользователей /etc/aliases:
root@mail:/# postalias /etc/aliases
Примечание: используйте именно утилиту postalias, а не postmap. Иначе получите ошибки вида:
postmap: warning: /etc/aliases, line 2: record is in "key: value" format; is this an alias file?
Теперь можно настраивать Dovecot (Mail Delivery Agent, MDA)
5. Настройка Dovecot
Dovecot 2+ удобно разбит на части, что облегчает его настройку на порядок. С другой стороны, куча мануалов резко устарела по этой причине. Наша задача настроить MDA, так чтобы он отгружал почту по ящикам и папкам, авторизовывал почтовые клиенты через SASL и предоставлял пользователям imap и pop3 (imaps, pop3s), умел и работал с квотами.
5.1 Базовая настройка Dovecot
Минимальное изменение файла /etc/dovecot/dovecot.conf:
login_greeting = I'm MDA. Ready.
Остальная часть конфигурационного файла удобно разбита на составляющие и прекрасно документирована:
root@mail:/# vim /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no auth_mechanisms = plain login cram-md5 # Закомментируйте auth-system.conf.ext вовсе, так как у нас креденшелы будут храниться в другом месте. #!include auth-system.conf.ext # Расскомментируйте auth-sql.conf.ext, так как будет использоваться SQL. !include auth-sql.conf.ext root@mail:/# vim /etc/dovecot/conf.d/10-logging.conf info_log_path = /var/log/dovecot.info debug_log_path = /var/log/dovecot.debug auth_verbose = yes auth_debug = yes auth_debug_passwords = yes root@mail:/# vim /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/vmail/%d/%n mail_uid = 5000 mail_gid = 5000 mail_privileged_group = vmail root@mail:/# vim /etc/dovecot/conf.d/10-master.conf service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 110 } inet_listener pop3s { port = 995 ssl = yes } } service auth { unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user=postfix group=postfix } } root@mail:/# vim /etc/dovecot/conf.d/10-ssl.conf ssl = yes ssl_cert = </etc/dovecot/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem root@mail:/# vim /etc/dovecot/conf.d/15-lda.conf lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes protocol lda { mail_plugins = $mail_plugins } root@mail:/# vim auth-sql.conf.ext passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }Если в папке dovecot отсутствует сертификат и приватный ключ, сгенерируйте его по аналогии как мы это делали для postfix:
root@mail:/# ls -la /etc/dovecot/{private/*.pem,*.pem} root@mail:/# openssl req -new -x509 -days 3650 -nodes -out /etc/dovecot/dovecot.pem -keyout /etc/dovecot/private/dovecot.pem Generating a 2048 bit RSA private key ...+++ ........................................................+++ writing new private key to '/etc/dovecot/private/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]:BY State or Province Name (full name) [Some-State]: Locality Name (eg, city) []:Minsk Organization Name (eg, company) [Internet Widgits Pty Ltd]:demon.of.by Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:demon.of.by Email Address []:spam2ban@demon.of.by
Пока не забыли, настроим ротирование лог-файлов Dovecot, иначе они очень быстро начнут занимать сотни мегабайт места. Отключать их полностью смысла нет, они содержат массу полезной информации и пригодятся для анализа как ошибок, так и инцидентов, связанных с безопасностью. Создаём новую задачу для logrotate:
root@mail:/# vim /etc/logrotate.d/dovecot /var/log/dovecot.debug { notifempty weekly missingok rotate 4 compress delaycompress create 666 dovecot dovecot postrotate [ -f /var/run/dovecot/master.pid ] && doveadm log reopen endscript } /var/log/dovecot.info { notifempty weekly missingok rotate 4 compress delaycompress create 666 dovecot dovecot postrotate [ -f /var/run/dovecot/master.pid ] && doveadm log reopen endscript } root@mail:/# /etc/init.d/rsyslog restart
Заодно обновите права на эти лог файлы, чтобы избежать ошибок вида "Can't open log file /var/log/dovecot.info: Permission denied":
root@mail:/# touch /var/log/dovecot.info && chmod 666 /var/log/dovecot.info root@mail:/# touch /var/log/dovecot.debug && chmod 666 /var/log/dovecot.debug
5.2 Настройка квот в Dovecot
Настройку квот в Dovecot 2+ я специально вынес в отдельный раздел, так как не все настраивают квотирование на своих почтовых серверах. Кстати, обладая замечательной документацией (Dovecot/Quota/Configuration) наш чудный Dovecot мало того, что в этом вопросе не совсем прозрачен и настройка квот частенько затягивается на несколько часов гугления по десяткам форумов и осмысления вечного… Итак, вначале задействуем необходимые опции в конфигурационном файле PostfixAdmin
// Задаем "потолок" квот по умолчанию $CONF['aliases'] = '128'; $CONF['mailboxes'] = '128'; $CONF['maxquota'] = '512'; $CONF['domain_quota_default'] = '1024'; // Quota // активируем механизм квотирования $CONF['quota'] = 'YES'; // Установите множитель в '1024000' или '1048576', так как бэкэнд PostfixAdmin-а оперирует мегабайтами $CONF['quota_multiplier'] = '1048576'; // Optional: // Show used quotas from Dovecot dictionary backend in virtual mailbox listing. // See: DOCUMENTATION/DOVECOT.txt http://wiki.dovecot.org/Quota/Dict $CONF['used_quotas'] = 'YES'; // if you use dovecot >= 1.2, set this to yes. Note about dovecot config: table "quota" is for 1.0 & 1.1, table "quota2" is for dovecot 1.2 and newer // Мы планируем хранить квоты в БД в таблице quota2, так как dovecot у нас версии 2.x $CONF['new_quota_table'] = 'YES';
После активации настроек, PostfixAdmin будет работать со следующими полями и таблицами в БД и будет иметь вид как показано ниже:
- quota в таблице mailbox представляет собой индивидуальное значение квоты в мегабайтах для конкретного пользователя;
- maxquota в таблице domain - это предел квоты всего домена. Эти значения для каждого домена может установить только суперадминистратор PostfixAdmin
Теперь перейдем непосредственно к настройке Dovecot для работы с квотами. На примере dovecot-dict-sql.conf.ext создадим новый файл dovecot-dict-sql-user.conf, который содержит информацию отображения (маппинга) квот для почтовых ящиков пользователей.
root@mail:/# vim /etc/dovecot/dovecot-dict-sql.conf.ext connect = host=localhost dbname=postfixadmin user=postfixadmin password=myVerySecurePasswordFromUserPostfixadmin map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages } root@mail:/# chown root:dovecot /etc/dovecot/dovecot-dict-sql.conf.ext root@mail:/# chmod 640 /etc/dovecot/dovecot-dict-sql.conf.ext
Чтобы избежать создания на каждый запрос нового подключения SQL, подскажем держать наготове наш свежесозданный словарь в соответствующем процессе словарей.
root@mail:/# vim /etc/dovecot/dovecot.conf dict { sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext }
Далее правим конфигурацию MDA, чтобы позволить Dovecot вносить изменения в таблицы БД и изменять значение как квоты пользовательских ящиков (таблица quota2). Задействуем необходимые плагины для реализации квот в Dovecot в соответствующих конфигурационных файлах:
- quota: непосредственно реализует контроль квот и включает в себя управление квотированием.
- imap_quota: используется для обмена информации о состоянии квот по IMAP.
root@mail:/# vim /etc/dovecot/conf.d/10-mail.conf: # Space separated list of plugins to load for all services. Plugins specific to # IMAP, LDA, etc. are added to this list in their own .conf files. mail_plugins = $mail_plugins quota root@mail:/# vim /etc/dovecot/conf.d/10-master.conf: service dict { # If dict proxy is used, mail processes should have access to its socket. # For example: mode=0660, group=vmail and global mail_access_groups=vmail unix_listener dict { mode = 0600 user = vmail #group = } } root@mail:/# vim /etc/dovecot/conf.d/20-imap.conf: protocol imap { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins imap_quota }
Теперь — непосредственно сами квоты и настройка отсылки предупреждений о переполнении почтового ящика пользователям. В нашем случае мы заведём корневое правило quota — для квотирования пользователей:
root@mail:/# vim /etc/dovecot/conf.d/90-quota.conf ## ## Quota limits ## plugin { # Using SQL Tables to store current quota size quota = dict:User Quota::proxy::sqluserquota # это правило "зарезервируем" для ответа о квоте пользователя посредством запроса # к базе данных MySQL (см. ниже раздел 5.3) # quota_rule = # Allow 10% more for Trash Folder quota_rule2 = Trash:storage=+10%% quota_rule3 = Spam:storage=+20%% # начиная с версии 2.2+ это правило уже включено по умолчанию, # однако наша версия 2.1, поэтому разрешим всем пользователям 10% овер-квоты quota_grace = 10%% } ## ## Quota warnings ## plugin { quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u quota_warning3 = -storage=100%% quota-warning below %u # тем кто уже забил ящик, овер-квота уже недоступна } service quota-warning { executable = script /usr/local/bin/quota-warning.sh # use some unprivileged user for executing the quota warnings user = vmail unix_listener quota-warning { mode = 600 user = vmail } }
Существует также нюанс насчёт скрипта quota-warning.sh — всё-бы замечательно, но скрипт по адресу /usr/local/bin/quota-warning.sh так и не нашелся. Так что имеет смысл «написать» свой и поставить на него верные права. Кстати пример скрипта из официального руководства, также не совсем жизнеспособный на Debian «Stretch». Хотябы по той простой причине, что dovecot-lda не находится по адресу /usr/local/libexec/dovecot/dovecot-lda…
root@mail:/# vim /usr/local/bin/quota-warning.sh #!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster@demon.of.by Subject: Quota warning $PERCENT% Your mailbox is now $PERCENT% full. Please remove unnecessary emails to avoid new mail loosing. EOF root@mail:/# chown vmail:dovecot /usr/local/bin/quota-warning.sh root@mail:/# chmod +x /usr/local/bin/quota-warning.sh
Обратите внимание на опцию noenforcing — используется, дабы исключить циклическую отправку уведомлений. В былые времена Dovecot v.1 админы были вынуждены делать отдельный конфиг Dovecot с отключенными квотами, чтобы решить эту проблему. Грабли ещё те. Кстати, Вы можете проверить скрипт отправки нотификаций о квоте следующим способом:
root@mail:/# /usr/local/bin/quota-warning.sh 82 user@example.com
Квоты настроены!
Примечание: если после перезапуска в лог вывалилось ошибка вроде:
Error: net_connect_unix(/var/run/dovecot/dict) failed: Permission denied (euid=5000(vmail) egid=5000(vmail) missing +r perm: /var/run/dovecot/dict, we're not in group 108(postfix), dir owned by 0:0 mode=0755) May 13 11:43:35 mail dovecot: lda(admin{at}ъdemon.of.by): Error: Internal quota calculation errorПроверьте, что у Вас не установлена опция mail_access_groups в файле 10-mail.conf, a также задействована секция service dict в файле 10-master.conf:
service dict { unix_listener dict { mode = 0600 user = vmail #group = } }Решение взято отсюда — http://wiki2.dovecot.org/Dict
5.3 Настройка MySQL соединения в Dovecot
Финальным аккордом настройки Dovecot будет его знакомство с нашей БД и таблицами, где хранится вся необходимая для работы MDA информация, с учетом использования квот. Если квоты Вами не задействованы, исключите их из SQL запросов.
root@mail:/# vim /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin password=myVerySecurePasswordFromUserPostfixadmin default_pass_scheme = CRAM-MD5 password_query = SELECT username as user, domain, password \ FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT CONCAT('*:bytes=', IF(mailbox.quota = 0 || mailbox.quota = -1, 0, mailbox.quota)) as quota_rule \ FROM mailbox, domain \ WHERE username = '%u' AND mailbox.active = '1' AND \ domain.domain = '%d' AND domain.active = '1'
Нюансы — квоты обсчитываются в байтах, соответственно убедитесь, что в Вашей БД значения сохраняются именно в байтах… в ином случае, вы можете добавить множитель прямо в запрос, как и сделано для квоты всего домена (это значение хранится в базе в МБ).
Другим нюансом является указание/переопределение значений uid/userdb_uid, gid/userdb_gid, home и mail. В случае с виртуальными пользователями в MySQL используется один пользователь vmail на всю почту и все эти параметры уже определены в /etc/dovecot/conf.d/10-mail.conf ранее. Запрашивать их и получать с каждым новым запросом нет никакой нужды и смысла! В ином случае, добавьте в запрос следующие поля по аналогии:
password_query = … CONCAT('/home/vmail/',domain.domain) as userdb_home, \ CONCAT('maildir:/home/vmail/',domain.domain,'/', mailbox.local_part) as userdb_mail, \ '5000' AS userdb_uid, '5000' AS userdb_gid \ FROM mailbox, domain \ … user_query = … CONCAT('/home/vmail/',domain.domain) as home, \ CONCAT('maildir:/home/vmail/',domain.domain,'/', mailbox.local_part) as mail, \ '5000' AS uid, '5000' AS gid \ FROM mailbox, domain \ …
Проверить состояние квоты Dovecot для конкретного пользователя Вы можете с помощью утилиты dovadm:
root@mail:/# doveadm -Dv quota recalc -u admin@example.com root@mail:/# doveadm -Dv quota get -u admin@example.com Quota name Type Value Limit % User Quota STORAGE 5758 10240 56 User Quota MESSAGE 3 - 0
5.4 Подключаем Dovecot к Postfix
Внесем новые опции в /etc/postfix/main.cf, дабы назначить Dovecot нашим виртуальным траспортом:
## # Virtual # virtual_mailbox_base = /home/vmail virtual_transport = dovecot dovecot_destination_recipient_limit = 1 ## # SASL # smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
В /etc/postfix/master.cf внесем две строки, не забывая о двух пробелах в начале второй строки:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
Рестарт сервисов…
root@mail:/# service postfix restart root@mail:/# service dovecot restart
Анализ лог-файлов. Тестирование. Внимательное чтение мануалов, если что-то не взлетело.
Основная настройка почтового сервера завершена. Однако не стоит на этом останавливаться — обязательны к реализации следующие действия и настройки:
- настройка DKIM для Postfix или цифровая подпись исходящих сообщений DKIM;
- настройка логирования postfix как отключить запись лога postfix в syslog;
- настройка Fail2Ban для защиты служб сервера от атак извне или как сделать логи аккуратными;
- настройка "greylisting" для postfix (postgrey) или борьба со спамом продолжается;
Комментарии 56
- 1
Николай — Dec 17, 2017 at 05:31 PM
Пытаюсь настроить почтовый сервер для киррилисекого домена. Не могли бы вы обновить статью?
Rafael — Nov 02, 2017 at 06:59 AM
Уважаемый Дмитрий Владимирович!
Не могли бы вы помочь с описанием настройки плагина managesieve. Ведь там кроме того, что надо просто подключить этот плагин, надо еще настроить dovecot и доустановить какие то пакеты.....
swany — Jun 07, 2017 at 09:41 AM
Поскольку это моя любимая статья добавлю для тех, кто не смог победить:
Error: net_connect_unix(/var/run/dovecot/dict) failed: Permission denied (euid=5000(vmail) egid=5000(vmail) missing +r perm: /var/run/dovecot/dict, we're not in group 108(postfix), dir owned by 0:0 mode=0755)
May 13 11:43:35 mail dovecot: lda(admin{at}ъdemon.of.by): Error: Internal quota calculation error
Поверьте свой 90-quota.conf, обязательно должно быть четыре цифры как минимум 0600, но мне кажется лучше 0666
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = vmail
unix_listener quota-warning {
mode = 0666
user = vmail
}
Денис — Dec 09, 2016 at 12:15 AM
Наверное стоит
ssl_cert =
Василий — Aug 01, 2016 at 12:53 PM
Замечательная статья! Спасибо вам за проделанную работу.
Артем — Sep 10, 2015 at 01:33 PM
В скрипт quota-warning.sh можно добавить строку:
Content-Type: text/plain; charset=UTF-8
Тогда получится отправлять предупреждение на русском языке.
ipo — Aug 27, 2015 at 10:03 PM
connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
лечится hosts = 127.0.0.1 вместо hosts = localhost
ipo — Aug 27, 2015 at 08:19 PM
получаю ошибку
postfix/trivial-rewrite[1776]: warning: mysql:/etc/postfix/mysql-virtual-alias-maps.cf: table lookup problem
Rafael — Aug 21, 2015 at 10:18 AM
Дмитрий Владимирович!
А вам не трудно было бы дописать настройку Postfix + Dovecot + Postfixadmin для работы на IPv6 ?
Сергей — Jun 17, 2015 at 11:01 PM
Доброго времени суток.
Всё сделал по инструкции. Может быть подскажете, в чем может быть проблема с DOVECOT. Не стартует. OS -ubuntu 14.04 В логах старта службы выходит следующее:
systemctl status dovecot.service
в—Џ dovecot.service - LSB: Dovecot init script
Loaded: loaded (/etc/init.d/dovecot)
Active: failed (Result: exit-code) since Wed 2015-06-17 22:53:32 MSK; 14s ago
Docs: man:systemd-sysv-generator(8)
Process: 1727 ExecStart=/etc/init.d/dovecot start (code=exited, status=1/FAILURE)
systemd[1]: Starting LSB: Dovecot init script...
dovecot[1727]: * Starting IMAP/POP3 mail server dovecot
dovecot[1727]: Segmentation fault (core dumped)
dovecot[1727]: ...fail!
systemd[1]: dovecot.service: control process exited, code=exited status=1
systemd[1]: Failed to start LSB: Dovecot init script.
system
Если есть идеи - помогите.
В логах ещё есть такое:
kernel: doveconf[1734]: segfault at 1 ip 00007fd510c144b2 sp 00007ffee33860c0 error 4 in libc-2.21.so[7fd510bc6000+1c0000]
swany — May 22, 2015 at 10:14 AM
проблема на Debian 8/Jessie-
dovecot: master: Error: systemd listens on port 143, but it’s not configured in Dovecot. Closing.
решение
$sudo systemctl disable dovecot.socket
Den — May 20, 2015 at 05:30 PM
помогло 127.0.0.1 ))
А вот с этим что делать?
dovecot[9755]: lda(den@xxx.xxx): Warning: autocreate plugin is deprecated, use mailbox { auto } setting instead
ну и походу тогда уж добавьте, где-то нужно было:
dmitry@mail:/$ sudo chgrp vmail /var/log/dovecot*
dmitry@mail:/$ sudo chmod u=rw,g=rw,o=r /var/log/dovecot*
Дмитрий Владимирович — May 20, 2015 at 05:08 PM
Den,
1. Проверьте поля username + password в файле mysql-virtual-alias-maps.cf
2. Поставьте hosts = 127.0.0.1 в том же файле
Ну и потестайте альясы из командной строки
postmap -q postmaster@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Den — May 20, 2015 at 03:41 PM
warning: connect to mysql server localhost: Can't connect to local MySQL server through socket...ock' (2)
postfix/trivial-rewrite[7874]: warning: mysql:/etc/postfix/mysql-virtual-alias-maps.cf: table lookup problem
и как-то гугл не помогает
Павел — May 16, 2015 at 07:16 AM
Спасибо. А будет статья по настройке spamassasin и amclaw?
Артем — May 15, 2015 at 10:29 PM
приветствую!
подскажите пожалуйста, как сделать так, что бы отправлялось уведомление о превышении квоты пользователю и postmasterу?
пробовал вставлять в скрипт отправки дополнительные опции TO и BCC, безуспешно (
Игорь — May 05, 2015 at 08:23 PM
Заработало так как мне надо только после того, как изрядно поковырялся в разных примерах и пробовал разные настройках. Спасибо еще раз за статью - очень удачный вариант базовых настроек, а дальше каждый допиливает как может.
Анализ лог-файлов. Тестирование. Внимательное чтение мануалов, если что-то не взлетело.
Самая правильная фраза :)
Игорь — May 05, 2015 at 07:41 AM
Спасибо, postfix стал соединяться с mysql. Похоже не хватало какого-то пакета sasl. Теперь postfix не находит пользователя, ищет только среди локальных: relay=local не нашел у Вас в конфигах где идет запрос к mailbox.transport
Дмитрий Владимирович — May 03, 2015 at 08:07 PM
Игорь,
- 127.0.0.1 оставьте как есть. Первая ошибка аккурат была из-за сокета и проблем песочницы;
- вторая ошибка касается неправильно настроенного мильтера - возможно недоконфигуряли OpenDKIM например... смотрите что у Вас в опции smtpd_milters и что в логах соответствующей службы;
Спасибо за замечание о регистре - на работоспособность сие не влияет... Чисто эстетика по-моему)
Игорь — May 02, 2015 at 08:54 PM
Кстати поправьте в статье:
dmitry@mail:/etc/postfix$ sudo vim /etc/postfix/mysql-virtual-alias-maps.cf
user = postfixadmin
password = myVerySecurePasswordFromUserPostfixadmin
hosts = localhost
dbname = postfixadmin
query = select `goto` from `alias` where `address` = '%s'
Сделайте запрос к базе прописными буквами
Игорь — May 02, 2015 at 08:51 PM
Спасибо, действительно разжевано все до мелочей.
Ставил по Вашей статье, но столкнулся с проблемой postfix не может соединиться с mysql, в чем может быть проблема?
postmap -q admin@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf выполняется и дает нужный результат (с поправками на настройки сервера)
а сам postfi выдает:
postfix/cleanup[2185]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
причем # ls /var/run/mysqld/
mysqld.pid mysqld.sock
#lsof /var/run/mysqld/mysqld.sock
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 905 mysql 12u unix 0xffff88005b207100 0t0 13092 /var/run/mysqld/mysqld.sock
Пробовал менять localhost на 127.0.0.1 в таком случае появляется
....postfix/cleanup[2520]: 9E9802140719: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 4.7.1 Service unavailable - try again later; from=.....
Подскажите, пожалуйста куда копать
pava14 — Mar 19, 2015 at 04:30 AM
Для квот:
/etc/dovecot/conf.d/15-lda.conf
quota_full_tempfail = yes
Далее для квот:
/etc/dovecot/conf.d/90-quota.conf
service quota-status {
executable = quota-status -p postfix
inet_listener {
port = 12340
# You can choose any port you want
}
client_limit = 1
}
/etc/postfix/main.cf
smtpd_recipient_restrictions =
...
check_policy_service inet:127.0.0.1:12340,
...
Или:
/etc/dovecot/conf.d/90-quota.conf
service quota-status {
executable = quota-status -p postfix
unix_listener /var/spool/postfix/private/quota-status {
user = postfix
}
client_limit = 1
}
/etc/postfix/main.cf
smtpd_recipient_restrictions =
...
check_policy_service unix:private/quota-status,
...
Дмитрий Владимирович — Mar 11, 2015 at 02:07 PM
Виталий, спасибо за замечание - я исправил в статье.
По поводу всей этой каши с hosts, hostname и mailname Вы всё верно сказали. Но я могу сказать только одно - Ваш сервер должен на команду hostname -f должен отдавать то самое, полное каноническое имя сервера, которое указано в ДНС. Остальное несущественно.
Виталий — Mar 07, 2015 at 04:41 PM
Также, ничего не написано про настройку /etc/mailname
В /etc/hostname должно быть имя сервера без доменной части.
А в /etc/mailname наоборот - fqdn имя.
root@mx1:~# cat /etc/hostname
mx1
root@mx1:~# cat /etc/mailname
mx1.example.com
Замечание: опытным путем проверенно что hostname может быть любым, главное чтобы в mailname было прописан доменное имя, которое написано в MX-записи домена для которого делаем почту (Например: mail.example.com)
/etc/hosts
92.122.190.40 mx1.example.com mx1
Замечание: если hostname и mailname у нас не совпадают, тогда желательно в hosts прописать mailname.
Виталий — Mar 07, 2015 at 04:23 AM
Аутентификация заработала только с
$CONF['encrypt'] = 'md5crypt';
в /etc/postfixadmin/config.inc.php
Виталий — Mar 07, 2015 at 04:03 AM
Пользователи не проходят авторизацию:
Mar 07 02:52:58 auth-worker(17065): Debug: sql(123,46.211.132.130): query: SELECT username as user, domain, password FROM mailbox WHERE username = '123' AND active = '1'
Mar 07 02:53:00 auth: Debug: client passdb out: FAIL 3 user=123
Где может быть трабл?
Виталий — Mar 07, 2015 at 04:01 AM
/etc/postfixadmin/config.inc.php
Пропущена точка с запятой:
$CONF['dovecotpw'] = '/usr/bin/doveadm pw';
Дмитрий Владимирович — Feb 05, 2015 at 04:35 PM
Артём, спасибо - исправлено.
Артем — Feb 05, 2015 at 03:02 PM
Спасибо за статью!
Есть опечатка:
virtual_mailbox_base = /var/vmail
Но ранее мы указывали /home/vmail
Сергей Сергеев — Jan 28, 2015 at 09:36 AM
Добрый день. Хотел бы внести небольшую поправку в статью. При настройке dovecot-а без квот я столкнулся с проблевой описанной выше в коментах. А именно что при не указывании user_query в /etc/dovecot/dovecot-sql.conf.ext dovecot ругается на неверный SQL запрос. Но как верно подмечено в статье нам не нужно делать запрос чтобы узнать uid/guid пользователя потому что он у нас один на всех. Решается это проблема вот так:
root@mail:/# vim auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
#userdb {
# driver = sql
# args = /etc/dovecot/dovecot-sql.conf.ext
#}
То есть просто отключаем модуль userdb для driver = sql
Я проверил. Работает.
Sergey — Dec 25, 2014 at 11:55 AM
Спасибо Дмитрий Владимирович, правда всё-равно не заработало,
нужно выкладывать конфиги логи, что мне кажется не правильно здесь это делать,
поэтому я решил уйти на форум постфикса http://www.postfix.ru/viewtopic.php?t=25255 по решению проблем.
PS/ Буду благодарен за помошь там.
Дмитрий Владимирович — Dec 24, 2014 at 01:08 PM
Sergey, в таком случае попробуйте добавить всё же в файл /etc/dovecot/dovecot-sql.conf.ext строчку
user_query = SELECT CONCAT('/home/vmail/',domain.domain) as home, \
'5000' AS uid, '5000' AS gid \
FROM mailbox, domain \
WHERE username = '%u' AND mailbox.active = '1' AND \
domain.domain = '%d' AND domain.active = '1'
Sergey — Dec 24, 2014 at 12:51 PM
Спасибо Дмитрий Владимирович теперь в логах mail.err появляется такое:
dovecot: auth-worker(3326): Error: sql(admin@ntkintourist.ru,192.168.22.29): User query failed: Table 'postfixadmin.users' doesn't exist (using built-in default user_query: SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d')
dovecot: imap: Error: Internal auth failure (client-pid=3329 client-id=1)
я понимаю что он ищет таблицу которой нет, используя этот запрос.
Не совсем понятно где я напутал делал всё по статье выше кроме настройки квот.
Дмитрий Владимирович — Dec 24, 2014 at 12:27 PM
Sergey, в таком случае Вы можете вообще убрать user_query. Оставьте только password_query:
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=myVerySecurePasswordFromUserPostfixadmin
default_pass_scheme = CRAM-MD5
password_query = SELECT username as user, domain, password \
FROM mailbox WHERE username = '%u' AND active = '1'
Sergey — Dec 24, 2014 at 11:33 AM
Добрый день подскажите так должен выглядить /etc/dovecot/dovecot-sql.conf.ext без запроса на квоты?
Игорь — Nov 21, 2014 at 12:38 PM
Спасибо заработало. а еще подскажите можно сделать как нибудь чтоб при залогинивании можно было использовать только имя а не полностью имя с доменом.
Alex — Nov 21, 2014 at 12:26 PM
Нужно выставить права 777 на файл /var/log/dovecot.info или же сменить владельца файла, но с правами проще.
Игорь — Nov 21, 2014 at 12:20 PM
при отправки письма самому себе выходит такая ошибка
dovecot: lda: Fatal: Can't open log file /var/log/dovecot.info: Permission denied
postfix/pipe[11476]: 10A5B2102011: to=, relay=dovecot, delay=0.11, delays=0.04/0/0/0.07, dsn=4.3.0, status=deferred (temporary failure. Command output: Can't open log file /var/log/dovecot.info: Permission denied )
user — Nov 14, 2014 at 08:33 PM
Спасибо, Дмитрий Владимирович, regexp прекрасно справился.
Дмитрий Владимирович — Nov 14, 2014 at 02:56 PM
User, это не есть гуд, скрывать информацию из заголовка. Это есть -- нормальная практика и внесение изменений в заголовок нарушает требования RFC и кошерность почтового сервера)
В целом, ничего стремного в том, что вы засветили серый адрес Вашей сети нет, наоборот -- Вы сможете быстро отреагировать если у Вас появился зомби-бот рассылающий гигабайты спама.
С другой стороны, если уж Вам очень уж нужно скрыть часть информации из заголовков, то попробуйте
smtpd_sasl_authenticated_header = no
или "погуглите" на предмет внесения исправлений в заголовок с помощью regexp (например, как описано тут -- http://www.opennet.ru/tips/info/2402.shtml)
user — Nov 13, 2014 at 08:16 PM
Received: from [192.168.1.123] (testdomain.com [214.178.55.44])
by testdomain.com (Postfix) with ESMTPSA id C8611185128
for ; Thu, 13 Nov 2014 19:00:23 +0200 (EET)
Принимающая сторона видит IP адрес (192.168.1.123) из которого высылалось письмо. Как скрыть IP посылающего письмо, есть идиеи?
Игорь — Nov 13, 2014 at 01:32 PM
все нашел и поправил
Alex — Nov 13, 2014 at 01:30 PM
Host для Mysql вместо localhost указывайте 127.0.0.1 во всех конфигах, хоть логического объяснения такому повороту я найти не могу, но оно помогает в этой ситуации.
Игорь — Nov 13, 2014 at 12:45 PM
выдает вместо 1 вот такую ошибку когда запускаю команду postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap: warning: connect to mysql server localhost: Access denied for user 'postfixadmin'@'localhost' (using password: YES)
postmap: fatal: table mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf: query error: Success
Rafael — Nov 05, 2014 at 06:43 PM
Для начала, это вам большое спасибо!
Так грамотно и досконально вы описали процесс установки почтового сервера. Это такая редкость среди кучи хлама, завалившего интернет.
Дмитрий Владимирович — Nov 03, 2014 at 03:05 PM
Rafael, спасибо за ссылку.
Действительно, начиная с 2.1 плагин autocreate уже стал deprecated. С другой стороны я добавил auto=subscribe для всех папок в файле 15-mailboxes.conf, но ничего "не взлетело" -- папки не создались автоматически для нового пользователя. Да и такого предупреждения я не вижу в лог-файлах службы MDA. Будет время, развберусь более детально.
Еще раз спасибо.
Дмитрий Владимирович — Nov 03, 2014 at 11:58 AM
Alex, спасибо)
нашел то место где именно была ошибка. Было дело... было) Один сервер был настроен на plain и MD5-CRYPT, а второй исключительно на CRAM-MD5. Вот и закралась ошибка из микса двух конфигов с двух серверов.
Rafael — Nov 01, 2014 at 08:56 AM
Проверил несколько раз. Все равно выходит эта ошибка
dovecot: lda(admin@examle.ru): Warning: autocreate plugin is deprecated, use mailbox
Вот здесь есть на эту тему
http://wiki2.dovecot.org/Plugins/Autocreate
Пришлось убрать autocreate
Alex — Oct 30, 2014 at 01:05 PM
Дмитрий Владимирович, перечитайте внимательно ещё раз мое сообщение выше)
Дмитрий Владимирович — Oct 30, 2014 at 12:08 PM
Rafael, а Вы часом в autocreate не прописали стандартную папку какую-нить, например INBOX? Эти папки создаются автоматически на уровне mailbox и их не нужно создавать плагином autocreate.
Спасибою
Дмитрий Владимирович — Oct 30, 2014 at 12:04 PM
Alex, в гайде аккурат и указан MD5-CRYPT)
Alex — Oct 29, 2014 at 04:42 PM
Нашел ошибку в гайде, при редактировании файла /etc/dovecot/dovecot-sql.conf.ext в параметре default_pass_scheme нужно указывать CRAM-MD5 а не MD5-CRYPT иначе не будет логиниться через pop3
Rafael — Oct 19, 2014 at 02:22 PM
Postfix 2.12
Dovecot 2.2.14
Получаю такую ошибку:
postfix Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
пока не исправил во всех файлах /etc/postfix/mysql-*.cf
c
hosts = localhost
на
hosts = 127.0.0.1
и еще...
в журнале получаю такое сообщение:
dovecot: lda(admin@examle.ru): Warning: autocreate plugin is deprecated, use mailbox
Alex — Oct 03, 2014 at 09:37 PM
Разобрался, провайдер видимо блочит 25-й порт, для прослушки SMTP на нестандартном порту в /etc/postfix/master.cf добавляем строку
BindIP:BindPort inet n - n - - smtpd
где BindIP - IP адрес сервера
BindPort - наш нестандартный порт
Alex — Oct 03, 2014 at 04:41 PM
Что-то не могу понять как настроить почтовую программу (тот же BAT) для отправки писем, какой порт и данные, все перепробовал, работает только получение через BAT
user — Jul 09, 2014 at 05:33 PM
Следует добавить:
sudo apt-get install postfix-mysql
Иначе:
sudo postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Postfix error: fatal: unsupported dictionary type: mysql