Home » Linux » CentOS » Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7

Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7

Некоторое время назад я рассказывал, как настроить почтовый сервер на базе готовой сборки iredmail. Я подробно разобрал все актуальные вопросы почтового сервера на linux на базе postfix. Сейчас хочу настроить похожий функционал, но с нуля, за основу взяв postfix + dovecot. Я расскажу про установку и настройку postfix на centos 7, причем только тех модулей и дополнений, которые сам считаю нужными и полезными на почтовом сервере.

Хочешь научиться строить и поддерживать высоконагруженные приложения? Тогда рекомендую познакомиться с онлайн-интенсивом "Tarantool" в OTUS. Актуально для системных администраторов и devops инженеров. Подробности по .

Данная статья является частью единого цикла статьей про сервер Centos.

Вышла обновленная версия этой статьи для системы Centos 8 - Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim

Введение

Я буду настраивать почтовый сервер на ОС linux, а точнее на CentOS 7. За основу будет взят postfix, который присутствует в этой системе из коробки. Инструкция получится универсальной, можно использовать и для других дистрибутивов. Все основные конфиги легко переносятся на разные системы, требуя минимальной правки, в основном путей.

Я напишу статью на самом что ни на есть реальном примере, без какой-либо правки доменов, ip и прочего, чтобы не ошибиться и показать максимально возможный реальный пример. У меня есть технический домен zeroxzed.ru. Я буду использовать его в своей работе. Почтовый сервер будет иметь имя mail.zeroxzed.ru. Всю теорию по подготовке dns к установке и настройке почтового сервера я рассказывал в предыдущей статье о почтовом сервере. Не хочу здесь повторяться. Уточню только список действий, которые вам нужно проделать c ДНС:

  1. Создаем A запись в DNS - mail.zeroxzed.ru.
  2. Добавляем или редактируем MX запись, указывая в качестве почтового сервера mail.zeroxzed.ru.
  3. Просим провайдера прописать PTR для внешнего ip адреса, который будет использовать почтовый сервер. В качестве ptr записи просим установить имя нашего сервера - mail.zeroxzed.ru.

Настройка dns записей для почтового сервера

Я предпочитаю в качестве dns хостинга использовать сервера яндекса, даже если не прикрепляю его почту к домену. На картинке показан минимально необходимый набор записей, кроме PTR. Этими записями управляете не вы, а провайдер, который вам выдает ip. Пока с днс все. Позже мы вернемся к этому вопросу, когда будем добавлять dkim и spf записи. Но обо всем по порядку.

Подготовим систему centos к установке и настройке почтового сервера postfix. Если у вас еще нет готовой системы, то рекомендую воспользоваться моими статьями по установке и настройке centos. Отдельно потратьте время на настройку iptables. Я не буду касаться этого вопроса в данной статье, чтобы не раздувать ее второстепенными вещами. Удобнее, когда все по отдельности рассказано и описано с должной глубиной. Сваливать все в одну кучу не хочется.

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

Сразу хочу сделать предупреждение. Настройка почтового сервера достаточно трудоемкий процесс, требует определенных навыков, знаний и понимания принципов работы используемых средств. Я не ставлю для себя цель расписать максимально подробно так, чтобы было понятно даже неподготовленному администратору linux. Вы должны быть так или иначе подготовлены, либо запаситесь терпением и разбирайтесь внимательно сами в нюансах. Эта статья на полный копипаст не подходит, что-то остается за кадром для самостоятельного выполнения. Иначе нельзя, получится очень большой и громоздкий материал.

Установка postfixadmin

Начнем с установки и настройки панели управления почтовым сервером postfix - postfixadmin. Без него начинать что-то делать неудобно, так как управлять пользователями, ящиками, алиасами будет нечем. По своей сути postfixadmin - набор php скриптов для управления записями в mysql базе данных, которую использует сервер postfix во время своей работы. Соответственно, для работы postfixadmin нам нужен web сервер. Подробно о настройке web сервера на centos читайте отдельно. Сейчас же мы быстро установим все необходимое. Привожу только команды, без комментариев. Все подробности по приведенной выше ссылке.

# yum install httpd php phpmyadmin mariadb mariadb-server php-imap

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

Запускаем httpd и mariadb и добавляем их в автозагрузку.

# systemctl start httpd
# systemctl enable httpd
# systemctl start mariadb
# systemctl enable mariadb

Задаем пароль root для mysql.

# /usr/bin/mysql_secure_installation

Проверяем работу web сервера. Заходим по ip адресу сервера - http://188.35.19.125/, а также проверяем работу phpmyadmin - http://188.35.19.125/phpmyadmin/. Его нужно настроить, об этом рассказано в статье, которую я привел чуть выше. По-умолчанию в phpmyadmin доступ закрыт. Если все сделали правильно, то увидите примерно следующее.

Вход в phpmyadmin

Сразу создадим тут пользователя postfix и одноименную базу данных. Запомните учетные данные, они нам далее понадобятся.

Веб сервер готов, продолжаем настройку почтового сервера. Скачиваем последнюю версию postfixadmin.

# cd /usr/src
# wget https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.0.2/postfixadmin-3.0.2.tar.gz
Скорее всего во время вашей установки версия postfixadmin изменится и ссылка может быть неактуальной. Но даже если она будет актуальна, возможно выйдет более новая версия. Проверьте ее по ссылке https://sourceforge.net/projects/postfixadmin/ и скачайте самую свежую версию.

Распаковываем архив и копируем в директорию веб сервера.

# tar -xvzf postfixadmin-*
# mv /usr/src/postfixadmin-3.0.2 /var/www/html/postfixadmin

Назначаем владельцем пользователя веб сервера:

# chown -R apache. /var/www/html/postfixadmin/

Дальше редактируем конфигурационный файл postfixadmin.

# mcedit /var/www/html/postfixadmin/config.inc.php

Приводим параметры к следующему виду:

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '12345678';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'root@zeroxzed.ru';
$CONF['encrypt'] = 'md5crypt';
$CONF['default_aliases'] = array (
 'abuse' => 'root',
 'hostmaster' => 'root',
 'postmaster' => 'root',
 'webmaster' => 'root'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';

Обращаю внимание на выделенный параметр. Он указывает на то, в каком виде хранить пароли пользователей в базе данных. Конечно, хранить обычным текстом без шифрования это дурной тон и может быть опасно. Я указал хранение в шифрованном виде. Но если мы говорим о небольшой компании без публичного доступа к серверу, можно использовать нешифрованные пароли. Для этого указываем значение параметра cleartext. Я сам так часто делаю просто из соображений удобства. Объясню, в чем удобство.

К примеру, у пользователя несколько устройств подключены к почте и он забыл свой пароль. Админ при создании почему-то тоже его никуда не записал, или забыл, или потерял. Вам придется сбросить пароль и перенастроить все устройства. Если же у вас пароль хранится в открытом виде, вы просто смотрите в базу и говорите пользователю пароль. Пароли в открытом виде удобно просто выгрузить дампом из базы, если понадобится кому-то все учетки передать. Но тут как посмотреть :) С одной стороны плюс, с другой минус - кто-то очень просто может спереть все ваши пароли. В общем, тут от ситуации зависит, решайте сами, как вам удобнее хранить пароли.

У меня распространены ситуации, когда я удаленно администрирую сервера, а на месте эникеи работают с пользователями. Чаще всего это не очень аккуратные и ответственные люди, иначе они бы работали с серверами :) Они часто забывают записать пароль, путают что-то и т.д. В итоге, когда один человек увольняется и приходит другой, оказывается, что найти пароли на некоторые ящики просто невозможно. Тут очень выручает возможность посмотреть пароль в базе. Я новому админу либо пароль говорю, либо весь дамп сразу отдаю, пусть работает.

Если вы сами работаете с сервером и все аккуратно ведете, записываете, например, в keepass все пароли от почтовых ящиков, то смело шифруйте все пароли, так будет спокойнее.

Последние 2 параметра domain_path и domain_in_mailbox указывайте по своему усмотрению. В файле конфигурации в комментариях расписано, за что они отвечают и в чем отличие. Мне кажется, удобно хранить директории именно в таком виде, как я указал. Получится следующий путь до ящика, если у вас архив почты будет жить, к примеру, в директории /mnt/mail - /mnt/mail/zeroxzed.ru/root@zeroxzed.ru.

С параметрами разобрались. Сохраняем конфиг. Идем по адресу http://188.35.19.125/postfixadmin/setup.php и начинаем установку postfixadmin. Первым делом идет проверка всех необходимых для установки и работы компонентов. Для продолжения установки у вас должна быть такая картинка.

Установка postfixadmin

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

Добавление пароля установки

Добавляем полученную строку в файл конфигурации postfixadmin.

# mcedit /var/www/html/postfixadmin/config.inc.php
$CONF['setup_password'] = '67e46bdcc7aeb431f7af9a6d02f43352:30672e5a9deacaf505d32807b967caf9fd0c32ef';

Используя этот пароль, можно создать учетную запись администратора панели управления. Делаем это, учитывая, что пароль должен содержать не менее двух цифр. Если все сделали правильно, то увидите сообщение.

Добавление администратора postfixadmin

Переходим по ссылке и авторизуемся с помощью учетной записи администратора, которую только что сделали. Вы должны увидеть основную страницу интерфейса postfixadmin.

Главная страница postfixadmin

Теперь нам нужно добавить домен в панель управления. Идем в раздел Список доменов -> Новый домен и добавляем свой домен.

Создание нового домена

При создании домена были добавлены стандартные алиасы, получателя для которых мы указали еще в конфиге - ящик root@zeroxzed.ru. Создание таких алиасов требование стандартов, но по факту, кроме спама, вы скорее всего ничего не будете получать по этим адресам. Так что их создание оставляйте на свое усмотрения. Я обычно их не делаю, так как ящик для этих алиасов все равно не читаю.

Далее создадим почтовый ящик администратора - root@zeroxzed.ru. Для этого идем в раздел Обзор -> Создать ящик и заполняем поля.

Добавление почтового ящика

Непосредственно ящик на диске создан не будет, так как у нас еще не настроена почтовая система, но запись в базе данных появится. Это можно проверить через phpmyadmin.

Проверка нового ящика в mysql базе

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

Настройка postfix

Сердце нашего почтового сервера на linux - postfix. В дистрибутиве centos он уже установлен, можно сразу переходить к настройке. Рисуем следующий конфиг.

# mcedit /etc/postfix/main.cf
soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix

myhostname = mail.zeroxzed.ru
mydomain = zeroxzed.ru
myorigin = $myhostname

inet_interfaces = all
inet_protocols = ipv4

mydestination = localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

smtpd_banner = $myhostname ESMTP $mail_name

debug_peer_level = 2
# Строки с PATH и ddd должны быть с отступом в виде табуляции от начала строки
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,
 mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf

smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
broken_sasl_auth_clients = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
disable_vrfy_command = yes

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_sender_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain

smtpd_recipient_restrictions = reject_non_fqdn_recipient,
 reject_unknown_recipient_domain,
 reject_multi_recipient_bounce,
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source = dev:/dev/urandom

# Ограничение максимального размера письма в байтах
message_size_limit = 20000000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 30
smtpd_client_event_limit_exceptions = 127.0.0.0/8
smtpd_client_connection_limit_exceptions = 127.0.0.0/8

maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth

# Директория для хранения почты
virtual_mailbox_base = /mnt/mail
virtual_minimum_uid = 1000
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps

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

# mkdir /etc/postfix/mysql && cd /etc/postfix/mysql
# mcedit relay_domains.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
# mcedit  virtual_alias_domain_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
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
# mcedit virtual_alias_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
# mcedit virtual_mailbox_domains.cf
hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
# mcedit virtual_mailbox_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Редактируем файл /etc/postfix/master.cf. Нам надо добавить строки, касающиеся настройки Submission для того, чтобы почтовый сервер работал на 587 порту. Смартфоны очень часто при настройке используют этот порт по-умолчанию, где-то даже без возможности изменить эту настройку. Приводим секцию, отвечающую за эту работу к следующему виду.

submission inet n - n - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_wrappermode=no
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING

Обращаю внимание на пробел в начале строки, начиная со второй. Его надо обязательно оставить. Добавляем еще настройки для того, чтобы наш сервер поддерживал протокол SSL/TLS и слушал порт 465

smtps inet n - n - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING

В этот же файл добавляем еще одну настройку, которая будет указывать postfix, что доставкой почты у нас будет заниматься dovecot, который мы настроим следом. Добавляем в master.cf в самый конец.

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

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

Создаем директорию и сами сертификаты:

# mkdir /etc/postfix/certs
# openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem

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

Создание ssl сертификата для postfix

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

# mcedit /etc/postfix/recipient_bcc_maps
@zeroxzed.ru all_in@zeroxzed.ru
# mcedit /etc/postfix/sender_bcc_maps
@zeroxzed.ru all_out@zeroxzed.ru

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

# postmap /etc/postfix/recipient_bcc_maps /etc/postfix/sender_bcc_maps

Теперь создайте два почтовых ящика all_in@zeroxzed.ru и all_out@zeroxzed.ru через postfixadmin.

Немного поясню по этим ящикам - для чего они нужны. Изначально я их делал, когда пользователи использовали протокол pop3 без сохранения писем на сервере. Это позволяло организовать бэкап всей переписки. Эти ящики очень быстро заполняются и занимают огромный объем, поэтому их обязательно надо чистить. Я просто скриптами регулярно собирал всю почту в архивы с именами в виде дат. Если нужно было какое-то письмо найти, то просто распаковывал нужный архив.

В случае с imap роль бэкапа отпадает, так как вся почта хранится на сервере. Но эти ящики все равно бывают полезны, когда пользователь, к примеру, удалил какое-то важное письмо и потом делает вид, что его и не было. Если это письмо пришло только сегодня и еще не успело улететь в бэкап, то кроме записи в логах об этом письме, вы не увидите само содержимое. А с такими ящиками все сразу будет понятно, и вопросы отпадут. Последнее применение - служба безопасности. Если у вас есть кто-то, кому положено читать всю переписку, то реализовать этот функционал можно таким простым способом.

Все основные настройки для postfix мы сделали. Некоторые из них завязаны на работу с dovecot, который мы еще не настроили. Поэтому больше postfix не трогаем, не перезапускаем. Идем настраивать dovecot - imap сервер нашей почтовой системы.

Настройка dovecot

Займемся настройкой dovecot - сервер доставки почты пользователю по протоколам pop3 и imap. Я не вижу причин использовать pop3. Он неудобен по сравнению с imap. Чаще всего pop3 отключаю вовсе. Но это уже на ваше усмотрение. Приведу пример с настройкой обоих протоколов. Помимо основного функционала по доставке почты, я настрою несколько полезных плагинов. Расскажу о них поподробнее:

  • Sieve - выполняет фильтрацию почты по заданным правилам в момент локальной доставки на почтовом сервере. Удобство такого подхода в том, что вы один раз можете настроить правило сортировки, и оно будет работать во всех клиентах, которыми вы будете получать почту по imap. Правила создаются, хранятся и исполняются на самом сервере.
  • Acl - позволяет пользователям расшаривать папки в своем почтовом ящике и предоставлять доступ к этим папкам другим пользователям. Не часто видел, чтобы этот функционал настраивали и использовали. Думаю, просто по незнанию. По мне так очень удобный и полезный функционал.

Часто вижу, что люди настраивают плагин quota, который позволяет ограничивать максимальный размер почтового ящика. Я лично в своей работе его не использую. Возможно, когда у тебя клиентов сотни и тысячи это имеет значение и надо обязательно настроить ограничение. Когда же ящиков меньше, нет смысла напрягать людей постоянной чисткой. Сейчас диски стоят не так дорого. Мне кажется, проще и дешевле увеличить место на сервере, нежели постоянно беспокоить пользователей необходимостью чистки ящика. Лучше ограничить максимальный размер письма, скажем 20-ю мегабайтами. Тогда сильно забить ящик даже при большом желании быстро не получится. А почта все-таки важный инструмент в работе. Мне кажется, ее лучше хранить как можно дольше.

Есть еще один полезный плагин expire, который позволяет удалять устаревшие письма в определенных папках. Например, удалять все письма старше 30-ти дней в корзине и папке со спамом. Но реально пользоваться им не получается по простой причине. Разные почтовые клиенты создают различные папки для корзины и спама. Thunderbird создает папки с латинскими именами trash и spam, outlook с русскими, которые на почтовом сервере преобразуются в кодировку UTF7, мобильные клиенты тоже используют разные имена папок. В итоге нет единообразия, плагин полноценно не работает.

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

Небольшую теорию я дал, теперь переходим к практике. Устанавливаем необходимые для dovecot пакеты.

# yum install dovecot dovecot-mysql dovecot-pigeonhole

Изначально конфиг dovecot разбит на отдельные сегменты и лежат в директории /etc/dovecot/conf.d. Каждый файл - отдельный функционал. Мне не нравится прыгать по файлам, поэтому я храню все в едином общем файле конфигурации /etc/dovecot/dovecot.conf. С ним мы и будем работать. Приводим его к следующему виду.

# mcedit /etc/dovecot/dovecot.conf
listen = * [::]

mail_plugins = mailbox_alias acl

protocols = imap pop3 sieve lmtp

mail_uid = 1000
mail_gid = 1000

first_valid_uid = 1000
last_valid_uid = 1000

log_path = /var/log/dovecot/main.log
info_log_path = /var/log/dovecot/info.log
debug_log_path = /var/log/dovecot/debug.log

ssl_protocols = !SSLv2 !SSLv3
ssl = required
verbose_ssl = no
ssl_cert = </etc/postfix/certs/cert.pem
ssl_key = </etc/postfix/certs/key.pem

ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_dh_parameters_length = 2048
ssl_prefer_server_ciphers = yes

disable_plaintext_auth = yes

mail_location = maildir:/mnt/mail/%d/%u/

auth_default_realm = zeroxzed.ru

auth_mechanisms = PLAIN LOGIN

service auth {
 unix_listener /var/spool/postfix/private/dovecot-auth {
 user = postfix
 group = postfix
 mode = 0666
 }
unix_listener auth-master {
 user = vmail
 group = vmail
 mode = 0666
 }

unix_listener auth-userdb {
 user = vmail
 group = vmail
 mode = 0660
 }
}

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
 user = postfix
 group = postfix
 mode = 0600
 }

 inet_listener lmtp {
 address = 127.0.0.1
 port = 24
 }
}

userdb {
 args = /etc/dovecot/dovecot-mysql.conf
 driver = sql
 }

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

auth_master_user_separator = *
 
plugin {
 auth_socket_path = /var/run/dovecot/auth-master

 acl = vfile
 acl_shared_dict = file:/mnt/mail/shared-folders/shared-mailboxes.db
 sieve = /mnt/mail/sieve/%u.sieve
 mailbox_alias_old = Sent
 mailbox_alias_new = Sent Messages
 mailbox_alias_old2 = Sent
 mailbox_alias_new2 = Sent Items
}

protocol lda {
 mail_plugins = $mail_plugins sieve
 auth_socket_path = /var/run/dovecot/auth-master
 deliver_log_format = mail from %f: msgid=%m %$
 log_path = /var/log/dovecot/lda-errors.log
 info_log_path = /var/log/dovecot/lda-deliver.log
 lda_mailbox_autocreate = yes
 lda_mailbox_autosubscribe = yes
 postmaster_address = root
}

protocol lmtp {
 info_log_path = /var/log/dovecot/lmtp.log
 mail_plugins = quota sieve
 postmaster_address = postmaster
 lmtp_save_to_detail_mailbox = yes
 recipient_delimiter = +
}

protocol imap {
 mail_plugins = $mail_plugins imap_acl
 imap_client_workarounds = tb-extra-mailbox-sep
 mail_max_userip_connections = 30
}

protocol pop3 {
 mail_plugins = $mail_plugins
 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
 pop3_uidl_format = %08Xu%08Xv
 mail_max_userip_connections = 30
}

service imap-login {
 service_count = 1
 process_limit = 500
 }

service pop3-login {
 service_count = 1
 }

service managesieve-login {
 inet_listener sieve {
 port = 4190
 }
}

namespace {
 type = private
 separator = /
 prefix =
 inbox = yes

 mailbox Sent {
 auto = subscribe
 special_use = \Sent
 }
 mailbox "Sent Messages" {
 auto = no
 special_use = \Sent
 }
 mailbox "Sent Items" {
 auto = no
 special_use = \Sent
 }
 mailbox Drafts {
 auto = subscribe
 special_use = \Drafts
 }
 mailbox Trash {
 auto = subscribe
 special_use = \Trash
 }
 mailbox "Deleted Messages" {
 auto = no
 special_use = \Trash
 }
 mailbox Junk {
 auto = subscribe
 special_use = \Junk
 }
 mailbox Spam {
 auto = no
 special_use = \Junk
 }
 mailbox "Junk E-mail" {
 auto = no
 special_use = \Junk
 }
 mailbox Archive {
 auto = no
 special_use = \Archive
 }
 mailbox Archives {
 auto = no
 special_use = \Archive
 }
}

namespace {
 type = shared
 separator = /
 prefix = Shared/%%u/
 location = maildir:%%h:INDEX=%h/shared/%%u
 subscriptions = yes
 list = children
}

Создаем группу и пользователя с указанными в конфиге uid 1000.

# groupadd  -g 1000 vmail
# useradd -d /mnt/mail/ -g 1000 -u 1000 vmail
# chown vmail. /mnt/mail

Создаем конфигурационные файлы для доступа к mysql базе.

# mcedit /etc/dovecot/dovecot-mysql.conf
driver = mysql
default_pass_scheme = CRYPT
connect = host=127.0.0.1 dbname=postfix user=postfix password=12345678
user_query = SELECT '/mnt/mail/%d/%u' as home, 'maildir:/mnt/mail/%d/%u' as mail, 1000 AS uid, 1000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/mnt/mail/%d/%u' as userdb_home, 'maildir:/mnt/mail/%d/%u' as userdb_mail, 1000 as userdb_uid, 1000 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Создадим директорию и файлы для логов.

# mkdir /var/log/dovecot
# cd /var/log/dovecot && touch main.log info.log debug.log lda-errors.log lda-deliver.log lmtp.log
# chown -R vmail:dovecot /var/log/dovecot

Создаем пару служебных папок для плагинов sieve и acl.

# mkdir /mnt/mail/sieve && mkdir /mnt/mail/shared-folders
# chown -R vmail. /mnt/mail

И небольшой штрих в завершении настройки.

# chown vmail. /var/run/dovecot/auth-master

Уже не помню, зачем это было нужно, запись осталась в черновиках. Знаю только, что какая-то ошибка всплывала без этого.

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

# systemctl restart postfix
# systemctl start dovecot
# systemctl enable dovecot

Проверка работы почтового сервера

Самаый простой и быстрый способ проверить работу почтового сервера - отправить на него письмо. Я буду отправлять со своего почтового адреса zeroxzed@gmail.com на адрес root@zeroxzed.ru. Вот что должно быть в логе, если у вас все правильно настроено и почтовый сервер нормально работает.

# cat /var/log/maillog
Mar 10 21:56:27 mail postfix/smtpd[28075]: connect from mail-yw0-f172.google.com[209.85.161.172]
Mar 10 21:56:28 mail postfix/smtpd[28075]: Anonymous TLS connection established from mail-yw0-f172.google.com[209.85.161.172]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 10 21:56:28 mail postfix/smtpd[28075]: D4263420BB7B: client=mail-yw0-f172.google.com[209.85.161.172]
Mar 10 21:56:29 mail postfix/cleanup[28086]: D4263420BB7B: message-id=<CAHWPLcOeqf6uNHRg34+wuppDUGPDLY=fp8s-E=o9fmxYMS48cQ@mail.gmail.com>
Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: from=<zeroxzed@gmail.com>, size=2533, nrcpt=2 (queue active)
Mar 10 21:56:29 mail postfix/pipe[28089]: D4263420BB7B: to=<all_in@zeroxzed.ru>, relay=dovecot, delay=0.39, delays=0.33/0.02/0/0.05, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 21:56:29 mail postfix/pipe[28090]: D4263420BB7B: to=<root@zeroxzed.ru>, relay=dovecot, delay=0.4, delays=0.33/0.03/0/0.04, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: removed
Mar 10 21:56:29 mail postfix/smtpd[28075]: disconnect from mail-yw0-f172.google.com[209.85.161.172]

Пояснять тут нечего, по логу все понятно. Письмо было доставлено в указанный ящик и в общий ящик для сбора всей входящей почты. В директории /mnt/mail была создана директория с именем домена zeroxzed.ru, а в ней созданы 3 папки с именами ящиков:

  • all_in@zeroxzed.ru
  • all_out@zeroxzed.ru
  • root@zeroxzed.ru

Директории с почтовыми ящиками создаются в момент получения первого письма в ящик. Непрочитанное письмо помещается в директорию /new в почтовом ящике. После прочтения переносится в /cur.

Попробуем теперь подключиться к почтовому ящику по imap, прочитать письмо и отправить ответ. Настроим любой почтовый клиент для проверки работы настроенного почтового сервера. Я для этих целей буду использовать Thunderbird. Из всех почтовых клиентов мне он нравится больше всего. В основном из-за его портированной версии. Указываем следующие настройки.

Настройка подключения к почтовому серверу

Так как мы используем самоподписанный сертификат ssl, почтовый клиент предупредит нас о том, что серверу нельзя доверять.

Добавление ssl сертификата в исключения

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

Я подключился к почтовому ящику и увидел тестовые письма. Отвечу на одно из них и посмотрю в логе, как прошла отправка. У меня еще раз выскочило окно с предупреждением о небезопасном сертификате. Еще раз добавляю его в исключения. Это нормально, сертификат проверяется во время получения почты в dovecot, а во время отправки в postfix. Так что нужны 2 подтверждения. Отправляю письмо еще раз и смотрю лог.

# cat /var/log/maillog
Mar 10 22:10:12 mail postfix/smtpd[28764]: connect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]
Mar 10 22:10:12 mail postfix/smtpd[28764]: Anonymous TLS connection established from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 10 22:10:12 mail postfix/smtpd[28764]: B24C2420BB70: client=broadband-75-37-235-139.moscow.gw.ru[75.37.235.139], sasl_method=PLAIN, sasl_username=root@zeroxzed.ru
Mar 10 22:10:12 mail postfix/cleanup[28779]: B24C2420BB70: message-id=<aaac96c3-197e-c6bd-4dfe-85d09bce216a@zeroxzed.ru>
Mar 10 22:10:12 mail postfix/qmgr[28042]: B24C2420BB70: from=<root@zeroxzed.ru>, size=955, nrcpt=2 (queue active)
Mar 10 22:10:12 mail postfix/smtpd[28764]: disconnect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]
Mar 10 22:10:12 mail postfix/pipe[28784]: B24C2420BB70: to=<all_out@zeroxzed.ru>, relay=dovecot, delay=0.14, delays=0.07/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 22:10:13 mail postfix/smtp[28783]: B24C2420BB70: to=<zeroxzed@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.62, delays=0.07/0.01/0.28/0.26, dsn=2.0.0, status=sent (250 2.0.0 OK 1489173013 13si2106703ljv.3 - gsmtp)
Mar 10 22:10:13 mail postfix/qmgr[28042]: B24C2420BB70: removed

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

Расскажу, куда еще надо смотреть для отладки почтовой системы. Да и не только отладки, во время работы периодически придется разбираться, куда ушло то или иное письмо, кто и когда подключался к ящику. Разные ситуации бывают. В файле /var/log/dovecot/lda-deliver.log содержится информация обо всех пришедших письмах - когда, от кого и в какой ящик было положено.

Mar 10 22:25:29 lda(all_in@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=<CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com> saved mail to INBOX
Mar 10 22:25:29 lda(root@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=<CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com> saved mail to INBOX
Mar 10 22:25:49 lda(all_out@zeroxzed.ru): Info: mail from root@zeroxzed.ru: msgid=<75358e4d-7c8e-24c2-a21f-7ee0df2a4704@zeroxzed.ru> saved mail to INBOX

В /var/log/dovecot/info.log информация о подключениях к почтовым ящикам - кто, когда, откуда и каким способом авторизовывался на сервере.

Mar 10 22:10:20 imap-login: Info: Login: user=<root@zeroxzed.ru>, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=28790, TLS, session=<3tDeHGVKpQBNJeCL>
Mar 10 22:19:39 imap-login: Info: Login: user=<root@zeroxzed.ru>, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=29248, TLS, session=<7VY8PmVKbwBNJeCL>

Остальное уже не так полезно. Сами посмотрите, что собирается в остальных лог файлах.

На текущий момент сервер полностью работоспособен. В таком виде им без проблем можно пользоваться. Но функционал полностью не раскрыт. Использовать плагины sieve и acl через удаленные почтовые клиенты неудобно. Проще всего их настроить через web почту roundcube. Установим эту web панель на наш почтовый сервер.

Установка web интерфейса roundcube

Установим и настроим самый популярный web интерфейс для postfix - roundcube. Скачиваем исходники.

# cd /usr/src
# wget https://github.com/roundcube/roundcubemail/releases/download/1.2.9/roundcubemail-1.2.3-complete.tar.gz
Не забудьте проверить в момент установки, какая версия является самой свежей на текущий момент. Нет необходимости устанавливать устаревшую версию. Рекомендую ставить самую последнюю на момент настройки.
# yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime php-pear-Net-Sieve
# tar -xzvf roundcubemail-*
# mv roundcubemail-1.2.9 /var/www/html/webmail
# chown -R apache. /var/www/html/webmail

Переходим в браузер по следующей ссылке для установки roundcube - http://188.35.19.125/webmail/installer/. Вы увидите несколько незначительных замечаний. На них можно не обращать внимание, если установщик позволяет нажать кнопку NEXT. Единственное, рекомендую установить правильный часовой пояс в /etc/php.ini и перезапустить после этого httpd.

На следующем этапе нам надо указать настройки подключения к mysql базе. Предварительно ее следует создать через phpmyadmin. Я создал пользователя roundcube и такую же базу с полными правами пользователя на нее. Эти параметры указал в настройках.

Установка roundcube

Так же на этой странице нужно будет указать несколько параметров:

  • smtp_server - пусто (ничего не пишем)
  • language - ru_RU
  • Выбираем плагины - managesieve, userinfo, acl. Остальные на свое усмотрение.

Жмем CREATE CONFIG. Должны увидеть сообщение:

The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.

Жмем CONTINUE. Открывается страница с проверкой настроек. Тут проверять неудобно, можно этого не делать. Зайдем в почтовый ящик и там все проверим. Если что, конфиг потом все равно можно вручную отредактировать. Папку /var/www/html/webmail/installer удаляем. Заходим в почтовый ящик через roundcube - http://188.35.19.125/webmail/ Набирать нужно полное имя ящика и пароль. Если все сделали правильно, должны попасть в свой почтовый ящик.

Вход в почтовый ящик через roundcube

Ну вот и все. Можно пользоваться web интерфейсом для почтового сервера. У меня есть статья по настройке мобильной версии roundcube. Рекомендую ее настроить, если есть необходимость. Тема качественная и добротная. Пользоваться удобно.

Дальше рассмотрим настройку и использование плагинов acl и sieve с помощью roundcube.

Настройка фильтра почты sieve

Sieve очень удобная штука, но вот хорошего интерфейса для управления через почтовый клиент я не знаю. Существует плагин для thunderbird, который так и называется sieve. Но лично мне он не понравился вообще, так как предлагает писать правила определенным кодом. Для этого надо знать синтаксис, тратить время. Можете сами на него посмотреть - https://github.com/thsmi/sieve.

К счастью, есть удобный способ писать правила фильтрации для sieve через roundcube. Там это реализовано отдельным плагином managesieve, который мы активировали во время установки. Для создания правила фильтрации, зайдите в свой почтовый ящик через roundcube. Переходите в раздел Настройки -> Фильтры и создавайте новое правило.

Настройка фильтра почты в roundcube

После этого письма будут обрабатываться правилом сразу после поступления в почтовый сервер, в независимости от вашего подключения к ящику. В папке /mnt/mail/sieve появилась запись с настроенным правилом. Можете познакомиться с синтаксисом написания правил. Он не сложный.

Настройка автоответчика

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

Для того, чтобы модуль автоответчика заработал, отредактируйте конфигурационный файл плагина. Для этого открываем его в моем случае по следующему адресу:

# mcedit /var/www/html/webmail/plugins/managesieve/config.inc.php

Изменяем там параметр:

$config['managesieve_vacation'] = 1;

После этого достаточно просто обновить веб интерфейс roundcube, и появятся новые настройки по адресу Настройки -> Отпуск

Настройка автоответчика

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

Общие папки по imap

Рассмотрим настройку необычного и полезного функционала в виде общих папок. С их помощью один пользователь почтового ящика может предоставить другому пользователю доступ к папке внутри своего почтового ящика. Где и как использовать этот функционал, каждый может придумать сам, в зависимости от своих потребностей. Мне кажется это удобным в том случае, когда создан какой-то общий ящик, на который только поступает информация и нет необходимости писать ответ от его имени. То есть по сути работает как обычный почтовый алиас. Но в случае с алиасом и несколькими почтовыми ящиками, письмо падает в каждый ящик. Если таких писем и получателей много, то идет большое дублирование одного и того же письма в рамках почтового сервера. Если сделать ящик и расшарить на нем папку, подключить ее всем пользователям, то дублирования почты не будет. Каждый сможет прочитать письмо, без необходимости его доставки в каждый конкретный ящик.

Настроим общую папку imap. Хотя настраивать нам, по сути, нечего. Мы уже все настроили ранее. Добавили соответствующие настройки в dovecot и активировали плагин acl в roundcube. Теперь нужно просто сделать папку и открыть ее для другого пользователя. Для этого идем в раздел Настройки -> Папки. Создаем там любую папку. В моем случае это папка с названием Общая.

Настройка общей папки imap

Добавляем необходимый доступ либо всем ящикам в домене, либо какому-то конкретному. Так же можно указать, какого рода это будет доступ:

  • чтение
  • запись
  • удаление

Права доступа на общую папку imap

Заходим в ящик, которому добавили общий доступ и проверяем.

Проверка общей папки

Все в порядке, общая папка imap настроена и подключена. В папке /mnt/mail/shared-folders появился файл с настроенным выше правилом.

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

Настройка dkim и spf

Напишу своими словами как я понимаю работу dkim. С помощью dkim вся исходящая почта сервера подписывается электронной цифровой подписью, связанной с именем домена. Открытый ключ шифрования с помощью DNS публикуется в txt записи. Таким образом, удаленный сервер, при получении письма от вас, сравнивает цифровую подпись с опубликованным в dns открытым ключом вашего домена. Если все в порядке, то считает, что ваше письмо в самом деле пришло от вас, а не от мошенников. То есть с помощью этой технологии можно однозначно идентифицировать отправителя.

Некоторые считают, что эта технология помогает бороться со спамом. Не знаю, насколько это верно. Спамеру не составит большого труда настроить на своем сервере dkim и отправлять спам, но подписанный электронной цифровой подписью. Теоретически, dkim помогает защититься от подделки адреса отправителя, когда письмо якобы от вас шлет совсем другой сервер. Но с этим можно бороться и другими способами. В общем, я до конца не понимаю, зачем это надо. Прошу поделиться в комментариях тем, к кого есть бОльший опыт. Я только недавно стал шагать в ногу со временем и настраивать dkim. Раньше всегда без него обходился.

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

Для настройки dkim устанавливаем соответствующий пакет:

# yum install opendkim

Создаем директорию для хранения ключей:

# mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim

Генерируем ключи для домена:

# opendkim-genkey -D /etc/postfix/dkim/ -d zeroxzed.ru -s mail
zeroxzed.ru имя почтового домена
mail непосредственно имя сервера

На выходе получаете пару файлов - закрытый (приватный) и открытый ключ. Закрытый останется на сервере, открытый будет опубликован в dns. Переименуем их сразу, чтобы не путаться, если у вас будет несколько доменов. Ключи нужно будет делать для каждого домена.

# mv mail.private mail.zeroxzed.ru.private
# mv mail.txt mail.zeroxzed.ru.txt

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

# mcedit keytable
mail._domainkey.zeroxzed.ru zeroxzed.ru:mail:/etc/postfix/dkim/mail.zeroxzed.ru.private

Тут же создаем еще один файл, в котором будет описано, каким ключом подписывать письма каждого домена. У нас один домен, поэтому только одна запись.

# mcedit signingtable
*@zeroxzed.ru mail._domainkey.zeroxzed.ru

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

# chown root:opendkim *
# chmod u=rw,g=r,o= *

Рисуем конфиг службы.

# mcedit /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/mail.zeroxzed.ru.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable

Добавляем в конфигурационный файл postfix в самый конец следующие параметры:

# mcedit /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

Перезапускаем postfix и dkim, последний добавляем в автозагрузку.

# systemctl restart postfix
# systemctl restart opendkim.service
# systemctl enable opendkim.service

Теперь нам надо добавить открытый ключ в dns. Идем в консоль управления dns и добавляем новую txt запись. Ее содержание берем из файла /etc/postfix/dkim/mail.zeroxzed.ru.txt

cat /etc/postfix/dkim/mail.zeroxzed.ru.txt
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
 "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClZX2xWRDISlVLF4b4pUiinY5N9WN7VXEHeyPw8smHTamXh35wJoh+j0+MIQDWG/KtdCcETeawTuypXbvtbneXniYR0iiv6kt754T2WXBjz7O/uHL+vK58LhJsm4TGyhUN6ZBit+w22jG92zdeybSZeU/g7hQdkaAAi0I+0nIkUwIDAQAB" ) ; ----- DKIM key mail for zeroxzed.ru

Убираем кавычки, лишние проблемы и вставляем. Должно получиться вот так:

Настройка dkim записи в dns

Проверяю работу. Отправляю письмо на gmail и смотрю лог почтового сервера:

# cat /var/log/maillog
Mar 17 17:40:26 mail postfix/smtpd[22352]: connect from localhost[127.0.0.1]
Mar 17 17:40:26 mail postfix/smtpd[22352]: BB1794195584: client=localhost[127.0.0.1]
Mar 17 17:40:26 mail postfix/cleanup[22364]: BB1794195584: message-id=<baf63dcec016594d49f2d80f815e5d26@zeroxzed.ru>
Mar 17 17:40:26 mail opendkim[21744]: BB1794195584: DKIM-Signature field added (s=mail, d=zeroxzed.ru)
Mar 17 17:40:26 mail postfix/qmgr[21990]: BB1794195584: from=<root@zeroxzed.ru>, size=593, nrcpt=2 (queue active)
Mar 17 17:40:26 mail postfix/pipe[22369]: BB1794195584: to=<all_out@zeroxzed.ru>, relay=dovecot, delay=0.14, delays=0.11/0.02/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 17 17:40:26 mail postfix/smtpd[22352]: disconnect from localhost[127.0.0.1]
Mar 17 17:40:27 mail postfix/smtp[22370]: BB1794195584: to=<zeroxzed@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.84, delays=0.11/0.02/0.31/0.4, dsn=2.0.0, status=sent (250 2.0.0 OK 1489761627 185si4568435lfa.398 - gsmtp)

Все в порядке, электронная цифровая подпись установлена. Проверим, как гугл отреагировал на нашу подпись:

Проверка dkim

Тоже все в порядке. Подпись выполнена корректно, проверку прошла. Дополнительно, проверить корректность dkim записи в dns можно онлайн сервисом - http://dkimcore.org/c/keycheck.

Настроим еще одно средство для повышения доверия к нашей почте со стороны других серверов - spf. Расскажу опять своими словами для чего это нужно. Spf запись добавляется в виде txt записи в dns вашего домена. С помощью этой записи вы указываете, какие ip адреса имеют право отправлять почту от вашего имени. Если кто-то из спамеров будет использовать ваше имя домена при рассылке спама, он не пройдет проверку по spf и скорее всего будет идентифицирован как спам.

Можно указать конкретные ip адреса в записи, а можно сказать, чтобы ip адреса проверялись по спискам A и MX записей. У нас простой случай и только 1 сервер с одним ip, поэтому укажем конкретно этот ip адрес. Идем в панель управления dns и добавляем новую txt запись.

zeroxzed.ru. TXT v=spf1 ip4:188.35.19.125 ~all

Добавление spf записи в dns

Больше ничего делать не надо. Снова отправляем письмо на gmail и смотрим логи.

Проверка spf записи

Обращаю внимание на прошлый скрин, когда мы проверяли dkim и еще не настроили spf, и этот. Видно, что запись работает, гугл определил наш ip, как доверенный для отправки писем с этого домена.

Дополнительный функционал почтового сервера postfix

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

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

  1. Защиту от подбора паролей с помощью fail2ban.
  2. Мониторинг почтового сервера postfix с помощью zabbix.
  3. Сбор статистики с помощью pflogsumm или чего-то подобного.
  4. Просмотр и анализ логов с помощью webmin.
  5. Использование бесплатных сертификатов let's encrypt.
  6. Регулярную очистку служебных почтовых ящиков.
  7. Бэкап всей почтовой базы.

Расскажу еще почему я не настраиваю некоторые популярные программы, которые использую на почтовых серверах:

  1. Clamav - известный антивирус. Считаю, что сейчас он не актуален, так как вирусов, от которых он способен защитить, я уже давно не видел. Сейчас вирусная эпидемия шифровальщиков. От них он не защищает.
  2. Spamassasin - популярный бесплатный антиспам фильтр. Скажу честно, работал с ним очень мало и могу быть не объективен. Насколько я видел его настройку и работу - он требует к себе некоторого внимания, калибровки, особенно на начальном этапе. Мне обычно не хочется этим заниматься.
  3. Graylist - эффективное средство борьбы со спамом. Я уже подробно его рассматривал, когда писал про iredmail, так что не буду повторяться. Скажу лишь, что режет спам очень эффективно и бесплатно, но есть существенные неудобства, которые по моему мнению не перекрывают плюсы. Поэтому я не использую.

В качестве антиспама я предпочитаю коммерческое решение - Kaspersky Anti-Spam. Я знаю этот продукт уже лет 8. Он действительно отлично фильтрует спам. Ложных срабатываний вообще не припоминаю, 95% спама фильтрует, может больше. С ним вопрос спама отпадает вообще. Стоит он недорого, можно купить лицензию на меньшее количество ящиков, чем реально используется в системе. Этот вопрос никак не отслеживается и на качество работы не влияет. Но нужно понимать, что это уже нарушение лицензионного соглашения. Но можно всякие хитрости придумать, чтобы и фильтровать и не нарушать.

Борьба со спамом средствами postfix

Сначала хотел сразу все настройки postfix разместить в соответствующем разделе в едином конфиге, но потом передумал и решил все же вынести этот вопрос на отдельное рассмотрение. Возможно, не каждому захочется сразу в эту тему углубляться. Все, что рассказано выше, позволит настроить полноценный почтовый сервер, который будет успешно принимать почту и доставлять ее пользователям. Но в таком виде он будет принимать слишком много спама, но зато не будет проблем с тем, что от кого-то что-то не придет. Как ни крути, но все средства борьбы со спамом так или иначе несут накладные расходы в виде ложных срабатываний с той или иной вероятностью. Если вы решите не заморачиваться и купить Kaspersky Anti-Spam, можете этот раздел не читать. Он сам реализует все те проверки, что мы будем делать. Если же хотите своими силами бороться со спамом средствами postfix, то давайте дальше разбираться.

Я буду использовать штатные возможности postfix, позволяющие отсеять спам по тем или иным параметрам еще до получения письма. Это очень эффективный способ с точки зрения производительности. Благодаря этому, правильно настроенный на отсев спама postfix часто ставят перед exchange, чтобы снизить на него нагрузку. Сразу дам ссылки на официальную документацию с описанием параметров, которые я буду использовать:

  1. smtpd_helo_restrictions
  2. smtpd_sender_restrictions
  3. smtpd_recipient_restrictions
  4. smtpd_data_restrictions
  5. smtpd_client_restrictions

Есть еще парочка - smtpd_etrn_restrictions и smtpd_end_of_data_restrictions, но я ими не пользуюсь.

Обращаю внимание на то, что нужно очень аккуратно работать с настройками, о которых пойдет речь. Нужно четко понимать как, зачем и что вы делаете. Неверные настройки могут нарушить нормальное хождение почты. Нужно уметь анализировать лог файл почтового сервера и понимать, что там происходит.

Долго думал, как лучше всего представить информацию по этому разделу. В итоге решил просто написать часть конфига, которая отвечает за restrictions с комментариями. Более подробную информацию по каждой настройке вы можете найти в официальной документации postfix, ссылки я привел выше, либо в гугле. Данные настройки это моя многолетняя калькуляция различных параметров, собранных из черновиков и рабочих серверов. Не везде все было настроено именно в таком виде, так как ситуации бывают разные. Сейчас я постарался все собрать в одном месте и аккуратно описать. Те проверки в борьбе со спамом, что вам не нужны, просто закомментируйте. В конце я еще пройдусь по некоторым из них и поделюсь своим опытом.

#Описание списков исключений
smtpd_restriction_classes = white_client_ip,
                            black_client_ip,
                            block_dsl,
                            white_client,
                            white_helo,
                            black_client,
                            mx_access

# IP адреса, которые нужно пропускать всегда
white_client_ip		= check_client_access hash:/etc/postfix/lists/white_client_ip

# IP адреса, которые нужно блокировать всегда
black_client_ip		= check_client_access hash:/etc/postfix/lists/black_client_ip

# E-mail, которые нужно пропускать всегда
white_client		= check_sender_access hash:/etc/postfix/lists/white_client

# E-mail, которые нужно блокировать всегда
black_client		= check_sender_access hash:/etc/postfix/lists/black_client

# Неправильные значения HELO, которые мы тем не менее принимаем
white_helo = check_sender_access hash:/etc/postfix/lists/white_helo
# Правила для блокировки различных динамических ip.
block_dsl 		= check_client_access regexp:/etc/postfix/lists/block_dsl

# Список приватных сетей, которые не могут быть использованы в качестве IP для MX записей
mx_access		= check_sender_mx_access cidr:/etc/postfix/lists/mx_access

# Проверки на основе данных, переданных в HELO/EHLO hostname
smtpd_helo_restrictions =	permit_mynetworks,
		permit_sasl_authenticated,
		white_client_ip,
                white_helo,
		black_client_ip,
		block_dsl,
		# Отказываем серверам, у которых в HELO несуществующий или не FQDN адрес 
		reject_invalid_helo_hostname,
		reject_non_fqdn_helo_hostname,
		# Запрещаем приём писем от серверов, представляющихся адресом, для которого не существует A или MX записи.
		reject_unknown_helo_hostname

# Проверки клиентского компьютера или другого почтового сервера, который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions = 	permit_mynetworks,
		permit_sasl_authenticated,
		# Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная, поддерживает ли Postfix конвейерную обработку команд ESMTP
		reject_unauth_pipelining,
		# Блокируем клиентов с адресами from, домены которых не имеют A/MX записей
		reject_unknown_address,
		reject_unknown_client_hostname

# Проверки исходящей или пересылаемой через нас почты на основе данных MAIL FROM
smtpd_sender_restrictions =	permit_mynetworks,
		permit_sasl_authenticated,
		white_client,
		black_client,
		# Запрет отправки писем, когда адрес MAIL FROM не совпадает с логином пользователя
		reject_authenticated_sender_login_mismatch,
		# Отклоняем письма от несуществующих доменов
		reject_unknown_sender_domain,
		# Отклоняем письма от доменов в не FQDN формате
		reject_non_fqdn_sender,
		# Отклонение писем с несуществующим адресом отправителя
		reject_unlisted_sender,
		reject_unauth_destination,
		# Отклонять сообщения от отправителей, ящики которых не существуют, использовать аккуратно
		#reject_unverified_sender,
		mx_access

# Правила приема почты нашим сервером на основе данных RCPT TO
smtpd_recipient_restrictions =  permit_mynetworks,
		permit_sasl_authenticated,
		# Отклоняет всю почту, что адресована не для наших доменов
		reject_unauth_destination,
		# Отклонение писем с несуществующим адресом получателя
		reject_unlisted_recipient,
		# Отклоняет сообщения на несуществующие домены
		reject_unknown_recipient_domain,
		# Отклоняет сообщения если получатель не в формате FQDN
		reject_non_fqdn_recipient,
		# Отклоняем прием от отправителя с пустым адресом письма, предназначенным нескольким получателям.
		reject_multi_recipient_bounce

У меня во всех ограничениях первыми правилами стоят разрешения для mynetworks и авторизовавшихся пользователей. Важно понимать, что это значит и для чего сделано. Ограничения читаются последовательно в порядке их перечисления. Таким образом, мы своих пользователей пускаем мимо ограничений, а для всех остальных выполняются проверки.

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

  • reject_invalid_helo_hostname и reject_unknown_helo_hostname - под эти правила иногда попадают почтовые серверы клиентов, которые не очень хорошо настроены. У них бывают неправильные адреса, кривые записи dns, отсутствие обратных зон и т.д. Их не много, но попадаются. Это не страшно, если вы регулярно следите за сервером. Отправитель получит сразу сообщение о том, что его письмо не дошло до вас. Если он как-то сообщит вам о проблеме, вы легко добавите его в белый список и все будет нормально. Если вам не хочется следить за сервером, лучше не указывайте эти ограничения. Но спам они отсекают не плохо. Сюда попадают все завирусованные компьютеры и сервера без нормальных настроек dns (а их чаще всего и нет).
  • reject_unverified_sender - специально его закомментировал. Я тестировал этот параметр. В принципе, работает нормально, но есть, как обычно, нюансы. Поясню, что делает этот параметр. Когда вам кто-то шлет письмо, ваш сервер обращается к серверу отправителю и спрашивает его стандатрной командой, есть ли на сервере такой отправитель. Если удаленный сервер отвечает, что есть, то никаких проблем - письмо принимается. Если удаленный сервер не отвечает или говорит, что такого адресата нет - письмо отклоняем. Очевидно, что такие проверки создают дополнительную постоянную нагрузку. Это нужно учитывать. К тому же, у вас почтовый лог постоянно будет забит этими проверками, особенно, если вам приходит много спама. На каждое спамовое письмо будет идти проверка, а сервера отправителя скорее всего либо нет, либо он неправильный, либо не отвечает и т.д. Все это будет постоянно проверяться и фиксироваться. В общем, я не использую.

На время отладки ограничений, рекомендую пользоваться параметром:

soft_bounce = yes

Когда он включен, все ответы сервера с кодами ошибок 5XX, заменяются на 4ХХ. То есть постоянная ошибка, которая сразу отклоняет письмо, заменяется на временную, которая предлагает повторить отправку позже. Таким образом, вы увидите работу всех ограничений, но письма не будут отклонены навсегда. Сервер отправителя через некоторое время снова придет к вам с новой попыткой доставки почты. Письмо безвозвратно не отклоняется. Вы можете проанализировать работу фильтра и решить, ставить его на постоянную работу или с ним что-то не так.

Создадим теперь файлы с белыми и черными списками.

cd /etc/postfix/lists && touch white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access

Ниже пример содержания этих файлов. Вы можете менять по своему усмотрению.

# cat white_client_ip
195.28.34.162 OK
141.197.4.160 OK
# cat black_client_ip
205.201.130.163 REJECT You IP are blacklisted!
198.2.129.162 REJECT You IP are blacklisted!
# cat white_client
# Принимать всю почту с домена яндекс
yandex.ru OK
# Разрешить конкретный ящик
spammer@mail.ru OK
# cat black_client
# Блокировать всю почту с домена mail.ru
mail.ru REJECT You domain are blacklisted!
# Блокировать конкретный ящик
spam@rambler.ru REJECT You e-mail are blacklisted!
# cat white_helo
# Могут попадаться вот такие адреса, которые не пройдут наши проверки
ka-s-ex01.itk.local     OK
exchange.elcom.local    OK
# cat block_dsl
/^dsl.*\..*\..*/i                               553 AUTO_DSL spam
/dsl.*\..*\..*/i                                553 AUTO_DSL1 spam
/[ax]dsl.*\..*\..*/i                            553 AUTO_XDSL spam
/client.*\..*\..*/i                             553 AUTO_CLIENT spam
/cable.*\..*\..*/i                              553 AUTO_CABLE spam
/pool.*\..*\..*/i                               553 AUTO_POOL spam
/dial.*\..*\..*/i                               553 AUTO_DIAL spam
/ppp.*\..*\..*/i                                553 AUTO_PPP spam
/dslam.*\..*\..*/i                              553 AUTO_DSLAM spam
/node.*\..*\..*/i                               553 AUTO_NODE spam
/([0-9]*-){3}[0-9]*(\..*){2,}/i                 553 SPAM_ip-add-rr-ess_networks
/([0-9]*\.){4}(.*\.){3,}.*/i                    553 SPAM_ip-add-rr-ess_networks
/.*\.pppool\..*/i                               553 SPAM_POOL
/[0-9]*-[0-9]*-[0-9]*-[0-9]*-tami\.tami\.pl/i   553 SPAM_POOL
/pool-[0-9]*-[0-9]*-[0-9]*-[0-9]*\..*/i         553 SPAM_POOL
/.*-[0-9]*-[0-9]*-[0-9]*-[0-9]*\.gtel.net.mx/i  553 SPAM_POOL
/dhcp.*\..*\..*/i                               553 SPAM_DHCP
# cat mx_access
127.0.0.1      DUNNO 
127.0.0.2      550 Domains not registered properly
0.0.0.0/8      REJECT Domain MX in broadcast network 
10.0.0.0/8     REJECT Domain MX in RFC 1918 private network 
127.0.0.0/8    REJECT Domain MX in loopback network 
169.254.0.0/16 REJECT Domain MX in link local network 
172.16.0.0/12  REJECT Domain MX in RFC 1918 private network 
192.0.2.0/24   REJECT Domain MX in TEST-NET network 
192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 
224.0.0.0/4    REJECT Domain MX in class D multicast network 
240.0.0.0/5    REJECT Domain MX in class E reserved network 
248.0.0.0/5    REJECT Domain MX in reserved network

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

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

cd /etc/postfix/lists && postmap white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access

Еще упомяну о таком популярном явлении в спамерских письмах, как подделка адреса отправителя. Причем не просто подделка на абы кого, а именно на ваше имя домена. Пользователь получает спам письмо и в почтовом клиенте видит, что оно отправлено с вашего домена. Только по заголовкам можно определить реального отправителя. Такой подход позволяет обходить некоторые антиспам системы, которые не фильтруют письма внутреннего домена. Бороться с подменой адреса отправителя в нашем случае очень просто. Для этого в black_client добавим следующую запись:

zeroxzed.ru 554 Stop spam from my name

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

Приведу в завершении описания методов борьбы со спамом простой пример. Добавим в black_client почтовый адрес и отправим с него письмо.

# cat black_client
zeroxzed@gmail.com REJECT Your e-mail was banned!
# postmap black_client

Отправляем сообщение и проверяем почтовый лог.

# cat /var/log/maillog
Mar 20 02:21:34 mail postfix/smtpd[10816]: connect from mail-yw0-f177.google.com[209.85.161.177]
Mar 20 02:21:35 mail postfix/smtpd[10816]: Anonymous TLS connection established from mail-yw0-f177.google.com[209.85.161.177]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 20 02:21:35 mail postfix/smtpd[10816]: NOQUEUE: reject: RCPT from mail-yw0-f177.google.com[209.85.161.177]: 554 5.7.1 <zeroxzed@gmail.com>: Sender address rejected: Your e-mail was banned!; from=<zeroxzed@gmail.com> to=<root@zeroxzed.ru> proto=ESMTP helo=
Mar 20 02:21:35 mail postfix/smtpd[10816]: disconnect from mail-yw0-f177.google.com[209.85.161.177]

Вот и результат. На этом по борьбе со спамом все.

Заключение

Проверить настроенный почтовый сервер можно с помощью онлайн сервиса https://www.mail-tester.com. Не факт, что получите максимальный бал, но все недочеты будут указаны. Критичное нужно исправить (например, если обратная зона неправильная), некритичное можно пропустить (если dkim, к примеру, не настраивали).

Кажется все написал, что знал по поводу почтового сервера на linux в небольших и средних организациях. У некоторых может возникнуть вопрос, а зачем свой почтовый сервер? Почему бы не воспользоваться средствами корпоративной почты, которую представляют популярные почтовые сервисы бесплатно? Я планирую написать по этому поводу отдельную заметку (в итоге написал - выбор почтового сервера). У меня тоже есть определенный опыт на этот счет. И если некоторое время назад я считал, что свои почтовые серверы в небольших организациях уже не актуальны, то сейчас я так не думаю, поэтому и появилась эта статья.

Буду рад замечаниям по делу и советам в комментариях. Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Супер-интенсив "Tarantool"

Если у вас есть желание освоить платформу in-memory вычислений, востребованную в современных высоконагруженных приложениях, рекомендую пройти интенсив Tarantool в OTUS. Обучение длится 5 дней. Что даст вам этот интенсив:
  • Узнаете архитектуру и внутреннее устройство Tarantool.
  • Поймете сильные и слабые стороны Tarantool.
  • Сможете назвать сходства и отличия от других СУБД.
  • Увидите кейсы использования: куда брать, куда не брать.
  • Установите и запустите Tarantool.
  • Поднимете собственный кластер.
Смотрите подробнее программу по .

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

599 комментариев

  1. Аватар

    @Zerox Приветствую !
    до сих пор не могу решить вопрос с задержкой писем на внеш адрес , задержка почти 12 часов , подскажите пожалуйста, данные настройки на какую нагрузку рассчитана ? у меня 3000 пользователей , подходит ли данная настройка на такой поток пользователей ?

    • Аватар

      Скажу так, на работе более 50К пользователей, два принимающих, два отправляющих сервера, держат нагрузку особо не напрягаясь. В первую очередь смотрите логи, не помогут логи снимайте дамп с порта и анализируйте трафик.

      • Аватар

        Мой мастер , можете глянуть может тут что то не правильно ?

        # ==========================================================================
        smtp inet n - n - - smtpd
        -o smtpd_tls_security_level=may
        -o smtpd_sasl_auth_enable=yes
        -o receive_override_options=no_address_mappings
        submission inet n - n - - smtpd
        -o syslog_name=postfix/submission
        -o smtpd_tls_wrappermode=yes
        -o smtpd_tls_security_level=encrypt
        -o smtpd_sasl_type=dovecot
        -o content_filter=spamassassin
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_reject_unlisted_recipient=no
        -o smtpd_tls_security_level=may
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
        -o milter_macro_daemon_name=ORIGINATING

        # наш сервер поддерживал протокол SSL/TLS и слушал порт 465
        smtps inet n - n - - smtpd
        -o smtpd_tls_security_level=encrypt
        -o syslog_name=postfix/smtps
        -o smtpd_tls_wrappermode=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
        -o milter_macro_daemon_name=ORIGINATING

        pickup unix n - n 60 1 pickup
        cleanup unix n - n - 0 cleanup
        qmgr unix n - n 300 1 qmgr
        tlsmgr unix - - n 1000? 1 tlsmgr
        rewrite unix - - n - - trivial-rewrite
        bounce unix - - n - 0 bounce
        defer unix - - n - 0 bounce
        trace unix - - n - 0 bounce
        verify unix - - n - 1 verify
        flush unix n - n 1000? 0 flush
        proxymap unix - - n - - proxymap
        proxywrite unix - - n - 1 proxymap
        smtp unix - - n - - smtp
        relay unix - - n - - smtp
        showq unix n - n - - showq
        error unix - - n - - error
        retry unix - - n - - error
        discard unix - - n - - discard
        local unix - n n - - local
        virtual unix - n n - - virtual
        lmtp unix - - n - - lmtp
        anvil unix - - n - 1 anvil
        scache unix - - n - 1 scache
        #
        dovecot unix - n n - - pipe
        flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
        ~
        ~

    • Аватар

      Прочитал ваш вопрос от 5го ноября, если вечером у вас становиться все нормально, тогда смотрите загрузку канала днем. И если есть возможность настраивайте QoS (quality of service) на шлюзе.

  2. Аватар

    @Zerox приветствую!
    уже не знаю что смотреть , до сих пор почта не уходит на внешние адреса скажем mail.ru gmail.com, вот кусочек лога

    Nov 17 21:26:57 mail postfix/smtp[15194]: B1B0E361E5E: host mxs.mail.ru[94.100.180.104] said: 421 Service not available (in reply to end of DATA command)
    Nov 17 21:26:57 mail postfix/smtp[15194]: B1B0E361E5E: enabling PIX workarounds: disable_esmtp delay_dotcrlf for mxs.mail.ru[94.100.180.31]:25

  3. Аватар

    Добрый день!
    Спасибо за отличный сайт!
    Подскажите пожалуйста куда копать?
    Второй день бьюсь с
    fatal: open dictionary: expecting "type:name" form instead of "virtual_mailbox_domains"
    и
    warning: /usr/libexec/postfix/cleanup: bad command startup -- throttling
    в логах /var/log/maillog

    должен ли что-либо возвращать из БД запрос описанный в /etc/postfix/mysql/virtual_mailbox_domains.cf ?
    если выполнить его в phpmyadmin, то вывод будет пустой.

    • Zerox

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

      • Аватар

        Да, так и получилось. Ошибся пробелом в /etc/postfix/main.cf в строке с vurtual_mailbox_domains
        Спасибо Вам большое!

  4. Аватар
    Владимир

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

    • Zerox

      Простого способа не знаю. Наверно, надо зайти в базу mysql и вручную сбросить пароль в соответствующем поле.

  5. Аватар

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

    • Zerox

      Dovecot с отправкой никак не связан. Смотрите лог postfix в момент отправки. Там будет ответ, почему не отправляется.

      • Аватар

        Nov 5 11:39:11 mx1 postfix/smtps/smtpd[13754]: BC4E9361CC5: client=unknown[10.10.11.46], sasl_method=CRAM-MD5, sasl_username=rhel89@test.gov.com
        Nov 5 11:39:11 mx1 postfix/qmgr[13508]: BC4E9361CC5: from=, size=821, nrcpt=1 (queue active)

        Вот что в логах , после этого ничего , он попадет в очередь и все.

      • Аватар

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

      • Аватар

        Nov 5 15:02:51 mx1 postfix/smtps/smtpd[1370]: 5013B3618C9: client=unknown[10.10.11.46], sasl_method=CRAM-MD5, sasl_username=rhel89@test.gov.com
        Nov 5 15:02:51 mx1 postfix/cleanup[21122]: 5013B3618C9: message-id=
        Nov 5 15:02:51 mx1 opendkim[26942]: 5013B3618C9: DKIM-Signature field added (s=mail, d=test.gov.com)
        Nov 5 15:02:51 mx1 postfix/qmgr[32226]: 5013B3618C9: from=, size=825, nrcpt=1 (queue active)
        Nov 5 15:02:51 mx1 postfix/smtps/smtpd[1370]: disconnect from unknown[10.10.11.46]

        Вот кусок лога когда я отправляю письмо на внешний адрес

  6. Аватар

    Добрый день ,
    возник вопрос, как правильно записать открытый ключ dkim в dns ? файл зоны храню на своем днс сервере
    просто скопировать все что у нас имеется в конфиге /etc/postfix/dkim/mail.zeroxzed.ru.txt (в моем случае мой ключ) без изменений и всавить в самый конец конфигурационного фаила ?

    • Zerox

      Не знаю, что у вас за сервер dns, но формат записи стандартный - txt запись. Можно легко нагуглить, как ее корректно прописывать. В статье у меня есть пример.

  7. Аватар
    vladimir|_ma

    Добрый день делалвсе как написнно в статье, все 2 перепроверил выдает такое в локах

    [root@mail ~]# tail -f /var/log/maillog
    Sep 30 13:19:34 mail postfix/smtpd[1452]: CC1FD1809CA: client=mail-ed1-f51.google.com[209.85.208.51]
    Sep 30 13:19:34 mail postfix/cleanup[1467]: warning: hash:/etc/postfix/sender_bcc_maps is unavailable. open database /etc/postfix/sender_bcc_maps.db: No such file or directory
    Sep 30 13:19:34 mail postfix/cleanup[1467]: warning: hash:/etc/postfix/sender_bcc_maps lookup error for "mamisashvili@gmail.com"
    Sep 30 13:19:34 mail postfix/cleanup[1467]: warning: CC1FD1809CA: sender_bcc_maps lookup problem
    Sep 30 13:19:35 mail postfix/cleanup[1467]: 0F1EB1809CA: message-id=
    Sep 30 13:19:35 mail postfix/smtpd[1452]: disconnect from mail-ed1-f51.google.com[209.85.208.51]
    Sep 30 13:19:35 mail postfix/qmgr[1275]: 0F1EB1809CA: from=, size=1358, nrcpt=1 (queue active)
    Sep 30 13:19:35 mail postfix/smtp[1471]: 0F1EB1809CA: to=, orig_to=, relay=none, delay=0.05, delays=0.02/0.02/0/0, dsn=5.4.6, status=bounced (mail for mail.coscoshipping.ge loops back to myself)
    Sep 30 13:19:35 mail postfix/bounce[1472]: warning: 0F1EB1809CA: undeliverable postmaster notification discarded
    Sep 30 13:19:35 mail postfix/qmgr[1275]: 0F1EB1809CA: removed

    • Zerox

      Прямым текстом написано, что невозможно открыть файл:
      /etc/postfix/sender_bcc_maps.db: No such file or directory
      Проверяйте, почему его нет. Возможно, просто в названии файла ошиблись.

      • Аватар

        да его нет , так как мне не нужно собирать почту , пропустил этот шаг ,
        поиду дальше копать

        • Zerox

          Тогда из настроек убирайте на него указание.

          • Аватар
            Аноним

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

            • Аватар

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

              принимаем почту по 110 порту с зашитой starttls и обычный пароль
              а вот отправить как у вас показано на скриншоте не получается
              вышло только указано в 25 порт и пароль, без никакой зашиты ,
              я так понял, что при подключений первый раз на прием мы получаем сертификат и добавляем его в иключение , а вот на отправку уже не можем добавить сретификат

              • Zerox

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

                • Аватар

                  Есть подозрение что в новых версиях эту функцию переделали

                  • Zerox

                    Да, может такое быть. Сейчас везде тренд работать только с подтвержденными сертификатами.

                    • Аватар

                      Да вы правы, пришлось отдельно генерировать отедьлные сертфикаты от letsencrypta ? и указывать их везде,
                      заработало,

                      шас разбираюсь postfix-sasl.conf не хочет работать,
                      выдает такое

                      [root@mail ~]# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/postfix-sasl.conf

                      Running tests
                      =============

                      Use failregex filter file : postfix-sasl, basedir: /etc/fail2ban
                      Use datepattern : Default Detectors
                      ERROR: No failure-id group in '^(?:\[\])?\s*(?:\s+)?(?:\S+\s+)?(?:kernel:\s?\[ *\d+\.\d+\]:?\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?\S*(?:\(\S+\))?[\]\)]?:?|[\[\(]?\S*(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$'
                      [root@mail ~]#

  8. Аватар

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

    • Аватар

      Копать в сторону логов )))))) В правильно заданном вопросе, половина ответа. Какая ошибка? Какой запрос?

      • Аватар

        если бы я увидел, что нить в логах. При заходе на веб морду, ещё не успел ввести лог и пароль. Уже даёт такую ошибку :(

  9. Аватар

    @Zerox Добрый день! не подскажете , настроил все по вашему методу , есть такая проблема , отправляю со своей настроенной почты в mail.ru и gmail.com . проверяю там они в спаме, потом отправил на yandex , а там норм , письмо во входящих . В чем может быть причина ?

    • Zerox

      Скорее всего в настройках ptr, dkim и spf. А вообще спам фильтры оценивают письмо в том числе и по содержимому. Так что даже технически идеально настроенный сервер не гарантирует отсутствие попадания в спам.

  10. Аватар

    Добрый день!

    Судя по логам почта в почтовый ящик попадает, но в RoundCube в папке Входящие пусто. Куда копать?

    • Zerox

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

    • Аватар
      Аноним

      После долгих страданий заработало (как и почему не понял).

  11. Аватар

    Не доставляется почта.
    В логах:

    warning: do not list domain mail.test in BOTH virtual_alias_domains and virtual_mailbox_domains

    NOQUEUE: reject: RCPT from другой_почтовый_сервер: 550 5.1.1 : Recipient address rejected: User unknown in virtual alias table

    CentOS 7

    Где чего не хвататет или не сделалось?

    • Zerox

      Домен судя по всему не добавлен в базу данных. Либо какая-то проблема с доступом к этой информации из базы. Если делать по инструкции, все получится.

      • Аватар
        Аноним

        Да вроде все делал по инструкции. База алиасов пустая. Где какие можно посмотреть контрольные точки?

  12. Аватар

    Всем доброго времени суток!
    Столкнулся с такой задачей. Допустим есть ящик vasya@domen.ru надо сделать так, чтобы на этот ящик в час приходило не более 150 писем, остальных в очередь. плюс оповещении на ящик допустим admin@domen.ru, о превышении лимита. Есть у кого идеи как это реализовать можно?
    Реализовать соответственно надо, средствами самого Postfix .

    • Zerox

      Могу сразу сказать, что такое реализовать на postfix, да и на любом другом сервере непросто. Очень специфичный функционал. Я даже не представляю, с чего тут начинать и как реализовывать. Нужен какой-то скрипт, который будет считать письма за промежуток времени, потом ходить в базу, отключать ящик, слать письмо админу. Потом пересчитывать письма и обратно включать ящик. В общем, задача скорее для программиста. Админу без опыта программирования будет трудно это реализовать.

  13. Аватар

    И так я настроил почту как в статье я могу отправлять на маил и гмаил но плучить с маил или гмаил не могу, в чем может быть проблема?Но с локалных доменов письма приходят и уходят.Где копать?

    • Zerox

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

      • Аватар

        Проблема у меня с 25 потом не могу открыть и постфикс и довекот его не слушают, открывал через iptables и отключал фаервол все рано 25 порт закрыт,проверял и телнетом и nmap порт 25 закрыт,что делать?

  14. Аватар

    Не могу зайти в roundcube,польз и пароль есть в mysql зайти могу при установке все указал.Логин и пароль правильный база есть права есть к базе.
    Ошибка в http://ip/webmail/ -
    DATABASE ERROR: CONNECTION FAILED!
    Unable to connect to the database!
    Please contact your server-administrator.
    Что делать?

    • Аватар

      Версия SQL сервера какая?
      Если последние версии проверяйте пароль, пароль должен состоять из цифр и букв не меньше 8 знаков

      • Аватар

        проверка
        #mysql -u(пользователь базы данных) -p(пароль), если подключится, проверять конфиги webmail, ошибка где-то там, чудес не бывает.l

        • Аватар

          Спокойно вхожу в Mysql в консоли версия 10.3.17-MariaDB MariaDB Server. Где может быть косяк в webmail? Смотпел файл config.inc.php там юзер базы есть и пароль

          • Аватар

            Я один раз сталкивался с проблемой (не помню всех деталей), но проблема была в @ в пароле, после того как убрал @ из пароля, все заработало.
            Пы.сы а драйвер подключения корректный?

            • Аватар

              Драйвер корректный в пароле только цифры и буквы знака @ нет,но спасибо, есть ещё у кого соображения?

    • Аватар
      Дмитрий

      У меня данная ошибка вылезла на версии roundcube 1.4.8 . Также создал БД, пользователя с паролем, перешел к веб-адресу для корня roundcube и получил такую же ошибку. Проблема выскочила из-за не инициализированной схемы БД. Нужно было перейти на третью вкладку установки (/installer/) Test config, на ней нужно было инициализировать схему БД ( Check DB config -> DB Schema) , нажав кнопку создания схемы и тогда DB Schema, DB Write и DB Time стали ОК, а на рабочей странице вместо ошибки появилась авторизация. Спасибо еще раз Zerox за труд.

  15. Аватар
    Алексей

    Спасибо за статью, если все делать внимательно, все отлично работает. Я никогда не использовал сервер на linux в жизни (который настраивал бы сам), но на всякий случай у нас в системе он есть, чтобы при сбое основного перейти на резервный. Спасибо.
    Но у меня вопрос который не отражен в статье, а если необходимо чтобы пользователи могли отправлять почту только на определенные домены, как это сделать ума не приложу. Нашел кучу статей, но добавление в настройки postfix - smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_access, и добавление в список:
    mail.ru REJECT You domain are blacklisted!
    test@gmail.com REJECT You domain are blacklisted!
    gmail.com REJECT You domain are blacklisted!

    При этом если внести в файл smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/recipient_access - то на исходящую почту это работает сразу, а на исходящую почему то никак.

    Вы не могли бы чтобы можно было посмотреть, чтобы найти ответ на мой вопрос, Спасибо.

    • Zerox

      Этот вопрос решается и в интернете можно найти варианты. У меня нет под рукой готового решения, но я его настраивал раньше.

    • Аватар

      Не совсем понятен, ваш вопрос -
      При этом если внести в файл smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/recipient_access — то на исходящую почту это работает сразу, а на исходящую почему то никак.
      Исходящая - Исходящая.

  16. Аватар

    Всем доброго времени суток!
    Столкнулся с такой проблемой, используется связка (Postfix+Dovecot+Mysql+PostfixAdmin) (CentOS7 + php 7.2 + MySQL 5.7)
    Postfix упорно пытается подключиться '/var/lib/mysql/mysql.sock', а у меня Mysql работает в '/var/lib/mysql_D_/mysql.sock'
    В итоге я в логах получаю ошибку -
    postfix/proxymap[21065]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    Как мне "заставить" Postfix смотреть и подключаться куда мне надо? Буду признателен, за ответы.

    • Zerox

      Какой-то у вас странный путь для сокета. Не знаю, где его в постфикс можно изменить его. Надо гуглить. Сделайте просто символьную ссылку на /var/lib/mysql/mysql.sock с работающего сокета.

      • Аватар

        Иногда, ответ у нас перед глазами, а нам лень посмотреть. Спасибо за совет, а я полдня уже "бегаю" вокруг этой проблемы и не могу решить )))))

  17. Аватар
    Сергей

    Добрый день.Поднял сервер по данной статье.Заработал.Хоть и не с первого раза.Сервер стоит внутри локалки за НАТ.Но есть одна проблема.Мы тут все головы сломали...Раундкуб подключается и работает нормально.А вот Тандерберд авторизуется исключительно на машинах с линукс и макОС. Что внутри сети что с наружи. Файрволы на винде отключали,что только не делали.Так и не смогли ни разу авторизоваться в Тандерберд на Винде.Находит сервер с параметрами без проблем.Но после нажатия на кнопку готово выскакивает ошибка : Не могу войти на сервер.Возможно имеется ошибка в конфигурации, имени пользователя или пароля. Для чистоты эксперимента даже удалили криптопро и все сертификаты чтобы не было конфликта с сертификатами.Все-равно ошибка.Повторюсь,что с линукса и мака все работает на ура!Я в тупике.

    • Zerox

      Смотрите лог почтового сервера в момент подключения с винды. Там будут подсказки. Думаю, проблема как-то с tls может быть связана.

      • Аватар
        Сергей

        Вот лог с мака.Тут все норм. (/dovekot/info.log)
        Mar 04 12:09:47 imap-login: Info: Login: user=, method=PLAIN, rip=192.168.39.196, lip=192.168.39.11, mpid=1948, TLS, session=
        А вот лог с винды.Повторюсь.Настройки-логин-пароль-сервер-порты) в Тандерберд одинаковые.
        Mar 04 14:16:29 imap-login: Info: Disconnected (no auth attempts in 0 secs): user=, rip=192.168.39.198, lip=192.168.39.11, TLS: SSL_read() failed: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate: SSL alert number 42, session=

        • Zerox

          Как я и говорил, проблемы с TLS:

          TLS: SSL_read() failed: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate: SSL alert number 42, session=

          По какой причине и в чем именно ошибка - не знаю. Надо разбираться.

          • Аватар
            Сергей

            Я это тоже понимаю.Вот только не понимаю куда копать.С оной виндовой машины как-то удалось подключиться.И то ненадого.Через пару часов она опять отказалась подключаться с той же ошибкой как и у всех.А как можно вообще отключить шифрование?По идее если его отключить проблема с tls должна пропасть.

            • Zerox

              Возможно проблема из-за большой разницы во времени между сервером и клиентами. Из-за этого сертификаты могут не работать.

              • Аватар
                Сергей

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

          • Аватар
            Сергей

            Ну в общем путем проб и ошибок выяснили что дело не в сервере,а в самом тандерберде.С других почтовых программ все работает нормально.Что там у него за конфликты с ssl одному богу известно.Судя по форумам такая проблема была у многих при обновлении с 30-й на 31-ю версии тандерберда.В этом свете вопрос-как и где и как на сервере отключить эти проверки ssl вообще?Ну не нужно мне шифрование.

            • Zerox

              Предложенная конфигурация позволяет подключаться без шифрования. В postfix за это отвечает параметр:
              smtp_tls_security_level = may
              Так что просто на клиенте не ставьте шифрование и все.

              А в dovecot надо этот параметр убрать:
              ssl = required
              Или переделать что-то еще. Точно не знаю, надо тестировать. Я давно уже не отключал шифрование полностью.

      • Аватар
        Сергей

        И еще .../dovecot.main.log сверху есть такая строка
        Mar 04 11:39:58 master: Error: service(auth): unlink(/var/run/dovecot/auth-master) failed: Is a directory
        хотя я эту директорию создал

        • Zerox

          Он как раз и ругается на то, что это директория. Это не должна быть директория. Если не ошибаюсь, это имя сокета.

  18. Аватар
    Дмитрий

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

    Process: 1548 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
    Process: 1547 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
    Process: 1544 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)

    Mar 03 06:48:54 mail systemd[1]: Starting Postfix Mail Transport Agent...
    Mar 03 06:48:54 mail postfix[1548]: fatal: file /etc/postfix/main.cf: parameter default_privs: unknown user name value: nobody
    Mar 03 06:48:55 mail systemd[1]: postfix.service: control process exited, code=exited status=1
    Mar 03 06:48:55 mail systemd[1]: Failed to start Postfix Mail Transport Agent.
    Mar 03 06:48:55 mail systemd[1]: Unit postfix.service entered failed state.
    Mar 03 06:48:55 mail systemd[1]: postfix.service failed.

    • Zerox

      Четко написано:
      fatal: file /etc/postfix/main.cf: parameter default_privs: unknown user name value: nobody
      Возможно это дефолтный параметр, в котором указан пользователь nobody, а у вас его нет в системы (быть должен по дефолту)

      • Аватар
        Дмитрий

        понял, нет у меня такого пользователя, если создавать через useradd, все равно его не цепляет

  19. Аватар

    >Позже отдельным пунктом я расскажу как использовать полноценные сертификаты.
    Добрый вечер.
    Где можно ознакомится с данным пунктом ?

    • Zerox

      Статьи нет. В целом, там и писать нечего. Получаете любым способом сертификат от let's encrypt и просто указываете его в конфиге вместо самоподписного из статьи и все. Никаких нюансов. Статей на тему получения сертификата lets encrypt в интернете полно, в том числе у меня на сайте в статьях про web сервер.

  20. Аватар
    Сергей

    Добрый день.Все установил.Вроде все запустилось.Но вот какая проблемка.При создании учетной записи в Тандерберд сначала все проходит гладко.Программа сама обнаруживает конфигурацию и т.д. Но все когда нажимаешь кнопку готово пишет неправильный пароль.Я перепробовал несколько ящиков настроить-одно и тоже -неправильный пароль.Я уверен что ввожу его правильно.Подскажите куда копать )

    • Zerox

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

    • Аватар

      Благодарю Zerox за труды.
      Сделал всё по инструкции, но столкнулся с такой же проблемой, как у вас, а именно при авторизации в Thunderbird была ошибка неправильный пароль. 2 раза переделывал полностью всё заново, результат такой же.
      Устанавливал разные версии postfixadmin 3.2 и 3.0.2
      Получилось пройти авторизацию на 3.0.2, думаю что и 3.2 тоже получится:
      /etc/dovecot/dovecot-mysql.conf
      ldefault_pass_scheme = PLAIN
      в
      /var/www/html/postfixadmin/config.inc.php
      $CONF['encrypt'] = 'cleartext';

      Параметры подключения в Thunderbird:
      IMAP:993 SSL/TLS Normal password
      SMTP:465 SSL/TLS Noremal password

      • Zerox

        Рекомендую воспользоваться самой актуальной статьей по настройке почтового сервера - https://serveradmin.ru/nastroyka-postfix-dovecot-centos-8/

        Она самая свежая на текущий момент и пока полностью актуальна. Хотя думаю, эта тоже. Скорее всего вы где-то ошиблись просто.

  21. Аватар

    Делюсь соображениями по поводу своего вопроса об невозможности подключиться к imap серверу из за ошибки аутентификации. Проблема была в открытых незашифрованных паролях в базе phpmyadmin параметр md5crypt в конфиге phpmyadmin. Как правильно заметил автор во второй своей статье Centos 8 необходимо тогда поменять параметр на PLAIN в конфиге dovecot-mysql.conf/default_pass_scheme = CRYPT(либо PLAIN) если пароли не шифрованы.

  22. Аватар

    Не могу авторизоваться через imap. В статусе dovecot пишет Can't open PID file /var/run/dovecot/master.pid (yet?) after start: No such file or directory. Но сама служба запущена. В roundcube не пускает! Через Mozilla тоже авторизоватся не получается. Содержимое лога /var/log/dovecot/info.log
    Feb 19 14:55:15 master: Info: Dovecot v2.2.36 (1f10bfa63) starting up for imap, pop3, sieve, lmtp (core dumps disabled)
    Feb 19 15:11:01 imap-login: Info: Disconnected (auth failed, 3 attempts in 14 secs): user=, method=PLAIN, rip=xxx.xx.xx.87, lip=10.12.3.113, TLS, session=

    Ошибка в логах Roundcube:
    [19-Feb-2020 11:31:47 +0000]: IMAP Error: Login failed for root@zflan.pp.ua against localhost from 10.12.3.128. AUTHENTICATE PLAIN: Authentication failed. in /var/www/html/webmail/program/lib/Roundcube/rcube_imap.php on line 200 (POST /webmail/?_task=login&_action=login)

    Может кто сталкивался с подобной проблемой? Уже ставил всё с нуля несколько раз, таже самая ошибка!

  23. Аватар

    Возникла ошибка в логах Roundcube:
    PHP Error: SMTP server does not support authentication (POST /webmail/_task=mail&_unlock=loading1582013909362&_framed=1&_lang=ru&_action=send)[18-Feb-2020 11:18:29 +0300]:
    SMTP Error: Authentication failure: SMTP server does not support authentication (Code: ) in /var/www/html/webmail/program/lib/Roundcube/rcube.php on line 1689 (POST /webmail/_task=mail&_unlock=loading1582013909362&_framed=1&_lang=ru&_action=send)

    С почтового клиента Mozilla почта уходит и приходит нормально, а вот через Roundcube при отправке вылазит SMTP ошибка 250. Ошибка авторизации. Хотя почту принимает нормально, только не отправляет.
    Не пойму в чём дело. И плагины почему-то не активировались в Rouncube при первоначальной настройки Rouncube я их указал в папках /var/www/html/webmail/plugins они есть, а вот например Общая папка не появилась в вэб интерфейсе.

  24. Аватар
    Дмитрий

    в roundcube smtp ошибка (250) ошибка авторизации

    cat /var/log/maillog
    connect from localhost[127.0.0.1]
    disconnect from localhost[127.0.0.1]

    [root@localhost ~]# telnet localhost 25
    Trying ::1...
    telnet: connect to address ::1: Connection refused
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 .ru ESMTP Postfix
    ^]
    telnet> Connection closed.

    • Zerox

      Вы подключаетесь по ipv6. Закомментируйте в /etc/hosts все строки с ipv6, чтобы localhost отвечал только по ipv4. Или явно пишите 127.0.0.1.

      • Аватар
        Дмитрий

        закомментил. не помогает.
        и еще ошибка, тоже уже была, сразу не написал:
        ошибка сервера select internal error occurred.

        • Zerox

          Смотрите лог самого roundcube, если разбираетесь с ним. Он в папке logs, в корне web клиента. Может там будут подсказки.

          А так internal error occurred говорит о том, что у вас сам почтовый сервер не работает. Разбирайтесь с ним. Статья рабочая, актуальная. Вы где-то ошиблись.

  25. Аватар
    Andrew.Johnson

    Почему-то opendkim не желает стартовать

    journal -xe
    -- Unit opendkim.service has begun starting up.
    Feb 10 06:19:34 5b4e5a0e9740 systemd[1]: New main PID 2054 does not belong to service, and PID file is not owned by root. Refusing.
    Feb 10 06:19:34 5b4e5a0e9740 systemd[1]: New main PID 2054 does not belong to service, and PID file is not owned by root. Refusing.
    Feb 10 06:19:34 5b4e5a0e9740 opendkim[2055]: OpenDKIM Filter v2.11.0 starting (args: -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid)
    Feb 10 06:21:04 5b4e5a0e9740 systemd[1]: opendkim.service start operation timed out. Terminating.
    Feb 10 06:21:04 5b4e5a0e9740 opendkim[2055]: OpenDKIM Filter: mi_stop=1
    Feb 10 06:21:04 5b4e5a0e9740 opendkim[2055]: OpenDKIM Filter v2.11.0 terminating with status 0, errno = 0
    Feb 10 06:21:04 5b4e5a0e9740 systemd[1]: Failed to start DomainKeys Identified Mail (DKIM) Milter.
    -- Subject: Unit opendkim.service has failed
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- Unit opendkim.service has failed.
    --
    -- The result is failed.

  26. Аватар

    iRedMail или postfixadmin?

    • Zerox

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

  27. Аватар

    Отлична статья!

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

    при етом почта через Roundcobe отправляється без проблем

    конфиг пересмотрел купу раз :(

    вот что в логе

    Feb 4 15:54:07 mail postfix/submission/smtpd[8430]: warning: hostname 94-153-111-82.broadband.kyivstar.net does not resolve to address 94.153.111.82: Name or service not known
    Feb 4 15:54:07 mail postfix/submission/smtpd[8430]: connect from unknown[94.153.111.82]
    Feb 4 15:54:07 mail postfix/submission/smtpd[8430]: disconnect from unknown[94.153.111.82]

    • Zerox

      А на клиенте какие ошибки? Тут либо с сетью проблема, либо с tls. Можно включить расширенный лог tls подключений. С ними чаще всего такие ошибки. Ну и с портами еще поиграться, попробовать на разные подключаться - 25, 587, 465.

      • Аватар
        Аноним

        аааа вопрос решился :)))
        проблема была в самоподписанным сертификате,

        Спасибо!!!!

  28. Аватар

    @ZEROX
    у вас на внутренние адреса письма как уходят ?через интернет ?

    • Zerox

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

      • Аватар

        Имел ввиду что в интернет уходят все почта , кроме моего @test.ru , то есть внутренние пиьсма в интернет не должны уходить , а почему я не могу получить входящую почту , как вы думаете ?

        • Zerox

          Я не знаю. Знаю только, что если делать по статье, то все получится. Я недавно проверял и настраивал очередной почтовый сервер.

          • Аватар

            у меня все почти тоже самое , только БД postgres.

          • Аватар

            Доброе утро!
            @Zerox развернул mysql БД , все работает .
            Но на postgres не работает у меня , видимо может запросы не правильные у меня в /etc/dovecot/dovecot-pgsql.conf и в /etc/postfix/pgsql/relay_domains.cf, virtual_alias_domain_maps.cf,virtual_alias_maps.cf,virtual_mailbox_domains.cf,virtual_mailbox_maps.cf

  29. Аватар

    Привет всем, в main.cf настроил mydestination = localhost, $mydomain, $myhostname таким оброзом , теперь выдает вот так.Вообщем задача такая же , для внутренних адресов чтобы postfix отправлял не через интернет.
    Помогите , что дальше копать .

    Jan 29 10:24:05 mx1 postfix/qmgr[13928]: 1EBDA361B48: from=, size=734, nrcpt=3 (queue active)
    Jan 29 10:24:05 mx1 postfix/smtps/smtpd[14126]: disconnect from unknown[10.10.11.14]
    Jan 29 10:24:06 mx1 postfix/local[14144]: 1EBDA361B48: to=, relay=local, delay=1.5, delays=0.28/0.05/0/1.2, dsn=5.1.1, status=bounced (unknown user: "test")
    Jan 29 10:24:06 mx1 postfix/cleanup[14137]: 879503608CC: message-id=
    Jan 29 10:24:06 mx1 postfix/bounce[14143]: 1EBDA361B48: sender non-delivery notification: 879503608CC
    Jan 29 10:24:06 mx1 postfix/qmgr[13928]: 879503608CC: from=, size=2644, nrcpt=1 (queue active)
    Jan 29 10:24:06 mx1 postfix/qmgr[13928]: 1EBDA361B48: removed
    Jan 29 10:24:06 mx1 postfix/local[14141]: 879503608CC: to=, relay=local, delay=0.11, delays=0.08/0/0/0.03, dsn=5.1.1, status=bounced (unknown user: "test")
    Jan 29 10:24:06 mx1 postfix/qmgr[13928]: 879503608CC: removed

  30. Аватар

    Всем привет !

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

  31. Аватар

    Подскажите пож , как нстроить чтобы postfix отправлял только на локальные адреса, чтобы через интернет не ходил.

  32. Аватар
    Виктор

    Еще раз всем привет!
    Статья огромная, классная, хорошо погружающее в постфикс и, самое главное, рабочая! Если что-то не работает - проверяйте всё еще раз=)
    Получается, мы почту входящую и исходящую просто складываем после получения в другое место, вот только потом не очень удобно доставать) Раундкуб пока не стал ставить, ну наверно и другие методы существуют, надо глянуть!
    Ещё раз спасибо большущее автору!

    • Zerox

      Не понял, что значит не удобно доставать? По imap очень удобно. Конечно, тем, кто привык к веб интерфейсам современных почтовых систем, функционал кажется не очень, но сопоставимое удобство с почтой яндекс или gmail локально никак не получить.

      • Аватар
        Виктор

        Наверно, неправильно выразился)
        Имап да, удобно, оставил только его.
        Я про тот описанный вами случай, когда ктото удалил письмо и говорит что не получал. Это письмо положилось в all_in, но вот уже найти там будет его довольно сложно, особенно без вводных - даты. Как в этом случае вы ищете удаленные письма дабы восстановить их ?

        • Zerox

          Почему сложно найти? Подключаешь ящик all_in по imap и ищешь все, что надо. Можно быстро по логу посмотреть, когда и от кого было письмо, чтобы по ящику не искать.

        • Аватар
          Виктор

          Не понял в чем прикол - настроил что почта работает по ssl/tls, т.е. по логике для сервера достаточны порты: 465, 993, 53, но если не открыты 25, 143, почта не приходит на сервер и соотв. к клиенту, с чем это может быть связано?

  33. Аватар

    Почтовичок поднят по этой статье и робит как барбос...! Сейчас руководство озадачило интегрировать почту в crm битрикс. Точнее сказать подключить почту к битрикс, чтоб сотрудники могли отправлять письма прям с сайта. На просторах инета либо нет нормального мануала, либо я плохо ищу.

    • Zerox

      Так а что там интегрировать? Надо создать ящики для пользователей и внести настройки для подключения к ящикам в битрикс.

      • Аватар

        У нас компания example.com, у ящиков имена user1@example.com, user2@example.com. То есть в main.cf постфикса для интеграции ничего дописывать не надо...? Я где-то нашёл что для работы постфикса, битрикс использует msmtp.

  34. Аватар

    Вы пишете:
    "Дальше редактируем конфигурационный файл postfixadmin.
    # mcedit /var/www/html/postfixadmin/config.inc.php"

    А надо все настраиваемые параметры вынести в config.local.php, они потом перекроют данные из config.inc.php. Пользователь BORIZZ.K уже упоминал об этом, но, вероятно, вы упустили его комментарий.

    Если я правильно понимаю, связано это с последующим обновлением файлов. В вашем случае config.inc.php будет может быть перезаписан при обновлении и настройки оттуда потеряются. К тому же при первом тестовом прогоне в postfix admin setup checker при отсутствии config.local.php явно указывается, что рекомендуется именно использовать именно config.local.php вместо config.inc.php, я только вчера этот шаг проходил. У себя сделал как рекомендуется, postfixadmin успешно установился.

    Хорошая статья, хотелось бы чтобы в ней все было правильно

  35. Аватар

    День добрый.

    Не нашел в статье описания того, как отравлять почту через сторонний сервер, к примеру, yandex или gmail.

  36. Аватар
    Владимир

    Отличная статья. Но как обычно бывает, этого мало. Мне бы хотелось при получении нового письма запускать свой скрипт, который кладет {from} {to} {subj} и абсолютную ссылку на диске на само письмо в ящике в таблицу SQL.
    Вопрос в том, как и где перехватывать событие входящего письма, в master.cf что-то добавить? И наверное самое главное как получить в postfix абсолютную ссылку на файл с самими письмом. Или же о месте хранения письма на диске знает только dovecot?

    Еще вопрос. Юзер отправляет письмо через например тандербёрд, а мне надо в это письмо добавить информацию и отправить дальше адресату.
    Вот такие хотелки.

  37. Аватар
    Виктор

    Столкнулся со странной траблой: Тандербёрд может получать письма по 993(ssl/tls), но вот отправлять - только по starttls(587).
    Вот что в логе maillog при попытке отправки по 465(ssl/tls):

    Jan 14 16:49:53 mail postfix/smtps/smtpd[8458]: Anonymous TLS connection established from unknown[176.14.155.205]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    Jan 14 16:50:15 mail postfix/smtps/smtpd[8458]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Jan 14 16:50:15 mail postfix/smtps/smtpd[8458]: warning: mysql:/etc/postfix/mysql/virtual_alias_maps.cf lookup error for "my_mail@gmail.com"
    Jan 14 16:50:15 mail postfix/smtps/smtpd[8458]: NOQUEUE: reject: RCPT from unknown[176.14.155.205]: 451 4.3.0 : Temporary lookup failure; from= to= proto=ESMTP helo=

    Сам клиент с ошибкой:
    4.3.0 : Temporary lookup failure.

    vi /etc/postfix/mysql/virtual_alias_maps.cf:
    hosts = localhost
    user = postfix
    password = pass
    dbname = postfix
    query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

    Может, дело в самоподписанном сертифе? У меня есть боевой, но его я бы хотел внедрить после полной настройки сервера.
    Заранее спасибо за любую помощь!

    • Zerox

      Нет, дело не в сертификатах. У вас конкретная ошибка доступа к базе данных:

      connect to mysql server localhost: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

      Подключение к базе через postfix идет как раз в момент отправки. И это подключение не работает по какой-то причине. А в dovecot все ок, поэтому вы получаете почту, но не можете отправить. Скорее всего где-то ошибка.

      • Аватар
        Виктор

        Отправить могу c starttls.
        Не могу по ssl/tls - возникает ошибка, в логе.
        Насколько безопасно пользоваться Starttls?

        • Zerox

          Полностью безопасно. Это более современный и безопасный способ, который пришел на смену sll/tls.

          • Аватар
            Виктор

            Но шифрование происходит с помощью сертификатов, верно же?
            Т.е. достаточно на сервере портов 22, 25, 143 (поп3 не хочу), 53удп, остальное закрываю?
            Спасибо вам большущее за ваш труд!

            • Аватар

              Виктор , приветствую !
              как у вал получилось чтобы thunderbird мог коннектится через 993 imap ? у меня только по 143 , хотя сервер слушает 993 порт.

              • Zerox

                Не понял, в чем проблема вручную указать нужный порт?

                • Аватар

                  Когда пытаюсь подключится через Thunderbird :

                  IMAP Имя сервера 993 SSL/TLS зашифрованный пароль
                  SMTP Имя сервера 465 SSL/TLS зашифрованный пароль

                  Вылетает ошибка : Thunderbird не удалось найти настройки для вашей учтеной записи почты.

                  Лог на сервере :
                  mx1 postfix/smtps/smtpd[23336]: warning: TLS library problem: 23336:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:640:

    • Аватар

      Виктор , приветствую !
      как у вал получилось чтобы thunderbird мог коннектится через 993 imap ? у меня только по 143 , хотя сервер слушает 993 порт.

  38. Аватар

    Настроил второй почтовый сервер по данной инструкции оба в продакшене и отлично работают. Все DNS записи настроены так, что mail-tester показывает 10/10. Но беда вот в чём. Писем может не быть по часу, а потом как прорыв. Штук 20 разом вываливается. Дело в том, что сервер в дата центре за бугром. В Голландии. Из-за отдалённости их канал в 100 м/бит доходит до Владивостока уже примерно 10 м/бит. Так как сотрудники жалуются уже в тот момент когда почта сыпется, то я не могу отследить по логам проблему. Проблема ли в провайдере или в каком-то зависании одного из пакетов (postfix, dovecot)...?

    • Zerox

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

  39. Аватар

    @Zerox
    Приветствую ! Подскажите пожалуйста , вроде все настроил , вроде почта отправляется , но письмо не получаю.

    Вот лог :
    : connect from unknown[10.10.12.11] Jan 12 11:29:31 mx1 postfix/smtpd[30960]: Anonymous TLS connection established from unknown[10.10.12.11]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    Jan 12 11:29:32 mx1 postfix/smtpd[30960]: 16309360590: client=unknown[10.10.12.11], sasl_method=PLAIN, sasl_username=test@test.ru
    Jan 12 11:29:32 mx1 postfix/cleanup[30982]: 16309360590: message-id=
    Jan 12 11:29:32 mx1 postfix/qmgr[30548]: 16309360590: from=, size=729, nrcpt=3 (queue active)
    Jan 12 11:29:32 mx1 postfix/smtp[30986]: 16309360590: enabling PIX workarounds: disable_esmtp delay_dotcrlf for mgw.gov.kz[91.214.42.11]:25
    Jan 12 11:29:32 mx1 postfix/smtpd[30960]: disconnect from unknown[10.10.11.14]
    Jan 12 11:29:32 mx1 postfix/smtp[30986]: 16309360590: to=, relay=mgw.test.ru[91.213.43.11]:25, delay=0.66, delays=0.39/0.02/0.17/0.07, dsn=2.0.0, status=sent (250 2.0.0 00C5gVtM004122-00C5gVtN004122 Message accepted for delivery)
    Jan 12 11:29:32 mx1 postfix/qmgr[30548]: 16309360590: removed

  40. Аватар

    @Zerox
    Приветствую !
    поднял postfix сервер , теперь пытаюсь проверить через webmail(roundecube) работоспособность почты отправив письмо на другой внутренний адрес , получаю ошибку
    SMTP ошибка (-1): Сбой соединения с сервером.

    cat /var/log/maillog

    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: warning: cannot get RSA private key from file /etc/postfix/certs/private.pem: disabling TLS support
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: warning: TLS library problem: 7967:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/postfix/certs/private.pem','r'):
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: warning: TLS library problem: 7967:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: warning: TLS library problem: 7967:error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib:ssl_rsa.c:633:
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: connect from localhost[127.0.0.1]
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: warning: Wrapper-mode request dropped from localhost[127.0.0.1] for service submission. TLS context initialization failed. For details see earlier warnings in your logs.
    Jan 10 11:32:22 mx1 postfix/submission/smtpd[7967]: disconnect from localhost[127.0.0.1]

    В чем может быть причина ?

    • Zerox

      Ошибка:
      cannot get RSA private key from file /etc/postfix/certs/private.pem

      Вот этого файла нет /etc/postfix/certs/private.pem либо к нему нет доступа.

      • Аватар

        [root@mx1 certs]# ll
        итого 8
        -rw-r--r-- 1 root root 1704 янв 6 14:18 private.key
        -rw-r--r-- 1 root root 1367 янв 6 14:18 public.pem
        [root@mx1 certs]#

        • Zerox

          У вас в конфиге указан private.pem а в папке лежит private.key. Имена разные.

          • Аватар

            да исправил спасибо , теперь нет ошибки ,

            появились такие ошибки еще.

            mx1 postfix/pipe[1631]: CBF223617F2: to=, relay=dovecot, delay=0.8, delays=0.72/0.02/0/0.07, dsn=4.3.0, status=deferred (temporary failure)
            Jan 10 12:07:12 mx1 postfix/pipe[1634]: CBF223617F2: to=, relay=dovecot, delay=1.6, delays=0.72/0.03/0/0.82, dsn=4.3.0, status=deferred (temporary failure)
            Jan 10 12:07:12 mx1 postfix/pipe[1630]: CBF223617F2: to=, relay=dovecot, delay=2, delays=0.72/0.01/0/1.3, dsn=4.3.0, status=deferred (temporary failure)

            • Zerox

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

              • Аватар

                хорошо понял , и есть такие вопросы,

                1. Обязательно ли должно быть название юзера "vmail" , или можно его по другому назвать , к примеру mailadmin ??
                2. И как можно сделать чтобы клиенты могли подключится через "зашифрованный пароль" (Thunderbird ) , вашем примере указан "обычный пароль".

                Спасибо заранее.

                • Zerox

                  1. Пользователь может быть любой, главное поменять его имя и id во всех местах, где оно указано.

                  2. Это не знаю, не разбирался. Если я правильно понимаю, когда подключение по tls, весь трафик и так шифруется, в том числе передача пароля.

                  • Аватар

                    cat /var/log/dovecot/lda-errors.log

                    lda(test@test.ru): Fatal: setgid(1000(sudo) from userdb lookup) failed with euid=1000(mailadmin), gid=1001(mailadmin), egid=1001(mailadmin): Operation not permitted (This binary should probably be called with process group set to 1000(sudo) instead of 1001(mailadmin))

  41. Аватар
    Аноним

    ПРивет! Отличная статья! Всё заработало, почти) Почему то нет папки Inbox никак не появляются входящие письма, что может быть не так?

  42. Аватар

    А у тебя нет статьи, в которой расписывается как организовать поиск писем старше к примеру 30-ти дней в папках all_in и all_out, затем то, что старше, архивировать и складывать куда-нибудь, а после удачной архивации вычищать папки.

  43. Аватар
    Сергій

    Postfix TLS over SMTP – RCPT TO prompts renegotiation then 554 5.5.1 Error: no valid recipients.

    если кого-то заинтересует проверка SMTP(SSL) 465 порт стандартним способом в данной конфігурации:

    openssl s_client -connect mail.lol.com:465
    HELO lol2.com
    MAIL FROM: lol@lol2.com
    250 2.1.0 Ok
    rCPT TO: lol@lol1.com
    554 5.7.1 : Recipient address rejected: Access denied

    1) команду RCPT печатать маленькой литерой rCPT (большая визовет повторную проверку сертификата і мусор:
    RENEGOTIATING
    depth=0 /C=AU/ST=NSW/L=Sydney/O=Self-Signed Key! Procees with caution!/OU=Web Hosting/emailAddress=postmaster@lol.com
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 /C=AU/ST=NSW/L=Sydney/O=Self-Signed Key! Procees with caution!/OU=Web Hosting/emailAddress=postmaster@lol.com
    verify return:1

    2) более важное, проверка получателя станет на грабли. Если таки хотите, чтоб SMTP(SSL) принимал почту не только после SASL аутентифікації, а также, как и настроений тут SMTP на 25 порту, то следует в конфиге /etc/postfix/master.cf сделать так:

    в секции smtps заменить reject на reject_unauth_destination (как в основном конфиге postfix), будет виглядеть так
    smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

    Тоже касается и другого сервера, что слушает на 587 порту в конфиге /etc/postfix/master.cf

    • Аватар
      Сергій

      добавлю, что reject_unauth_destination, вместо reject, позволит работать в почтовіх клиентах не столько с 25, но и 465 портом, а также с 587, если сделать тоже для submission

      • Аватар
        Сергій

        стал заложником своих коментариев :)
        так вот, причина моих исканий находилась где-то тут, в несостоявшихся рукопожатиях протокола ssl:
        https://serverfault.com/questions/806141/is-the-alert-ssl3-read-bytessslv3-alert-bad-certificate-indicating-that-the-s

        когда я решил продолжить експерименті с sasl-автентификацией, то обнаружил, что она уже работает на текущем аке ??
        сделал новий ак, и снова стал на те грабли с рукопожатием.
        сделал третий и уже все прошло нормально.

        Наверное где-то в процессе ssl сам с собой догорился между ПК и сервером.
        Посмотрю что будет дальше. Сейчас сервер работает на настройках, что указани в статье.

  44. Аватар
    Сергій

    если соберетесь переработать эту статью по новому, обратите внимание на проблему Довекота с SElinux и ее решение без выключения последнего:

    doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 16: ssl_cert: Can't open file /etc/postfix/certs/cert.pem: Permission denied

    • Zerox

      А стандартный подход с формированием готового модуля с помощью audit2allow не работает?

      • Аватар
        Сергій

        к сожелению нет:

        # ausearch -c 'doveconf' --raw | audit2allow -M mydoveconf
        # cat mydoveconf.te
        module mydoveconf 1.0;
        require {
        type postfix_etc_t;
        type dovecot_t;
        class file { open read };
        }
        #============= dovecot_t ==============
        allow dovecot_t postfix_etc_t:file { open read };

        # semodule -v -i mydoveconf.pp
        Attempting to install module 'mydoveconf.pp':
        Ok: return value of 0.
        Committing changes:
        Ok: transaction number 0.

        # semodule -l | grep mydoveconf
        mydoveconf 1.0

        doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 16: ssl_cert: Can't open file /etc/postfix/certs/cert.pem: Permission denied

      • Аватар
        Сергій

        как я дружил эту конфигурацию с Selinux.
        После того, как убедился, что все работает без Selinux сделал следующее:

        1) отказался от использования домашних каталогов postfix-а для хранения сертификатов и сгенерировал самоподписаный сертификат и ключ в другом предназначеном для этого каталоге
        # mkdir -p /etc/ssl/mail
        # openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/mail/cert.pem -keyout /etc/ssl/mail/key.pem
        и указал новое место в /etc/postfix/main.cf и /etc/dovecot/conf.d/10-ssl.conf (или что ви там используєте вместо него).
        Если у вас подписаный доверенным центром сертификат то вариант или скопировать, или переместить, каждая из этих команд (cp, mv) имеет разное влияние на контекст Selinux, поэтому важно, чтобы неправильный контекст не был перемещен на новое место, посмотреть контексты ls -Z /путь к файлу.

        2) После п.1 Довекот не стартанет уже по другой причине:
        Can't open log file /var/log/dovecot/main.log: Permission denied
        Генерируя для этого случая политику Selinux, как будет показано ниже, в выводе команды в коментариях к файлу было пердложено альтернативноє решение. Оказалось, что контекст по умолчанию для файла правильный, а текущий нет, чтоб снять вопрос нужно вместо создания новой политики просто сбросить текущий контекст этого файла:
        #!!!! The file '/var/log/dovecot/main.log' is mislabeled on your system.
        #!!!! Fix with $ restorecon -R -v /var/log/dovecot/main.log
        Что я и сделал:
        # restorecon -R -v /var/log/dovecot/main.log

        3) Теперь Довекот под Selinux нормально запустится, но это еще не конец. У довекота, как мы помним, есть дружки imap pop3 sieve lmtp, и они тоже настаивают на своих правах. Сделал так, запустить чтение лога аудита Selinux в терминале:
        # tail -f /var/log/audit/audit.log | grep denied
        И начал юзать эти демоны. ПОП3 меня не интересовал, его не юзал, а вот по IMAPS подключился почтовим клиентом. И первое что увидел, что нет всех папок, а отправка писем, удаление... натыкаеться на сообщение, переданое клиенту, про какой-то системный сбой на сервере. Смотрим наш ранее запущеный лог в терминале и видим кучу неразрешенних доступов для имап. Вообще, то там может быть еще кто-то, кроме имап, на это надо посмотреть, нас интересует запись типа comm="imap". Этот парень в кавичках и есть ущемленный в правах гражданин системы. Чтоб это исправить сгенерируем новый модуль с политикой:
        # ausearch -c 'imap' --raw | audit2allow -M myimap
        Выше я писал, что команда может сгенерировать в коментариях и удачную алтернативу новой политики, такое решение я обраружил читая файл вывод этой команды.
        Далее инталируем новую политику:
        # semodule -v -i myimap.pp
        Далее ребутим систему или перечитываем политики (я ребутил для надежности).
        Запускаем Selinux (лучше его на постоянно включить, чтоб не забить) и запускаем чтение лога аудита и тестируем дальше и делаем все аналогично, только смотрим на записи comm=.

        4) Потом вспомнил, что кроме Довекота с товарищами есть еще и сайты, для управления всем этим. Так и есть, Postfixadmin не работает. Смотрим снова наш лог аудита, а там тоже ущемление в правах:
        type=AVC msg=audit(1577427201.508:145): avc: denied { write } for pid=2308 comm="httpd" name="templates_c" dev="dm-0" ino=34051585 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir permissive=0
        И как раньше:
        # ausearch -c 'imap' --raw | audit2allow -M myhttpd
        # semodule -v -i myhttpd.pp
        ребут

        Этого для моих потребностей хватило, но если будут проблеми, то удобно читать лог аудита запретов в реальном времени и генерирвать на его основе новые политики или обновлять старые. Лог аудита можно исполлзовать для генерации обновлений созданой политики или инсталироватьо новую. Если лог потрете, то имя политики уже надо будет изменить, поскольку при генерации будут учтены лише те случаи, что записаны в логе, иначе все придется повторить по новой

        • Zerox

          А стоит ли вообще вся эта возня с selinux потраченного на нее время и неудобства? Я лет 10 администрирую почтовые сервера и у меня ни разу не было ситуации, где бы мне SElinux реально помог.

          • Аватар
            Сергій

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

          • Аватар
            Сергій

            кроме того, я тут расписал саму технику, а по сути это 5-6 команд для данного случая

        • Аватар
          Сергій

          в предпоследней команде опечатка, нужно:
          # ausearch -c 'httpd' --raw | audit2allow -M myhttpd

  45. Аватар
    Сергій

    >>И небольшой штрих в завершении настройки.

    # chown vmail. /var/run/dovecot/auth-master
    Уже не помню, зачем это было нужно, запись осталась в черновиках. Знаю только, что какая-то ошибка всплывала без этого.<<

    связано с несоответствием группи в файле /etc/dovecot/conf.d/10-master.conf. нужно dovecot.

    статья полезная, но свалівание в кучу всех настроек Довекот усложняет разбор полетов

    • Zerox

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

    • Евгений

      А ещё перед выполнением этой команды "chown vmail. /var/run/dovecot/auth-master" нужно создать сам файл auth-master потому что его там нет

  46. Аватар

    Zerox добрый день.
    Про попытке подключения к 465 порту клиентом в логах вижу следующее. В какую сторону смотреть?

    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: SSL_accept:SSLv3 flush data
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: Anonymous TLS connection established from unknown[*.*.*.*]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: xsasl_dovecot_server_create: SASL service=smtp, realm=(null)
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: name_mask: noanonymous
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: xsasl_dovecot_server_connect: Connecting
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: warning: SASL: Connect to private/dovecot-auth failed: No such file or directory
    Dec 11 17:03:30 srv-postfix-001 postfix/smtps/smtpd[43745]: fatal: no SASL authentication mechanisms
    Dec 11 17:03:31 srv-postfix-001 postfix/master[11128]: warning: process /usr/libexec/postfix/smtpd pid 43745 exit status 1
    Dec 11 17:03:31 srv-postfix-001 postfix/master[11128]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Dec 11 17:03:31 srv-postfix-001 postfix/master[11128]: warning: process /usr/libexec/postfix/smtpd pid 43745 exit status 1
    Dec 11 17:03:31 srv-postfix-001 postfix/master[11128]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

  47. Аватар

    Zerox , добрый день!
    Воспользовался этим руководством для того чтобы завести свой почтовый сервер с самого что ни на есть круглого нуля.
    На этапе попытки авторизоваться по IMAP получаю фигу.
    Т.е Либо при добавлении почтового ящика в Thunderbird, либо при попытке авторизоваться в Roundcube , либо при попытке авторизоваться через телнет локально получаю одну и ту же ошибку.
    # Предварительно было сделано
    auth_verbose = yes and auth_debug = yes in dovecot.conf (согласно официальному вики по довекот)

    В логе dovecot/debug.log рисуется ошибка:
    auth: Debug: client passdb out: FAIL3user=root@domain.ru>original_user=root
    imap-login: Debug: Ignoring unknown passdb extra field: original_user

    При этом:
    В postfixadmin доступ есть, создавать ящики , домены, менять пароли.
    В phpmyadmin тоже все пучком, базы создал, все прописал.
    Roundcube с шаманством но таки завелся.
    A и MX записи есть, буревестник находит параметры сервера , но авторизоваться так же не может.

    Пожалуйста дайте совет, куда смотреть, что копать.
    Делал все по инструкции, перепроверил 3жды все конфиги.
    За исключением юзера vmail , он с уидом 2000 и группой 2000

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

    • Аватар

      К своему стыду сам нашел проблему и сам её решил.
      В dovecot.conf отсутствовала целая секция
      passdb {
      args = /etc/dovecot/dovecot-mysql.conf
      driver = sql
      }

      Дописал , рестартанул довекот и все равно получил ошибку.
      Но уже другую
      auth: Debug: master userdb out: FAIL

      • Аватар

        Удалось победить и эту ошибку.
        Нашел ошибку в конфиге dovecot-mysql.conf
        Удалось таки пройти авторизацию по imap и в буревестнике и в roundcube.
        К слову roundcube последней версии 1.4.1 не хотел корректно отображать дерево папок.
        Была только папка входящее.
        Для решения этой проблемы нужно в главной секции описания добавить слово inbox

        namespace inbox{
        type = private
        separator = /
        prefix =
        inbox = yes

        Может кому то поможет.

        • Zerox

          Спасибо за информацию. У меня в планах полное обновление статьи на базе Centos 8. Надеюсь, до нового года успею сделать.

  48. Аватар

    Всё супппер...! То, что знал в теории, применил на практике опираясь на эту статью! А как можно реализовать группы рассылок...? К примеру продажники, отдел ВЭД, бухгалтерия и т.п...?

    • Zerox

      В postfixadmin создается алиас и в него добавляются все получатели.

      • Аватар

        Ок, с этим понятно. А есть возможность создать алиса к примеру all@чего-то-там.ru так, что бы следующий заведенный юзер автоматически попал в этот алиас...?

        • Zerox

          Идею понял, но по дефолту в postfixadmin нет автоматической возможности заводить всех новых пользователей в общий алисас. Я руками в таких случаях добавлял. Может просто невнимательно смотрел. Не припоминаю такой возможности.

          • Аватар

            Ну да ладно, у меня в конторке 35 +/- 5 человек, не обломит ручками добавить пользователя. В любом случае тебе огромное спасибо за статейки. Для меня, как плавно перерастающего лютого эникейщика в скромного сисадмина, который максимально хочет уйти с винды - это клад...! С меня пиво...=)

  49. Аватар
    Володя

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

  50. Аватар

    У меня по пути /var/www/html/webmail/plugins/managesieve/ нет файла config.inc.php, но зато есть файл config.inc.php.dist что с ним делать...? Просто изменить расширение...?

  51. Аватар

    А есть какая-то настройка, когда лицензия куплена по минимуму, а ящиков создано больше и ещё мультидоменность?

    • Zerox

      Сам KAS не проверяет соответствие лицензии и количество обслуживаемых ящиков. Я даже как-то запрос в ТП на эту тему писал. Следить за соответствием - ваша задача, со всеми вытекающими :)

  52. Аватар

    спасибо за статью, но совсем не понятно как будет организована связка с KAS, можете добавить в статью как настроить связку с Kaspersky AntiSpam

    • Zerox

      В KAS подробная документация по интеграции с postfix. Там все понятно, не вижу смысла дублировать эту информацию по конкретному продукту в статье общего назначения.

  53. Аватар

    При очередной установке вдруг обнаружил - в статье у Вас в конфиге /etc/opendkim.conf селектор указан:
    Selector default (хотя при генерации ключей был: mail)

  54. Аватар

    Добрый день!
    У меня все работает. Теперь необходимо еще один домен добавить. Сможете помочь?

    • Zerox

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

  55. Аватар

    Спасибо большое за Ваши статьи и ответы в комментариях!
    Пытаюсь сейчас выбрать между двумя вариантами настройки почты (на своем ВНЕШНЕМ почтовом сервере или на своем почтовом поддомене, расположенном на отдельном (от сайтов) IP.
    Итак, как я понял алгоритм:
    Схема 1 (на своем внешнем отдельном почтовом сервере):
    1. Поднимаем сервер 1 - создаем на нем почтовый (технический) поддомен, например, mail.site1.ru на IP1
    в DNS указываем: A запись site1.ru - IP1, A запись mail.site1.ru - IP1, MX запись - mail.site1.ru
    настраиваем на сервере: postfix + dovecot + mysql база + postfixadmin + dkim
    имя хоста и обратную зону указываем: mail.site1.ru
    настраиваем также SSL для site1.ru и mail.site1.ru
    2. Поднимаем сервер 2 - для сайтов - размещаем на нем site2.ru на IP2
    в DNS указываем: A запись site2.ru - IP2, MX запись - mail.site1.ru
    ОПЯТЬ? настраиваем на сервере: postfix + dovecot + mysql база + postfixadmin + dkim
    добавляем в main.cf
    relayhost = [mail.site1.ru]:587
    задаем также пароли для доступа к своему SMTP в файле
    /etc/postfix/sasl_passwd в виде
    postmaster@site2.ru:password
    настраиваем также SSL для site2.ru
    имя хоста и обратную зону ОПЯТЬ указываем 1 СЕРВЕРА?: mail.site1.ru

    Схема 2 (на своем почтовом поддомене, расположенном на отдельном IP1 на том же сервере с сайтами, имеющими IP2):
    в DNS указываем: A запись site.ru - IP1, A запись mail.site.ru - IP2, MX запись - mail.site.ru
    имя хоста и обратную зону указываем: mail.site.ru

    В чем ошибки или недостатки в схемах?

    • Zerox

      Я не понял, зачем в схеме 1 почтовый сервер поднимается на сервере 2 с сайтом. Он там не нужен. Обычно сайты умеют, а если не умеют, надо научить, использовать внешний smtp сервер. Если не получится, то достаточно одного postfix с пересылкой всей почты на первый сервер.

      • Аватар

        Это для системной почты. Дело в том, что когда я ранее, настраивая почтовый сервер на том же IP и том же сервере, что и сайты, так и не смог добиться, чтобы системная почта (по обновлению сервера и т.д.) дублировалась на внешний ящик. Добавление алиаса внешнего ящика для системной почты в /etc/aliases у меня почему-то не срабатывало. Поэтому создал через postfixadmin внешний ящик root@site.ru. Возможно наверное, чтобы не поднимать также почтовый сервер на сервере 2 по 1 схеме, можно создать этот же внешний ящик root для 2 сервера на 1 сервере (почтовом), но я не думал, что это возможно.

        • Zerox

          Это возможно. Локальный postfix может отправлять почту через внешний smtp сервер.

          • Аватар

            Никак не получается «добить» почту! Все настроил по схеме 1 (см выше), добавил также все другие DNS записи (spf, DKIM, DMARK, CAA). Внешняя почта и для ящиков сервера 1, и сервера 2 (через postfixadmin) работает отлично (10 из 10).
            А внутренняя локальная из консоли для вебсервера на site2.ru – «хоть ты тресни» дает ошибку:
            relay=mail.site1.ru[IP1]:587, delay=0.59, delays=0.05/0.03/0.42/0.09, dsn=4.7.1, status=deferred (host mail.site1.ru[IP1] said: 450 4.7.1 Client host rejected: cannot find your hostname, [IP2] (in reply to RCPT TO command))
            При том, что у обоих серверов и обратные зоны PTR, и hostname и MX записи одинаковые (mail.site1.ru). В DNS у сервера 1 (почтового) A запись для mail – IP1, у сервера 2 (веб) A запись для mail также – IP1.

            • Zerox

              Тут все очевидно. Ошибка указана конкретная:
              rejected: cannot find your hostname
              Либо разбирайтесь, почему имя домена не ищется, либо отключайте эту проверку.

              • Аватар

                Можете еще раз уточнить для моей схемы 2:
                Для 1 почтового сервера site1.ru на IP1 все вроде понятно: hostname=PTR= MX запись=mx.site1.ru, в DNS - A запись для поддомена mx указываем - IP1.
                Для 2 вебсервера site2 на IP2 с MX записью тоже понятно - указываем mx.site1.ru, а hostname и PTR какие нужно указывать для 2 вебсервера - тоже mx.site1.ru? И какие тогда указывать A записи для поддомена mx на 2 сервере (на IP1?), но у нас ведь домен для сервера 2 – site2.ru другой – он на IP2 и не будет соответствия IP, PTR, MX!?

                • Zerox

                  За MX, A, PTR записями нужно следить именно на почтовом сервере, который занимается отправкой. На всех прочих серверах - web или каких-то еще, PTR и A записи могут быть любыми. Это не имеет значения.

                • Аватар

                  перепутал немного в комментарии выше - конечно, в схеме 1

  56. Аватар

    Доброго времени суток!
    Выходит такое сообщение, что может быть не так настроено?

    Nov 08 12:26:10 jup postfix/pickup[18503]: 6F07E3408483: uid=0 from=
    Nov 08 12:26:10 jup postfix/cleanup[18505]: warning: mysql:/etc/postfix/mysql/virtual_alias_maps.cf lookup error for "testPN1@yandex.ru"
    Nov 08 12:26:10 jup postfix/cleanup[18505]: warning: 6F07E3408483: virtual_alias_maps map lookup problem for testPN1@yandex.ru -- deferring delivery

    *virtual_alias_maps.cf*
    hosts = localhost
    user = postfix
    password = *******
    dbname = postfix
    query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

    • Zerox

      Проверяйте настройки доступа в mysql к таблице с алиасами. Postfix не может получить из нее информацию, о чем и пишет.

      • Аватар

        Проверил подключение к таблице с алиасами под пользователем postfix. Запрос обрабатывается и данные выводятся. Куда можно еще копать?

        • Zerox

          Я думаю, где-то описка, опечатка. Проверяйте все внимательно. Postfix четко пишет, в чем проблема, надо копать в этом направлении.

  57. Аватар

    Нужна помощь. При попытке подрубиться к серверу IMAP периодически слетает соединение по SASL. В логе dovecot единственная ошибка Error: namespace configuration error: Duplicate namespace prefix: ""
    Везде говорят что надо проверить наличие строки inbox = yes в dovecot.conf или в 15-mailboxes.conf. она у меня присутствие. Где еще посмотреть?

    Так есть ошибка NOQUEUE: reject: RCPT from relay.wildberries.ru[...]: 451 4.3.0 что тут-то может быть причиной. В сети как-то размыто

  58. Аватар

    В практике не встречалось задача mx сервер держать на другом сервере, вроде данной схемы https://wiki.dieg.info/postfix_backup_mx ?

    • Zerox

      Делал так. Тут нет ничего сложного. Просто поднимается еще один сервер в другом месте и ему прописывается меньший приоритет в mx записи. Условно, у основного 10, у резервного 20. При недоступности основного, почта отправляется на резервный.

      • Аватар

        имеется в виду у клиентов чаще настроено с резервом или все на одном )

        • Zerox

          Все на одном. Я несколько раз делал резервные mx, но реально с ними больше проблем, чем пользы. Даже если основа ляжет и вся почта посыпется на резерв, юзеры ее оттуда без перенастройки не получат. Потом, когда поднимается основа, придется как-то перекидывать почту с резерва на основу, которая успела нападать.

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

          Резервные mx это для сложных распределенных систем с балансировщиками, чтобы можно было быстро людей переключить на резервный сервер автоматически. Чтобы работа была комфортная, нужна постоянная синхронизация почты между этими двумя серверами.

          В общем, это решение для крупного enterprise, где даже минимальный простой недопустим. Всем остальным смертным это слишком дорого и хлопотно.

          • Аватар

            ясно, спасибо за ответ.

          • Аватар
            Владимир

            Zerox, с резервного mx почту можно забирать fetchmail! Раньше так делал, с одного почтового сервера забиралась и локальный почтовый. Сейчас думаю резервный в провайдера оставить и указать приоритет, а основной как заработает, fetchmail заберет и разложит в папки.

            • Zerox

              Да, конечно можно. Я использовал fetchmail, но это все равно лишние заботы и хлопоты. Обхожусь без резервного MX. Все же почта не так критична к непрерывной работе. Она и в штатном режиме иногда ходит с большими задержками.

  59. Аватар

    Дошел до запуска установки postfixadmin http://192.168.1.8/postfixadmin/setup.php - получаю: $CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = '12345678'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'root@zeroxzed.ru'; $CONF['encrypt'] = 'md5crypt'; $CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES'; Что я делаю не так?

  60. Аватар

    Вопрос номер 1: так все таки как правильно указывать в postfix'e в main.cf: virtual_transport = dovecot или virtual_transport = lmtp:unix:private/dovecot-lmtp ? И зачем в dovecot'e в 10-master.conf поднимать lmtp если в postfix'e в main.cf про lmtp ни слова?
    И вопрос номер 2: зачем в dovecot'e в 10-master.conf нужен слушатель unix_listener auth-master ? Во многих руководствах про него ни слова. Есть же unix_listener auth-userdb и unix_listener /var/spool/postfix/private/auth.

  61. Аватар

    Подскажи, почему могут не создаваться каталоги с почтовыми ящиками, куда копать. Сделал по твоей документации. В логах maillog: SSL_accept error from unknown -1. В Outlook ящик создался. Письма не уходят и не приходят.

  62. Аватар

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

    • Zerox

      Не понял вопрос. Что значит организована работа? Там никакого обмена нет. Просто вся входящая и исходящая почта в момент поступления на сервер копируется в эти ящики.

      • Аватар

        Я можно сказать про это и спрашивал. Т.е. из каждого ящика она просто копируется или наоборот есть фильтр при помощи которого в ящики копируется или как-то по другому.

        • Zerox

          Никаких нюансов нет, просто в момент поступления на сервер на этапе передачи письма в ящик пользователя, копия кладется в ящик all. В последствии эти письма никак не связаны. Никакие фильтры почты в ящике пользователя не участвуют в копировании. Это все делается раньше в момент обработки входящего письма.

  63. Аватар
    Кирилл

    Здравствуйте, у кого получилось победить ошибку по авторизации imap на веь интерфейсе roundcube ?
    не получается пройти авторизацию.
    Плюс в инструкции написано после конфигурации roundcube перейти на веб морду и авторизоваться на почтовый ящик. но не указанно что делать когда ситуация показанная на фото по ссылке: https://drive.google.com/open?id=1uZ-fdQTMBZzmM2dNIYK0b62HExonquhV
    Говорит что схема БД не создана ? Её создать ? Веди в инструкции это не написано ? И не понятно как roundcube будет общаться с базой данных postfix ?
    Dovecot запущен, статус отличный, ошибок нет. Письма отправляются, по к thunderbird не подключается, как понять ошибка в Dovecot если на самом деле он запущен и работает ?
    Какие порты нужно прокинуть на шлюзе (на сервере по инструкции от Автора данной инструкции порты прокинуты в iptables) ? Может из за этого не подключается ? Но ведь подключения делаю в той же подсети что и сервер.
    Могут эти неполадки вызваны тем что по инструкции необходимо в одном месте собирать Dovecot но штатно он разделён. Может быть в этом проблема ? Так как один из участников оставлял комментарий что Dovecot оставил по-умолчанию таким какой есть.
    Но смущает что у Автора всё получается, значит ошибка у меня, но понять не могу где?

    • Zerox

      Внимательно все проверяйте. Статья рабочая, я по ней сам настраиваю. Уже по скриншоту я вижу, что у вас не инициализирована база данных. Там же рядом кнопка для этого. В самом низу видно, что скрипт не может подключиться к imap серверу на 143 порту.

      • Аватар
        Кирилл

        Да просто я растерялся) в статье про инициализацию не написано вот и задумался может автоматически должна обратиться ? А так я это понял и инициализация после нажатия соответствующей кнопки прошла успешно, а вот поводу imap и 143 порта, буду смотреть, спасибо большое)

      • Аватар
        Кирилл

        А по поводу как dovecot обращаеться к базе postfix, правильно понимаю что он использует файл dovecot-mysql.conf ?

      • Аватар
        Кирилл

        После того как закомментировал все правила файла imap в папке "/etc/dovecot/conf.d/", изменились показатели, теперь неудачная попытка авторизации по веб морде а в консоли вот что пишет:
        https://drive.google.com/open?id=1uTyI_6aQ9UPmnEZZiZZ0GvyNXBFP41Bc
        Возможно проблема получается в файле dovecot-mysql.conf

      • Аватар
        Кирилл

        И в правду была ошибка, простите пожалуйста за не внимательность, но удачно попытки авторизоваться нету, опять ошибка по IMAP: https://drive.google.com/open?id=1p_iTGKIGms-6LqJM4gMEu7NYNCfCNELa
        Может быть проблема в uid and gid ? Так как при настройке uid and gid 1000 не позволил создать ссылаясь на ранее уже созданный и присвоил и создал 2000 во всех конфигурациях, в этом не может быть проблема ? И если в этом то как можно "убить" 1000 что бы заново его создать исправно под эти намерения ?

      • Аватар
        Кирилл

        В итоге удалось авторизоваться на веб морде, но теперь следующая ошибка:
        https://drive.google.com/open?id=1gA2nvdeQpN3wKOEHEvNe1RRm6kUohBGE

      • Аватар
        Кирилл

        Всё, разобрался! Обажаю тебя Автор статьи, как всегда воистинну. ты прав и всё верно и правильно.
        В случае с моей проблемой, нужно удалить полностью папку в dovecot/conf.d/ так как обращается raoundcobe постоянно именно к ним. Буду тестировать дальше, если что напишу. Спасибо ещё раз!

  64. Аватар

    Всем привет!

    Настроил у себя во многом по данному мануалу на CentOS 7.6.1810:

    dovecot 2.2.36 + exim 4.92 + maridb 5.5.60 + Apache/2.4.6, PHP/5.4.16 + SSL(HTTPS)/Let'sEncrypt + RoundCube 1.3.9(+fail2ban для Roundcube/Apache/exim/dovecot) c плагинами:
    - ACL(шаринг папок по imap)
    - managesive (фильтры)
    - password (смена пароля из веб-интерфейса, пароли в БД, в шифрованном виде CRAM-MD5)
    - newmail_notifier (уведомления о новой почте)
    - mobile (мобильная версия веб-интерфейса)

    Конфиг dovecot по отдельным файлам - то, чего автор статьи не любит)

    Может быть, смогу быть кому-то полезным, пока всё свежо в памяти. Проблем было много, приходилось и списки рассылки по dovecot покурить и github по Roundcube почитать, даже написать разработчику (https://github.com/alecpl), но всё удалось победить. У меня всё работает на ура, веб-интерфейс шикарный, привыкаешь очень быстро. Единственное, что не работает - почему-то зависает при нажатии на "Управление папками" в мобильной версии.

    Теперь думаем как постепенно внедрять, убирать почтовые клиенты в компании.
    Папки для общего доступа (ACL) - прекрасный функционал. Когда сотрудник работает с несколькими почтовыми ящиками, некоторые из которых т.н. "общие", то использовать веб-интерфейс затруднительно. Каждый ящик - новая вкладка, везде нужно зайти (хотя есть плагин для автоматической авторизации), сразу всё не видно. А с шарами можно выдать пользователю в личный ящик нужные ему папки с других ящиков, сделав единую точку работы с почтой. Шары, кстати, прекрасно работают и во всех наиболее распространённых бесплатных почтовых клиентах. А если ещё задействовать фильтры для автоматизации - возможности широчайшие. Фильтры позволяют раскладывать письма и по расшаренным папкам, в другие ящики. Проверено.

    Автору огромное спасибо!

    • Аватар
      Кирилл

      Здравствуйте можете подсказать почему у меня не получается авторизоваться на веб интерфейс roundcube по учетке Postfix ?
      И можете привести свои настройки dovecot ?

  65. Аватар

    Подскажите, пожалуйста при связке postfix + roundcube как запретить некоторым пользователям писать письма наружу через вебморду?
    оставить только получение

    • Zerox

      Не думаю, что такое ограничение настроить реально. По сути roundcube это просто imap клиент. Я не знаю, как запретить доступ выборочно на основе imap клиента. Вы можете либо запретить полностью доступ в roundcube, либо самому пользователю в принципе запретить отправку писем. А вот так, чтобы запретить именно через roundcube не знаю, как сделать.

      Теоретически, можно. Если roundcube установлен на том же почтовом сервере, что и postfix с dovecot, то он будет подключаться с адреса localhost к imap серверу. Возможно, с помощью этой информации можно как-то настроить ограничения, но тут надо разбираться и думать. Решение простым точно не будет.

      • Аватар

        Большое спасибо за ответ!
        "либо самому пользователю в принципе запретить отправку писем"
        Выходит, если раундкуб через imap работает, то я не могу добавить в main.cf
        smtpd_sender_restrictions=hash:/etc/postfix/no-out
        --
        no-out
        user@domain REJECT
        --
        у меня, во всяком случае не работает ;/

        • Zerox

          Можете добавить ограничение на отправку через sender_restrictions в postfix. Вероятно, вы где-то ошиблись, поэтому не работает. Я раньше настраивал, но сейчас нет примера под рукой. Можно даже отдельно список доменов завести, на которые отправлять можно, а на все остальные нельзя. На opennet была статья с описанием подобной настройки.

  66. Аватар
    Кирилл

    Здравствуйте, можете пожалуйста обьяснить как правильно указывать/конфигурировать путь для сохранения архивов почт.
    $CONF['domain_path'] = 'YES';
    $CONF['domain_in_mailbox'] = 'YES';
    У Вас получается присвоить путь: Получится следующий путь до ящика, если у вас архив почты будет жить, к примеру, в директории /mnt/mail — /mnt/mail/zeroxzed.ru/root@zeroxzed.ru.

    Но я к сожалению не понимаю как его присваивать $CONF[' /mnt/mail/zeroxzed.ru/root@zeroxzed.ru.'] = 'YES'; ?
    Или так: $CONF['/mnt/mai'] = 'YES';
    $CONF['/mnt/mail/zeroxzed.ru/root@zeroxzed.ru.'] = 'YES'; ???
    Помогите пожалуйста разобраться

    • Zerox

      Вы немного запутались. В конфиге postfixadmin настраивается вариант структуры хранилища почты, а не сам путь к этому хранилищу. Адрес хранилища, в моем случае /mnt/mail указывается в конфигах postfix и dovecot. Смотрите их внимательно, там эти настройки прокомментированы.

  67. Аватар
    Кирилл

    Доброе утро.
    Спасибо большое за подробные мануалы, но я только начинаю администрировать сервера Linux
    И в данном контексте у меня возникли трудности с авторизацией пользователей.
    Пишет что нету соединения по IMAP.
    Дело в том что в начале мануала нужно проставлять как я понимаю пути к директориям хранения созданных почт
    ($CONF['domain_path'] = 'YES';
    $CONF['domain_in_mailbox'] = 'YES';)
    Далее Вы пишите что можно указывать самостоятельный путь (Получится следующий путь до ящика, если у вас архив почты будет жить, к примеру, в директории /mnt/mail — /mnt/mail/zeroxzed.ru/root@zeroxzed.ru.), но не понимаю как ? Точнее как правильно его указывать в этом конфиге ? Помогите пожалуйста.

  68. Аватар

    Добрый день, сделал все строго по вашей инструкции. Но когда ввожу логин и пароль от почты в THUNDERBIRD. Выдает ошибку "Не могу войти на сервер. Возможно, имеется ошибка в конфигурации, имени пользователя или пароле.". Просто в каком направлении копать? Я так понимаю конфиги настроенны не верно ?

    • Zerox

      Начинать исследование любых проблем надо с просмотра логов postfix и dovecot. Они в /var/log/ лежат. Там либо будут ошибки, либо если не будет вообще никаких упоминаний о подключении, решать вопрос, а туда ли вы вообще подключаетесь. Эти сервисы хорошо логируются и по логам всегда можно понять, что именно не работает и в чем проблема.

  69. Аватар

    Как заставить Roundcube работать по https??

    • Zerox

      Это отдельная тема. Пример настройки https в apache есть здесь - https://serveradmin.ru/nastroyka-ssl-v-apache-na-centos/ Единственное, там в примере используются сертификаты от сервиса, который уже не работает. Сейчас надо использовать бесплатные сертификаты от let's encrypt.

  70. Аватар

    "Позже получим и настроим нормальный сертификат." - очень хотелось бы посмотреть!
    Пробовал указать в конфиге (/etc/postfix/main.cf) в строчках
    smtpd_tls_key_file =
    smtpd_tls_cert_file =
    ...
    smtp_tls_CAfile =

    пути файлов ранее настроенного сертификата от Let's Encrypt - при этом в почтовом клиенте The Bat почта либо не отправляется , либо пишет - недействительный сертификат.

    • Zerox

      Вот пример настроек сертификатов let's encrypt в postfix с рабочего сервера. Там никаких нюансов нет, чтобы отдельно рассказывать. Просто указывается сертификат и все.

      smtpd_tls_key_file = /etc/postfix/cert/privkey.pem
      smtpd_tls_cert_file = /etc/postfix/cert/cert.pem
      smtpd_tls_CAfile = /etc/postfix/cert/chain.pem
    • Аватар

      smtpd_tls_cert_file=/etc/letsencrypt/live/domain/fullchain.pem
      smtpd_tls_key_file=/etc/letsencrypt/live/domain/privkey.pem

      • Аватар

        Вот прописал в /etc/postfix/main.cf свой сертификат, ну никак Mozilla не может соединиться с сервером через порт 587, хотя он везде открыт. При добавлении учётной записи в mozilla всё проходит гладко а когда пытаюсь отправить сообщения пишет что не может соединиться.

  71. Аватар

    Делаю по мануалу , есть такая ошибка
    The Postfix Admin directory layout changed.

    Please update your webserver config so that the DocumentRoot or Alias points to the directory "public".
    Не нашел рабочего решения. Селениум отключен.

    • Zerox

      В принципе, в ошибки все написано, что требуется. Судя по всему, в конфиге параметр DocumentRoot или alias смотрят не на директорию public.

      • Аватар

        Спасибо за отет. Тапками не кидайтесь если че .
        Тоесть нужно праить путь в конфиге /etc/httpd/conf.d дописать
        DocumentRoot "/var/www/html/postfixadmin/public"

  72. Аватар

    Версия такая же как у Вас - 3.0.2. А не подскажете тогда, где можно посмотреть логи postfixadmin, что именно происходит при этом входе, какие сообщения или ошибки появляются? Или может быть дело в том что виртуальная машина?

  73. Аватар

    Здравствуйте, уважаемый автор. Большое спасибо за статью. Начал делать по ней, только вместо apache установил nginx.
    Установку проводил на VMWare. Все шло хорошо до момента настройки postfixadmin. Сам он запустился, я создал суперадмина с новым паролем.
    Но войти в браузере не могу. Никаких ни ошибок ни сообщений не выдается, просто страница прокручивается и опять попадаю в окно приглашения.
    Что делать - непонятно. Читал. что такая ошибка часто встречается, но однознчного ответа так никто и не дал. Не могли бы Вы подсказать, в чем может быть дело? Заранее спасибо, с уважением.

    Выглядит это так: (Скрин к сожалению вставить не получается)

    Mail admins login here to administer your domain.
    Login (email):
    Password:
    Language:

    Users click here to login to the user section.

    • Zerox

      К сожалению, не знаю, чем помочь. Возможно что-то изменилось в новых версиях postfixadmin. Попробуйте более старую. Они принципиально ничем не отличаются. Управлять сервером без проблем можно любой версий, даже 5-7 летней давности.

  74. Аватар
    Александр

    В roundcube в настройках есть закладка - Профили. Любой пользователь может туда войти и вбить данные которые сам придумает. Я например сегодня отправил со своего сервера письмо с ящика qq@qq.ru на gmail и оно даже пришло во входящие. Точно так же можно подставить данные любого пользователя. Как с этим бороться?

    • Аватар
      Александр

      Если кому-то понадобится:

      # Убрать кнопки добавления и удаления профилей в каждой теме:
      vim /var/www/roundcube/skins/larry/templates/identities.html
      <!--
      <roundcube:button command="add" type="link" title="newidentity" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="addidentity" condition="config:identities_level:0<roundcube:button command="delete" type="link" title="delete" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="delete" condition="config:identities_level:0
      -->

      vim /var/www/roundcube/skins/classic/templates/identities.html
      <!--
      <roundcube:button command="add" type="link" title="newidentity" class="buttonPas addgroup" classAct="button addgroup" content=" " condition="config:identities_level:0<roundcube:button command="delete" type="link" title="delete" class="buttonPas delgroup" classAct="button delgroup" content=" " condition="config:identities_level:0
      -->

      # Установить флаг disabled на поле для ввода E-mail
      vim /var/www/roundcube/program/steps/settings/edit_identity.inc
      # function rcube_identity_form($attrib)
      # ...
      # // list of available cols
      # ...
      'email' => array('type' => 'text', 'size' => $i_size, 'disabled' => 'disabled'),
      # ...

      • Аватар
        Александр

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

        vim /var/www/roundcube/program/steps/settings/edit_identity.inc
        # function rcube_identity_form($attrib)
        # …
        # // list of available cols
        # …
        'email' => array('type' => 'text', 'size' => $i_size, 'style' => 'visibility: hidden'),
        # …

        В плагине new_user_dialog такая же уязвимость, лечится так же (можно еще переместить ниже подписи для красоты):
        vim /var/www/roundcube/plugins/new_user_dialog/new_user_dialog.php
        $table->add('title', ''); // изменение
        $table->add(null, html::tag('input', array(
        'type' => 'text',
        'name' => '_email',
        'value' => rcube_utils::idn_to_utf8($identity['email']),
        // 'disabled' => in_array($identities_level, array(1, 3, 4)) // изменение
        'style' => 'visibility: hidden' // изменение
        )));

    • Zerox

      Бороться с этим невозможно. Это особенность почтового протокола, который позволяет так поступать. Любой может поставить какой-угодно обратный адрес и отправить письмо. Я вот тут отдельно разбирал эту тему - https://serveradmin.ru/zapret-pisem-s-poddelnyim-polem-from-ili-spam-ot-sebya-k-sebe-v-postfix/

      • Аватар
        Александр

        По сути то что в статье по ссылке уже есть в данной статье, только используется файл black_client - верно?

        • Zerox

          Да, я и сам забыл, что уже рассказывал об этом. Еще раз статью написал :)

          • Аватар
            Александр

            Да, я это сделал сразу же, очень полезно, спасибо! :)
            Но проблема которую я хотел озвучить не в злодеях снаружи, а злодеях внутри. Используя возможность roundcube в виде подстановки From любой сотрудник компании!!! может от имени генерального директора написать письмо сомнительного содержания - указание внутри компании или клиенту и т.к. это все локальный сервер письмо уйдет без вопросов. Поэтому, на мой взгляд, эту возможность нужно ограничить как можно сильнее. Пример я привет выше - убрать возможность создавать профили самостоятельно, и изменять e-mail адрес в профиле по умолчанию.

            • Zerox

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

  75. Аватар
    Александр

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

    • Zerox

      Да, есть плагин для dovecot, который автосоздает папки при первом подключении. Названия папок указываются в настройках. Точно не помню название плагина. Еще надо учитывать, что имена папок должны быть написаны в какой-то кодировке для imap, не помню точно какая. Я кое-где встречал такие настройки, но сам никогда не делал. Я всегда использую латинские названия, так меньше проблем и глюков.

      • Аватар
        Александр

        Можно прям в настройках dovecot указать папки на русском и они создадутся в ФС в нужной кодировке и даже outlook будет правильно распределять письма до тех пор пока не войдешь в roundcube. С этого момента в вебе будет 2 папки отправленные, например. Веб будет отправлять письма в .sent а оутлук в отправленные. Не проверял, но думаю, что тандерберд и мобильные клиенты присоединятся к вебу. И оутлук будет сам по себе в сторонке... а хочется, чтобы было все едино. Может кто-то уже боролся с этим?

        • Zerox

          У этой проблемы нет решения. Смысл в том, что разные клиенты создают разные папки, они так созданы. К примеру, мобильный клиент создаст какие-то свои. Я это постоянно наблюдаю и простого решения не знаю. То же самое будет с папкой для спама. Где-то она будет называться "Нежелательная почта", где-то "Спам", где-то "Spam" и т.д.

      • Аватар
        Александр

        Провел еще 1 эксперимент. В настройках отулука при подключении указал путь к корневой папке как inbox
        Перезапустил оутлук, все папки на русском, кладет как написано. Но если зайти в тандерберд или роундкуб - во входящей папки появились подпипки - отправленные, черновики и т.п. спешиал фо оутлук)) Причем сам оутлук напроч не хочет видеть папки .Sent. А мобильный клиент на андройде (стандартный) напроч не хочет видеть папки оутлука. Получается такая неразбериха....

  76. Аватар

    Заново переписал все конфиги, теперь выдает ошибку:

    localhost postfix/pipe[17840]: 4636A82A211: to=, relay=dovecot, delay=1, delays=0.14/0.01/0/0.87, dsn=5.1.1, status=bounced (user unknown)

    • Аватар

      Для таких же не умных как я. Указанная выше проблема решается очень просто:
      flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
      нужно просто написать это без ошибки, добавив оба значка доллара)))

      Теперь же вылезло вот это:
      Error: User initialization failed: Namespace '': Ambiguous mail location setting, don't know what to do with it: myhost.com/root@myhost.com (try prefixing it with mbox: or maildir:)

      • Zerox

        Проверяй опять ошибки. Статья 100% рабочая. Я несколько серверов по ней настроил.

        • Аватар

          Погуглил, люди пишут, что это из-за того, что папки не создаются в mail_location. А вот почему они не создаются не понятно. Права на /mnt/mail/ vmail присвоил

        • Аватар

          Можешь сказать какая часть конфига отвечает за создание папок в /mnt/mail ?

  77. Аватар

    Здравствуйте. Посмотрите пожалуйста лог, и помогите исправить ошибку:

    Feb 7 13:34:36 localhost postfix/smtpd[14415]: connect from f169.i.mail.ru[94.100.178.88]
    Feb 7 13:34:37 localhost postfix/smtpd[14415]: Anonymous TLS connection established from f169.i.mail.ru[94.100.178.88]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
    Feb 7 13:34:38 localhost postfix/smtpd[14415]: B848682E63D: client=f169.i.mail.ru[94.100.178.88]
    Feb 7 13:34:38 localhost postfix/cleanup[14428]: B848682E63D: message-id=
    Feb 7 13:34:38 localhost postfix/qmgr[14051]: B848682E63D: from=, size=2972, nrcpt=2 (queue active)
    Feb 7 13:34:38 localhost postfix/smtpd[14415]: disconnect from f169.i.mail.ru[94.100.178.88]
    Feb 7 13:34:40 localhost postfix/smtp[14432]: B848682E63D: to=, relay=none, delay=2.9, delays=1.5/0.01/1.4/0, dsn=5.4.6, status=bounced (mail for myhost.com loops back to myself)
    Feb 7 13:34:40 localhost postfix/smtp[14432]: B848682E63D: to=, relay=none, delay=2.9, delays=1.5/0.01/1.4/0, dsn=5.4.6, status=bounced (mail for myhost.com loops back to myself)
    Feb 7 13:34:40 localhost postfix/cleanup[14428]: 44C3C82E63E: message-id=
    Feb 7 13:34:40 localhost postfix/qmgr[14051]: 44C3C82E63E: from=, size=4761, nrcpt=1 (queue active)
    Feb 7 13:34:40 localhost postfix/bounce[14433]: B848682E63D: sender non-delivery notification: 44C3C82E63E
    Feb 7 13:34:40 localhost postfix/qmgr[14051]: B848682E63D: removed
    Feb 7 13:34:40 localhost postfix/smtp[14434]: 44C3C82E63E: enabling PIX workarounds: disable_esmtp delay_dotcrlf for mxs.mail.ru[94.100.180.104]:25
    Feb 7 13:34:41 localhost postfix/smtp[14434]: 44C3C82E63E: to=, relay=mxs.mail.ru[94.100.180.104]:25, delay=1.5, delays=0/0.01/0.34/1.1, dsn=2.0.0, status=sent (250 OK id=1grf8q-0005t0-QE)
    Feb 7 13:34:41 localhost postfix/qmgr[14051]: 44C3C82E63E: removed

    Не уверен, но может это повлияло: PFA установился отлично, без ошибок, таблицы в БД создались, но по какой-то причине в саму панель не логиниться, выдает ошибку «Invalid token!» (может и это знаете как пофиксить). Далее я заполнил вручную созданные таблицы и возможно это как-то влияет на работу.

    Заранее благодарен за помощь.

  78. Аватар

    не отправляется лог почему-то, но данную проблему решил комментом строк с uid

    • Аватар

      А можно подробней, какие именно строки закомментили? у меня такая же проблема.

      • Аватар

        в конфиге dovecot, в самом начале
        было так:
        first_valid_uid = 1000
        last_valid_uid = 1000
        сделал так:
        #first_valid_uid = 1000
        #last_valid_uid = 1000
        и авторизация пошла

        • Аватар

          Увы, мне не помогло.

          • Аватар

            покажи что у тебя в логах dovecot

            • Аватар

              imap-login: Info: Disconnected (auth failed, 3 attempts in 109 secs): user=, method=PLAIN, rip=, lip=, TLS, session=

              • Аватар

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

                • Аватар

                  Я полностью ввожу. Ну ладно, это сейчас не главная проблема, там ниже я оставил коммент, у меня почта не принимает письма, хотя на отправку идут.

                  • Аватар

                    было так же, перенастраивал dns записи (у меня не правильные были). И открывал порт 25й на прием почты и все теперь ходит

                    • Аватар

                      Порт открыт, ДНС правильно настроил, все равно не работает.

  79. Аватар

    Привет, сделал по твоим конфигам, возникла проблема авторизации. Не заходит, в почту, ни под одним пользователем, пишет, что неверный логин/пароль. И папка с почтой(доменом) в /mnt/mail не создается. В базе все пользователи есть

    • Zerox

      Надо лог postfix и dovecot смотреть и разбираться предметно. Где-то шибка. Статья рабочая.

  80. Аватар

    Добрый день! Настройку Postfix+Dovecot делал по вашему мануалу. Отправка почты работает, но входящая не идет.
    В логах Dovecot ошибок нет. В maillog следущее: Dec 28 11:06:22 mailsrv postfix/smtpd[5062]: connect from mail-ot1-f49.google.com[209.85.210.49]
    Dec 28 11:06:22 mailsrv postfix/smtpd[5062]: 72DB46074252: client=mail-ot1-f49.google.com[209.85.210.49]
    Dec 28 11:06:22 mailsrv postfix/cleanup[5065]: 72DB46074252: message-id=
    Dec 28 11:06:22 mailsrv postfix/qmgr[4957]: 72DB46074252: from=, size=2487, nrcpt=1 (queue active)
    Dec 28 11:06:22 mailsrv postfix/local[5066]: 72DB46074252: to=, orig_to=, relay=local, delay=0.32, delays=0.26/0.01/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox)
    Dec 28 11:06:22 mailsrv postfix/qmgr[4957]: 72DB46074252: removed
    Dec 28 11:06:22 mailsrv postfix/smtpd[5062]: disconnect from mail-ot1-f49.google.com[209.85.210.49] В ящике входящих пусто

    • Zerox

      Чудес не бывает. Письмо положено в ящик - (delivered to mailbox)
      Я еще ни разу не видел, чтобы по логам чисто, а в ящике пусто. Где-то что-то напутано.

    • Аватар

      Роман решили ? у меня тоже письмо отправляется, но входящ пусто

  81. Аватар

    Здравствуйте, у меня в journalctl -xe появились вот такие ошибки:
    дек 16 17:05:46 Server postfix/smtpd[21664]: connect from mail-lj1-f172.google.com[209.85.208.172]
    дек 16 17:05:46 Server postfix/smtpd[21664]: Anonymous TLS connection established from mail-lj1-f172.google.com[209.85.208.172]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
    дек 16 17:05:46 Server postfix/smtpd[21664]: 6AC91CE06FE: client=mail-lj1-f172.google.com[209.85.208.172]
    дек 16 17:05:46 Server postfix/cleanup[21673]: 6AC91CE06FE: message-id=
    дек 16 17:05:46 Server postfix/qmgr[21636]: 6AC91CE06FE: from=, size=13300, nrcpt=2 (queue active)
    дек 16 17:05:46 Server postfix/smtpd[21664]: disconnect from mail-lj1-f172.google.com[209.85.208.172] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
    дек 16 17:05:46 Server postfix/pipe[21676]: 6AC91CE06FE: to=, relay=dovecot, delay=0.31, delays=0.2/0.01/0/0.1, dsn=2.0.0, status=sent (delivered via dovecot service (lda(all_in@mysite.com,)Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission ))
    дек 16 17:05:46 Server postfix/pipe[21677]: 6AC91CE06FE: to=, relay=dovecot, delay=0.32, delays=0.2/0.02/0/0.09, dsn=2.0.0, status=sent (delivered via dovecot service (lda(username@mysite.com,)Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission d))
    дек 16 17:05:46 Server postfix/qmgr[21636]: 6AC91CE06FE: removed
    На отправку/приём писем это не влияет, но всё же хотелось бы узнать в чём проблемы.
    Dovecot 2.3.4
    Postfix 3.3.2

    • Zerox

      Вот на этот сокет у dovecot или postfix нет доступа.
      Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission
      За что он отвечает, не знаю, надо погуглить и почитать. Может это баг, а может реально права стоят не правильные. Раз все работает, значит сокет от не критичной службы.

      • Аватар

        Ну по сути это сервис собирающий статистику и в инете о нём информация толком отсутствует, но всё равно спасибо за ответ.

  82. Аватар

    Встречались упоминания в комментариях к этой статье по поводу exim'a, может кто-то поделится рабочим конфигом exim? Настроено exim+dovecot+mysql+postfixadmin. Уже месяц бьюсь не могу решить проблему. Все тесты сервер проходит: сервер не является публичным пересыльщиком почты, прикрутил spf, dkim, dmarc, user's на proxy и каждую ночь ip попадает в блэклист абузы (abuseat.org), в логах ничего нет.

  83. Аватар

    Добрый день.
    Уважаемый гуру)) у меня возникла ситуация. Что от одного заказчика стало с одной почты очень много писем генеррэироваться. По 20 тысяч в день при помощи жиры. Нагрузка очень большая и очень важные письма с того же домена сталкивался попадать в какую то невидимую очередь на 2 -3 часа. Какие параметры могли бы предложить увеличить пропускную способность постфткса? Большое спасибо за наводку. Экспериментировал с параметрами эффекта нужного не дало.

    • Zerox

      20 тысяч в день это небольшая нагрузка. Надо смотреть, что там в моменте. Но даже если разом приходит 1000 писем, то postfix такую очередь разгребает минут за 10 даже при очень слабой конфигурации. Надо смотреть, в чем конкретно проблема и где возникают задержки. Универсальный совет - добавить памяти и процессора. Но может и диск тормозить.

      • Аватар

        Ну у меня сейчас там 2 проца выделено, но в перспективе переезд на более слабый сервер. Где максимум 2 ядра будет выделено, правда у них частота выше. Оперативки 2 гига и больше не получится сделать. Ну с диском я тоже к сожалению ничего сделать не могу. Ну как хоть попытаться повысить скорость обработки очереди. Вот сегодня в 12 пришло сообщение которое было отправлено вчера в 17:00, а за 5 минут до него дошло сообщение отправленное сегодня в 9:00.

        • Zerox

          Так надо логи смотреть, когда пришло письмо на сервер, сколько висело в очереди и по какой причине. Мониторить размер очереди, время ее сокращения. Без этого невозможно сделать какие-то выводы. Но если есть приличная нагрузка и большая очередь писем, то 2 гб памяти однозначно мало.

          • Аватар

            Исходящая очередь понятно как мониторить mailq (тут от силы 1 - 2 письма за день).
            А как входящую?
            Лог файл письма которое отправлено от клиента в 9:30
            "Dec 5 11:12:28 mail postfix/smtpd[36407]: C9065300068F5: client=mx1.roskazna.ru[83.229.175.71]
            Dec 5 11:13:08 mail postfix/cleanup[45270]: C9065300068F5: message-id=
            Dec 5 11:13:08 mail opendkim[820]: C9065300068F5: mx1.roskazna.ru [83.229.175.71] not internal
            Dec 5 11:13:08 mail opendkim[820]: C9065300068F5: not authenticated
            Dec 5 11:13:08 mail opendkim[820]: C9065300068F5: no signature data
            Dec 5 11:13:08 mail postfix/qmgr[45084]: C9065300068F5: from=, size=8546, nrcpt=2 (queue active)
            Dec 5 11:13:09 mail postfix/pipe[45280]: C9065300068F5: to=, relay=dovecot, delay=60, delays=60/0/0/0.23, dsn=2.0.0, status=sent (delivered via dovecot service)
            Dec 5 11:13:09 mail postfix/pipe[45281]: C9065300068F5: to=, relay=dovecot, delay=60, delays=60/0/0/0.25, dsn=2.0.0, status=sent (delivered via dovecot service)
            Dec 5 11:13:09 mail postfix/qmgr[45084]: C9065300068F5: removed
            "

            • Zerox

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

              • Аватар

                Ситуация следующая это р*сказна, думаю у них там не один почтовый сервер. Начали с одного ящика кучу бесполезных уведомлений слать на наших 20 почтовых ящиков, это и есть та куча писем. Мы с ними связались попросили это отключить или вернуть как было ноль реакции, вот заблокировал их одну почтовую учетку для рассылки. Но теперь получается они отправляют, мой сервер шлёт им запрос что письмо не принято, потом их сервер шлёт что эта почтовая учетка не принимает письма.
                Может быть можно как то посмотреть более подробный лог и там что то будет понятно. У меня стоит log level 2.

                • Zerox

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

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

                  • Аватар

                    Огромное спасибо за уделенное время. После ваших слов у меня появилось больше уверенности для разговора с ними и доказательства что у них что то не так.

  84. Аватар

    Zerox
    Подскажите, пожалуйста, сколько все это великолепие кушает ресурсов? Я имею ввиду весь стек из статьи со всеми web панелями и процессами MySQL. Интересует RAM, CPU.

    • Zerox

      Очень мало. Начинать можно с 1 cpu и 1 gm ram. 50 пользователей запросто тянет конфа с 2 cpu, 4gb ram. Тут больше вопрос к производительности диска. Но до 100 юзеров даже одиночный sata диск справится без проблем.

  85. Аватар
    Александр

    Добрый день!
    Ставил все с 0, шел по вашим статьям и погиб на настройке Dovecot

    Все шло успешно до проверки отправленой почты:
    cat /var/log/maillog

    Nov 27 06:28:26 mail postfix/postfix-script[1007]: starting the Postfix mail system
    Nov 27 06:28:26 mail postfix/master[1013]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 03:31:53 mail postfix/postfix-script[27823]: stopping the Postfix mail system
    Nov 29 03:31:53 mail postfix/master[1013]: terminating on signal 15
    Nov 29 03:31:53 mail postfix/postfix-script[27905]: starting the Postfix mail system
    Nov 29 03:31:53 mail postfix/master[27907]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 03:31:59 mail dovecot: master: Error: service(auth): unlink(/var/run/dovecot/auth-master) failed: Is
    Nov 29 03:31:59 mail dovecot: master: Fatal: Failed to start listeners
    Nov 29 03:37:28 mail postfix/postfix-script[28021]: stopping the Postfix mail system
    Nov 29 03:37:28 mail postfix/master[27907]: terminating on signal 15
    Nov 29 03:37:28 mail postfix/postfix-script[28103]: starting the Postfix mail system
    Nov 29 03:37:28 mail postfix/master[28105]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 03:37:35 mail dovecot: master: Error: service(auth): unlink(/var/run/dovecot/auth-master) failed: Is
    Nov 29 03:37:35 mail dovecot: master: Fatal: Failed to start listeners
    Nov 29 03:45:15 mail postfix/postfix-script[28254]: stopping the Postfix mail system
    Nov 29 03:45:15 mail postfix/master[28105]: terminating on signal 15
    Nov 29 03:45:15 mail postfix/postfix-script[28335]: starting the Postfix mail system
    Nov 29 03:45:15 mail postfix/master[28337]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 03:45:22 mail dovecot: master: Error: service(auth): unlink(/var/run/dovecot/auth-master) failed: Is
    Nov 29 03:45:22 mail dovecot: master: Fatal: Failed to start listeners
    Nov 29 04:07:34 mail postfix/smtpd[28846]: connect from mail[::1]
    Nov 29 04:07:34 mail postfix/smtpd[28846]: 5537F4696FC: client=mail[::1]
    Nov 29 04:07:34 mail postfix/cleanup[28849]: 5537F4696FC: message-id=<20181129040734.5537F4696FC@mail.locald
    Nov 29 04:07:34 mail postfix/qmgr[28339]: 5537F4696FC: from=, size=450, nrcpt=1 (queue act
    Nov 29 04:07:34 mail postfix/smtpd[28846]: disconnect from mail[::1]
    Nov 29 04:07:36 mail postfix/smtp[28850]: 5537F4696FC: to=, relay=mxs.mail.ru[94.109, dsn=5.0.0, status=bounced (host mxs.mail.ru[94.100.180.31] said: 550 non-local sender verification failed
    Nov 29 04:07:36 mail postfix/cleanup[28849]: 693C145C30B: message-id=<20181129040736.693C145C30B@mail.locald
    Nov 29 04:07:36 mail postfix/bounce[28851]: 5537F4696FC: sender non-delivery notification: 693C145C30B
    Nov 29 04:07:36 mail postfix/qmgr[28339]: 693C145C30B: from=, size=2371, nrcpt=1 (queue active)
    Nov 29 04:07:36 mail postfix/qmgr[28339]: 5537F4696FC: removed
    Nov 29 04:07:36 mail postfix/smtp[28850]: warning: no MX host for cheapcat.ru has a valid address record
    Nov 29 04:07:36 mail postfix/smtp[28850]: 693C145C30B: to=, relay=none, delay=0.14, delaysomain name not found. Name service error for name=mail.cheapcat.ru type=AAAA: Host found but no data record
    Nov 29 04:07:36 mail postfix/qmgr[28339]: 693C145C30B: removed
    Nov 29 04:42:06 mail postfix/postfix-script[29317]: stopping the Postfix mail system
    Nov 29 04:42:06 mail postfix/master[28337]: terminating on signal 15
    Nov 29 04:42:06 mail postfix/postfix-script[29399]: starting the Postfix mail system
    Nov 29 04:42:06 mail postfix/master[29401]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 08:16:08 mail postfix/postfix-script[792]: stopping the Postfix mail system
    Nov 29 08:16:08 mail postfix/master[29401]: terminating on signal 15
    Nov 29 08:16:08 mail postfix/postfix-script[873]: starting the Postfix mail system
    Nov 29 08:16:08 mail postfix/master[875]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 08:30:36 mail postfix/postfix-script[1169]: stopping the Postfix mail system
    Nov 29 08:30:36 mail postfix/master[875]: terminating on signal 15
    Nov 29 08:30:36 mail postfix/postfix-script[1251]: starting the Postfix mail system
    Nov 29 08:30:37 mail postfix/master[1253]: daemon started -- version 2.10.1, configuration /etc/postfix
    Nov 29 08:43:22 mail postfix/postfix-script[1417]: stopping the Postfix mail system
    Nov 29 08:43:22 mail postfix/master[1253]: terminating on signal 15
    Nov 29 08:43:22 mail postfix/postfix-script[1498]: starting the Postfix mail system
    Nov 29 08:43:22 mail postfix/master[1500]: daemon started -- version 2.10.1, configuration /etc/postfix

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

    • Zerox

      Где-то что-то напутано. Тут и dovecot не стартует, и в postfix ошибки. Наверняка где-то ошибки в конфигах. Можно либо гуглить ошибки в логах и исправлять, либо все с нуля аккуратно настраивать.

  86. Аватар

    Привет! Спасибо за хорошие и очень понятные статьи.

    Столкнулся с проблемой - opendkim[7426]: opendkim: /etc/opendkim.conf: refile:/etc/postfix/dkim/signingtable: dkimf_db_open(): Permission denied
    Устанавливал по данной статье один в один, ну только доменное имя другое, само собой.
    При чем, уже третий сервер настраиваю по этому мануалу, но вот ошибку эту побороть не могу.
    Права все указал, как в статье. Куда копать?
    Гугл не очень помогает, раз я решил написать тут (

    • Zerox

      Так а чем тут помочь? Четко написано - проблемы с правами доступа к файлу /etc/postfix/dkim/signingtable, сервис dkim не может его прочитать.

      • Аватар
        Виктор

        В том то и дело, что права выставлены, какие и требуются. Я бы по ерунде не писал(
        # ls-l
        -rw-r----- 1 root opendkim 93 Nov 26 01:23 keytable
        -r--r----- 1 root opendkim 887 Nov 26 01:22 mail.[domainname].private
        -rw-r--r-- 1 root opendkim 311 Nov 26 01:22 mail.[domaiiname].txt
        -rw-r----- 1 root opendkim 45 Nov 26 01:24 signingtable
        пользователь opendkim, postfix и root в группе opendkim. Права на чтение есть у всех.
        Opendkim запускается от opendkim:opendkim.
        Но все тщетно... Я уже какие только права не ставил. Даже 777 ради эксперимента.
        Пробовал также удалять и заново устанавливать opendkim.

        • Zerox

          А в саму директорию с самого корня диска есть доступ у opendkim?

          • Аватар
            Виктор

            [root@mail etc]# ls -l /
            total 28
            lrwxrwxrwx. 1 root root 7 Nov 19 16:15 bin -> usr/bin
            dr-xr-xr-x. 5 root root 4096 Nov 21 23:49 boot
            drwxr-xr-x 21 root root 3440 Nov 25 23:32 dev
            drwxr-xr-x. 107 root root 8192 Nov 27 15:32 etc
            drwxr-xr-x. 118 root root 4096 Nov 27 00:15 home
            lrwxrwxrwx. 1 root root 7 Nov 19 16:15 lib -> usr/lib
            lrwxrwxrwx. 1 root root 9 Nov 19 16:15 lib64 -> usr/lib64
            drwxr-xr-x. 2 root root 6 Apr 11 2018 media
            drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
            drwxr-xr-x. 3 root root 16 Nov 21 23:48 opt
            dr-xr-xr-x 229 root root 0 Nov 25 23:32 proc
            dr-xr-x---. 8 root root 276 Nov 26 23:27 root
            drwxr-xr-x 34 root root 980 Nov 27 05:28 run
            lrwxrwxrwx. 1 root root 8 Nov 19 16:15 sbin -> usr/sbin
            drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
            dr-xr-xr-x 13 root root 0 Nov 27 15:02 sys
            drwxrwxrwt. 14 root root 4096 Nov 27 15:33 tmp
            drwxr-xr-x. 13 root root 155 Nov 19 16:15 usr
            drwxr-xr-x. 23 root root 4096 Nov 26 23:20 var
            drwxr-xr-x 6 apache apache 83 Nov 25 00:57 web
            ---------------------------------------------------------------------
            [root@mail etc]# ls -l | grep opendkim
            drwxr-xr-x 3 root opendkim 74 Nov 26 01:19 opendkim
            -rw-r--r-- 1 root opendkim 396 Nov 26 23:37 opendkim.conf
            ---------------------------------------------------------------------
            [root@mail etc]# ls -l | grep postfix
            drw-r--r--. 5 root root 4096 Nov 26 01:30 postfix
            ---------------------------------------------------------------------
            [root@mail etc]# getent group | grep root
            root:x:0:opendkim
            opendkim:x:988:postfix,root,opendkim

            Даже будучи в группе root, сервис не запускается (
            Оставлю так, пожалуй...

  87. Аватар
    kolbaser2010

    К сожалению, старую скачать не удается(
    Может у Вас есть рабочая ссылка на старую версию?

    Заранее благодарен.

  88. Аватар
    Дмитрий

    Добрый день!
    Подскажите пожалуйста, может конечно я где-то накосячил.
    Делал по вашим инструкциям https://serveradmin.ru/ustanovka-lamp-apache-php-mysql-v-centos-7/
    После этого, настроил на этом же сервере Zabbix, он работает, но когда начал ставить postfix-3,2
    Столкнулся с проблемой
    "$CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = '123456789'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'pivkin_ds@maxisvet.com'; $CONF['encrypt'] = 'md5crypt'; $CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES';"
    Как ее победить?
    При этом Zabbix работает без проблем.

    Заранее спасибо за помощь.

    • Аватар
      Дмитрий

      Вот более точный ответ от postfix
      "$CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'asWQgfRT123!'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'pivkin_ds@maxisvet.com'; $CONF['encrypt'] = 'md5crypt'; $CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES';ERROR: the templates_c directory doesn't exist or isn't writeable for the webserver"

      • Zerox

        Что-то такое припоминаю, сталкивался. Если не ошибаюсь, то это с новой версией postfixadmin ошибка. Не дошли руки поправить статью. Как вариант, использовать туже версию postfixadmin, что в статье. Принципиальных отличий все равно не.

  89. Аватар

    Здравствуйте, после пункта "а также проверяем работу phpmyadmin — http://188.35.19.125/phpmyadmin/. Его нужно настроить, об этом рассказано в статье, которую я привел чуть выше." Я прошел по ссылке и обнаружил, что в результате после установки phpmyadmin у меня в каталоге /etc/httpd/conf.d/ не появился конфиг phpMyAdmin.conf

    С чем это может быть связано?

    • Аватар

      C этим разобрался, не устанавливался phpMyAdmin без epel

      Теперь еще одна неприятность настигла(((

      http//myip/postfixadmin/setup.php

      Выдает:
      Not Found
      The requested URL /postfixadmin/setup.php was not found on this server.

      Все предыдущие шаги выполнены.

      • Zerox

        Нужно смотреть настройки веб сервера. Там ошибка.

      • Аватар

        Если вы настраивали ваш вебсервер по мануалу с этого сайта, т.е. создавали site1.ru и сделали структуру папок, как было в примере, /web/.. - то отключите ваш тестовый файл конфигурации site1.ru.conf и работа должны восстановиться и setup.php будет работать.

  90. Аватар

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

    вопрос к колеегам, а вот имея уже установленный почтовик (egroupware+postfix+dovecot+mysql) можно ли прикрутить postfixadmin (конечно, так что б он подтянул конфу почтовика)?
    вообще, у меня задача массовая смена поролей пользователей и введение политик длины пароля. вот пока не пойму, как решить
    спасибо!

    • Zerox

      Нужно смотреть структуру текущей базы данных. Если она совпадает с postfixadmin, то можно его добавить. Если нет, то нужно переносить данные из старой базы в новую для postfixadmin.

      • Аватар

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

        • Zerox

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

          • Аватар

            сорри, я совсем не подробно все обрисовал...
            есть уже работающая система и есть уже почти 1000 пользователей. Сейчас принято решение поменять все пароли и задать политику длины пароля. вот ищу как эту политику реализовать на моей связке (postfix+egroupware+dovecot).
            вот, спросил совета, мож кто делал ;)

  91. Аватар
    Андрей

    Как в роундкубе сделать общую адрессную книгу, хотя бы тех контактов которые есть в базе данных постфикс (существующих контактов домена)

  92. Аватар
    Валентин

    Здравствуйте. А почему ничего не написано про DMARC?

  93. Аватар

    Добрый день, настраивал по вышей инструкции. Почта не ходит, подскажите куда смотреть?

    Sep 28 15:53:38 mail postfix/pipe[12875]: AFEDC40B31: to=, relay=dovecot, delay=361, delays=361/0.03/0/0.18, dsn=4.3.0, status=deferred (temporary failure)
    Sep 28 15:53:38 mail postfix/pipe[12876]: AFEDC40B31: to=, relay=dovecot, delay=361, delays=361/0.04/0/0.19, dsn=4.3.0, status=deferred (temporary failure)
    Sep 28 15:53:38 mail postfix/pipe[12880]: 3C9FD40B2E: to=, relay=dovecot, delay=563, delays=563/0.05/0/0.2, dsn=4.3.0, status=deferred (temporary failure)
    Sep 28 15:53:38 mail postfix/pipe[12878]: 3C9FD40B2E: to=, relay=dovecot, delay=563, delays=563/0.04/0/0.26, dsn=4.3.0, status=deferred (temporary failure)

  94. Аватар
    Сергей

    Не могу понять, где может быть пропущено =

    postmap: fatal: /etc/postfix/main.cf, line 758-766: missing '=' after attribute name: "submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING"
    [root@mail postfix]# systemctl restart postfix
    Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details.

  95. Аватар

    Добрый день, Zerox!

    алиасы прописаны как у вас.

    в postfixadmin создан алиас домен - mail.exemple.com на домен exemple.com

    есть ящик - test@exemple.com

    Я пишу на почту - test@mail.exemple.com

    Но мне приходит отбивка, что такой пользователь не найден.

    Вопрос - как проверить корректность скриптов postfix-a которые обращаются в БД mysql?

    я полагаю, что мне надо либо изменить параметры
    mydomain
    mydestination

    relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
    mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf,
    mysql:/etc/postfix/mysql/virtual_alias_domain_catchall_maps.cf
    virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf,
    mysql:/etc/postfix/mysql/virtual_alias_domain_mailbox_maps.cf
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydestination = localhost.$mydomain, localhost
    myorigin = $mydomain
    mydomain = example.com
    myhostname = post.example.com

  96. Аватар

    Добрый день!

    Есть ли смысл обновлять Postfix до последней версии?
    Сейчас в CentOs 7 1804 по умолчанию Postfix версии 2.10.1, а на оф сайте последняя стабильная версия уже 3.3.

  97. Аватар

    Добрый день! Спасибо за отличную статью! Когда-то давно я поднимал почтарь на лине. Все было отлично. Сейчас поднял по Вашей статье и у меня такая проблемка. Все перепроверил/перерыл, но не могу найти решение. Это связано с сертификатами?

    Aug 16 17:32:13 mail postfix/smtpd[2018]: connect from unknown[10.0.20.3]
    Aug 16 17:32:13 mail postfix/smtpd[2018]: Anonymous TLS connection established from unknown[10.0.20.3]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)
    Aug 16 17:32:13 mail postfix/smtpd[2018]: NOQUEUE: reject: RCPT from unknown[10.0.20.3]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from= to= proto=ESMTP helo=
    Aug 16 17:32:13 mail postfix/smtpd[2018]: lost connection after RCPT from unknown[10.0.20.3]
    Aug 16 17:32:13 mail postfix/smtpd[2018]: disconnect from unknown[10.0.20.3]

    Выключал iptables, к одному днс подключал, unknown просто меняется на имя машины, ошибка остается. Не могу войти почтовым клиентом. Всегда спрашивает пароль, как будто он не верен. Базы все в порядке. Кто-нибудь встречался с такой ошибкой?

    • Zerox

      Конкретно здесь вот эта ошибка:
      Helo command rejected: need fully-qualified hostname
      Она связана с настройками smtpd_helo_restrictions. С ними надо либо разобраться, либо совсем отключить. iptables тут не при чем.

  98. Аватар

    Здравствуйте, спасибо за ваш труд переодически просматриваю ваши статьи, может кто подскажет, есть iredmail на нём несколько доменов и у каждого из них свой ip, тоесть domain1.org - 1.1.1.1 domain2.org - 2.2.2.2 и получается что при отправке с domain2.org - 2.2.2.2 на условно mail.com то если посмотреть детализацию письма на mail.com видем в полях "Received: from" и "by mail" domain1.org - 1.1.1.1. тоесть, как заставить Postfix или куда копать, не использовать при отправке default hostname, а каждый домен был независимым транспортом и при этом в письме не висели хвости default hostname. Буду очень признателен за подказку уже весь инет перерил, спс.

  99. Аватар

    разобрался )))
    + прикрутил rspamd

  100. Аватар

    Еще косяк в конфиге выше

    postfix[2097]: fatal: /etc/postfix/main.cf, line 41: missing '=' after attribute name: "mysql:/etc/postfix/mysq...maps.cf"

    правим на

    mysql = /etc/postfix/mysql/virtual_alias_domain_maps.cf

    и опять косяк

    postfix[2124]: /usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: mysql=/etc/postfix/mysql/virtual_alias _domain_maps.cf

    и ни хре на не работает

  101. Аватар

    Мало того
    Теперь для конфига нужно использовать config.local.php

    Warning: config.local.php - NOT FOUND
    It's Recommended to store your own settings in config.local.php instead of editing config.inc.php
    Create the file, and edit as appropriate (e.g. select database type etc)

  102. Аватар

    Postfixadmin 3.2

    The requested URL /postfixadmin/setup.php was not found on this server.

    Дело в том что

    The Postfix Admin directory layout changed.
    Please update your webserver config so that the DocumentRoot or Alias points to the directory "public".

    Те теперь придется вносить доп изменения в конфиг httpd:

    https://github.com/postfixadmin/postfixadmin/issues/173

    Alias /postfixadmin/ "/var/www/html/postfixadmin/public/"

    Options FollowSymLinks
    AllowOverride None
    Allow from all
    Order allow,deny

  103. Аватар
    Евгений

    Статья шикарная!
    Но вот заработало у меня через dovecot только после добавления
    local_transport = dovecot

  104. Аватар
    Евгений

    Добавить хотел старые девайсы репорты шлют только по smtp а нужно чтобы пересылка была по smtps

  105. Аватар
    Евгений

    Отличная статья но у меня вопрос другого характера. в сетке очень много старых девайсов, стоит задача сделать некий "почтовик" который бы принимал от них репорты и пересылал на почту например яндекса. Каким образом это реализовать ?

    • Zerox

      Postfix умеет так делать. На нем можно настроить почтовый релей вообще без авторизации, если старые устройства не умеют это делать. Перечислить их по ip. Затем настроить отправку всей почты в какой-то другой ящик. Это сделать реально, но готовых инструкций у меня нет.

  106. Аватар

    В статье ошибка.

    Тк ранее хеширование паролей было отключено то соотв. в dovecot-mysql.conf нужно указать, что пароль идет прямым текстом:

    default_pass_scheme = CLEARTEXT

  107. Аватар
    Аноним

    Если у пользователи будет входить на почту только с помощью браузера-web интерфейс (т.е. pop3 не нужен вообще), тогда dovecot не нужен?

    • Аватар
      Аноним

      Не пойму зачем нужен dovecot вообще? Только для pop3?
      Будет ли это всё работать без dovecot, если на почту будем входить только с помощью бразуера-web интерфейс?

  108. Аватар

    Пришлось качать именно postfixadmin-3.0.2.tar.gz
    т.к. 3.1 - ругается на отсутствие папки tempaltes_c
    3.2 - отсутствие файла setup.php

    • Аватар
      Аноним

      в 3.2 setup.php находится в public/, там же создай ручками templates_c и дай права на нее

  109. Аватар

    Что такое "backupmx"?

    • Zerox

      Обычно это резервный mx сервер, у которого более низкий приоритет, по сравнению с основным. По-умолчанию вся почта идет на основной сервер, но если он не доступен, то почта будет отправляться на второй сервер.

  110. Аватар

    а зачем тут "Прошу поделиться в комментариях тем, у кого есть бОльший опыт" буква о - большая?
    чтобы не перепутали с болЬший или большИй?

  111. Аватар

    Приветствую!
    Недавно заметил небольшой косяк в настройках Postfix.
    В принципе, совсем некритичный но все же.
    Косяк касается Postfix reverse DNS lookup — https://serverfault.com/questions/911789/postfix-forced-reverse-lookup-for-incoming-connections
    При желании, если найдёте инфу полезной можете добавить в статью.

  112. Аватар
    [root@ksez ~]# cat /var/log/maillog
    Mar 30 21:59:57 mailcentos postfix/postfix-script[2847]: starting the Postfix mail system
    Mar 30 21:59:57 mailcentos postfix/master[2888]: daemon started -- version 2.10.1, configuration /etc/postfix
    Mar 30 22:22:04 ksez postfix/postfix-script[2178]: starting the Postfix mail system
    Mar 30 22:22:04 ksez postfix/master[2225]: daemon started -- version 2.10.1, configuration /etc/postfix
    Mar 30 22:33:55 ksez postfix/postfix-script[1107]: starting the Postfix mail system
    Mar 30 22:33:55 ksez postfix/master[1109]: daemon started -- version 2.10.1, configuration /etc/postfix
    Mar 30 23:00:31 ksez postfix/smtpd[2276]: connect from localhost[::1]
    Mar 30 23:00:31 ksez postfix/smtpd[2276]: BA45340FDFCE: client=localhost[::1]
    Mar 30 23:00:31 ksez postfix/cleanup[2279]: BA45340FDFCE: message-id=
    Mar 30 23:00:31 ksez postfix/smtpd[2276]: disconnect from localhost[::1]
    Mar 30 23:00:31 ksez postfix/qmgr[1111]: BA45340FDFCE: from=, size=557, nrcpt=1 (queue active)
    Mar 30 23:00:31 ksez postfix/local[2281]: BA45340FDFCE: to=, relay=local, delay=0.04, delays=0.02/0.02/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
    Mar 30 23:00:31 ksez postfix/qmgr[1111]: BA45340FDFCE: removed
    Mar 30 23:28:40 ksez postfix/smtpd[2507]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:28:41 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2507 exit status 1
    Mar 30 23:28:41 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:29:41 ksez postfix/smtpd[2508]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:29:42 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2508 exit status 1
    Mar 30 23:29:42 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:30:42 ksez postfix/smtpd[2509]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:30:43 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2509 exit status 1
    Mar 30 23:30:43 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:31:43 ksez postfix/smtpd[2510]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:31:44 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2510 exit status 1
    Mar 30 23:31:44 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:32:44 ksez postfix/smtpd[2511]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:32:45 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2511 exit status 1
    Mar 30 23:32:45 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:33:45 ksez postfix/smtpd[2513]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:33:46 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2513 exit status 1
    Mar 30 23:33:46 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:34:46 ksez postfix/smtpd[2514]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:34:47 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2514 exit status 1
    Mar 30 23:34:47 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:35:47 ksez postfix/smtpd[2525]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:35:48 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2525 exit status 1
    Mar 30 23:35:48 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:36:48 ksez postfix/smtpd[2675]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:36:49 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2675 exit status 1
    Mar 30 23:36:49 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:37:49 ksez postfix/smtpd[2676]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:37:50 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2676 exit status 1
    Mar 30 23:37:50 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:38:50 ksez postfix/smtpd[2677]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:38:51 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2677 exit status 1
    Mar 30 23:38:51 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:39:51 ksez postfix/smtpd[2811]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:39:52 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2811 exit status 1
    Mar 30 23:39:52 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:40:52 ksez postfix/smtpd[2812]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:40:53 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2812 exit status 1
    Mar 30 23:40:53 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:41:53 ksez postfix/smtpd[2814]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:41:54 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2814 exit status 1
    Mar 30 23:41:54 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:42:55 ksez postfix/smtpd[2841]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:42:56 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2841 exit status 1
    Mar 30 23:42:56 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:43:56 ksez postfix/smtpd[2856]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:43:57 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2856 exit status 1
    Mar 30 23:43:57 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:44:57 ksez postfix/smtpd[2936]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:44:58 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2936 exit status 1
    Mar 30 23:44:58 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:45:58 ksez postfix/smtpd[2937]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:45:59 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2937 exit status 1
    Mar 30 23:45:59 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:46:59 ksez postfix/smtpd[2953]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:47:00 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2953 exit status 1
    Mar 30 23:47:00 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:48:00 ksez postfix/smtpd[2957]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:48:01 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2957 exit status 1
    Mar 30 23:48:01 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:49:01 ksez postfix/smtpd[2962]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:49:02 ksez postfix/master[1109]: warning: process /usr/libexec/postfix/smtpd pid 2962 exit status 1
    Mar 30 23:49:02 ksez postfix/master[1109]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:49:25 ksez postfix/postfix-script[2977]: stopping the Postfix mail system
    Mar 30 23:49:25 ksez postfix/master[1109]: terminating on signal 15
    Mar 30 23:49:26 ksez postfix/postfix-script[3059]: starting the Postfix mail system
    Mar 30 23:49:26 ksez postfix/master[3061]: daemon started -- version 2.10.1, configuration /etc/postfix
    Mar 30 23:49:26 ksez postfix/qmgr[3063]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:49:27 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3063 exit status 1
    Mar 30 23:49:27 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:50:27 ksez postfix/qmgr[3102]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:50:28 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3102 exit status 1
    Mar 30 23:50:28 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:51:07 ksez postfix/master[3061]: warning: unix_trigger_event: read timeout for service public/qmgr
    Mar 30 23:51:28 ksez postfix/qmgr[3104]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:51:29 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3104 exit status 1
    Mar 30 23:51:29 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:52:29 ksez postfix/qmgr[3107]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:52:30 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3107 exit status 1
    Mar 30 23:52:30 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:53:30 ksez postfix/qmgr[3112]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:53:31 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3112 exit status 1
    Mar 30 23:53:31 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:54:02 ksez postfix/smtpd[3113]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:54:03 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3113 exit status 1
    Mar 30 23:54:03 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:54:31 ksez postfix/qmgr[3114]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:54:32 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3114 exit status 1
    Mar 30 23:54:32 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:55:03 ksez postfix/smtpd[3115]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:55:04 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3115 exit status 1
    Mar 30 23:55:04 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:55:32 ksez postfix/qmgr[3116]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:55:33 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3116 exit status 1
    Mar 30 23:55:33 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:56:04 ksez postfix/smtpd[3117]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:56:05 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3117 exit status 1
    Mar 30 23:56:05 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:56:33 ksez postfix/qmgr[3118]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:56:34 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3118 exit status 1
    Mar 30 23:56:34 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:57:05 ksez postfix/smtpd[3119]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:57:06 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3119 exit status 1
    Mar 30 23:57:06 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:57:34 ksez postfix/qmgr[3121]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:57:35 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3121 exit status 1
    Mar 30 23:57:35 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:58:06 ksez postfix/smtpd[3122]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:58:07 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3122 exit status 1
    Mar 30 23:58:07 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:58:35 ksez postfix/qmgr[3123]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:58:36 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3123 exit status 1
    Mar 30 23:58:36 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 30 23:59:07 ksez postfix/smtpd[3125]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:59:08 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3125 exit status 1
    Mar 30 23:59:08 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 30 23:59:36 ksez postfix/qmgr[3126]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 30 23:59:37 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3126 exit status 1
    Mar 30 23:59:37 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:00:08 ksez postfix/smtpd[3255]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:00:09 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3255 exit status 1
    Mar 31 00:00:09 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:00:37 ksez postfix/qmgr[3257]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:00:38 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3257 exit status 1
    Mar 31 00:00:38 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:01:09 ksez postfix/smtpd[3271]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:01:10 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3271 exit status 1
    Mar 31 00:01:10 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:01:38 ksez postfix/qmgr[3272]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:01:39 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3272 exit status 1
    Mar 31 00:01:39 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:02:10 ksez postfix/smtpd[3273]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:02:11 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3273 exit status 1
    Mar 31 00:02:11 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:02:39 ksez postfix/qmgr[3274]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:02:40 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3274 exit status 1
    Mar 31 00:02:40 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:03:11 ksez postfix/smtpd[3275]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:03:12 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3275 exit status 1
    Mar 31 00:03:12 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:03:41 ksez postfix/qmgr[3276]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:03:42 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3276 exit status 1
    Mar 31 00:03:42 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:04:12 ksez postfix/smtpd[3277]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:04:13 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3277 exit status 1
    Mar 31 00:04:13 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:04:42 ksez postfix/qmgr[3278]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:04:43 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3278 exit status 1
    Mar 31 00:04:43 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:05:13 ksez postfix/smtpd[3279]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:05:14 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3279 exit status 1
    Mar 31 00:05:14 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:05:43 ksez postfix/qmgr[3281]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:05:44 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3281 exit status 1
    Mar 31 00:05:44 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:06:14 ksez postfix/smtpd[3302]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:06:15 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3302 exit status 1
    Mar 31 00:06:15 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:06:44 ksez postfix/qmgr[3306]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:06:45 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3306 exit status 1
    Mar 31 00:06:45 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:07:15 ksez postfix/smtpd[3307]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:07:16 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3307 exit status 1
    Mar 31 00:07:16 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:07:45 ksez postfix/qmgr[3312]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:07:46 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3312 exit status 1
    Mar 31 00:07:46 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:08:16 ksez postfix/smtpd[3316]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:08:17 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3316 exit status 1
    Mar 31 00:08:17 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:08:46 ksez postfix/qmgr[3321]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:08:47 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3321 exit status 1
    Mar 31 00:08:47 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:09:17 ksez postfix/smtpd[3323]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:09:18 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3323 exit status 1
    Mar 31 00:09:18 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:09:47 ksez postfix/qmgr[3324]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:09:48 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3324 exit status 1
    Mar 31 00:09:48 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:10:18 ksez postfix/smtpd[3325]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:10:19 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3325 exit status 1
    Mar 31 00:10:19 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:10:48 ksez postfix/qmgr[3327]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:10:49 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3327 exit status 1
    Mar 31 00:10:49 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:11:19 ksez postfix/smtpd[3328]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:11:20 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3328 exit status 1
    Mar 31 00:11:20 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:11:49 ksez postfix/qmgr[3329]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:11:50 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3329 exit status 1
    Mar 31 00:11:50 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:12:20 ksez postfix/smtpd[3330]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:12:21 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3330 exit status 1
    Mar 31 00:12:21 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:12:50 ksez postfix/qmgr[3346]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:12:51 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3346 exit status 1
    Mar 31 00:12:51 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:13:21 ksez postfix/smtpd[3356]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:13:22 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3356 exit status 1
    Mar 31 00:13:22 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:13:51 ksez postfix/qmgr[3358]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:13:52 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3358 exit status 1
    Mar 31 00:13:52 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:14:22 ksez postfix/smtpd[3359]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:14:23 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3359 exit status 1
    Mar 31 00:14:23 ksez postfix/master[3061]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    Mar 31 00:14:52 ksez postfix/qmgr[3360]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:14:53 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/qmgr pid 3360 exit status 1
    Mar 31 00:14:53 ksez postfix/master[3061]: warning: /usr/libexec/postfix/qmgr: bad command startup -- throttling
    Mar 31 00:15:23 ksez postfix/smtpd[3361]: fatal: /etc/postfix/mysql/relay_domains.cf: bad string length 0 < 1: dbname =
    Mar 31 00:15:24 ksez postfix/master[3061]: warning: process /usr/libexec/postfix/smtpd pid 3361 exit status 1
    Mar 31 00:15:24 ksez postfix/master[3061]: