Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим

Обновлено Обновлено: Опубликовано Опубликовано:

Термины по теме: Postfix, POP3, SMTP, IMAP, MariaDB, CentOS, PostfixAdmin, DovecotRoundcube

В данной инструкции выполнена настройка полноценного почтового сервера. Список всех особенностей и возможностей:

  • Почтовая система на базе Postfix;
  • Поддержка виртуальных доменов;
  • Хранение почты на сервере;
  • Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
  • Поддержка шифрования;
  • Хранение части настроек в MariaDB;
  • Защита от СПАМа и вирусов;
  • Доступ к почте с помощью веб-интерфейса (Roundcube);
  • Возможность управление почтовыми ящиками с помощью PostfixAdmin.

Содержание

1. Преднастройка системы

Напоминаю, данная инструкция написана под систему Linux CentOS версии 7.

Общие настройки

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

hostnamectl set-hostname relay.dmosk.ru

* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru.

Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):

yum install chrony wget

chrony для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов.

Задаем временную зону (в данном примере московское время):

timedatectl set-timezone Europe/Moscow

Разрешаем сервис для синхронизации времени и запускаем его:

systemctl enable chronyd --now

Обновляем систему:

yum update

Настройка безопасности

Заранее открываем порты на брандмауэре с помощью firewalld:

firewall-cmd --permanent --add-port=25/tcp --add-port=80/tcp --add-port=110/tcp --add-port=143/tcp --add-port=443/tcp --add-port=465/tcp --add-port=587/tcp --add-port=993/tcp --add-port=995/tcp

firewall-cmd --reload

* где мы откроем следующие порты:

  • 25 — стандартный SMTP через STARTTLS;
  • 80 — HTTP для порталов Postfixadmin и Roundcube;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.

В CentOS также может использоваться утилита iptables — в таком случае команды будут следующие:

iptables -I INPUT 1 -p tcp --match multiport --dports 25,465,587 -j ACCEPT

iptables -I INPUT 1 -p tcp --match multiport --dports 110,143,993,995 -j ACCEPT

iptables -I INPUT 1 -p tcp --match multiport --dports 80,443 -j ACCEPT

После сохраняем правила любым из описанных способов.

Отключение SELinux

Для отключения дополнительного компонента безопасности вводим 2 команды:

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

* первая команда отключит SELinux для текущей загрузки. Вторая оставит его отключенным на постоянной основе.

2. Настройка веб-сервера: NGINX + PHP + MariaDB

Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.

Установка NGINX

Устанавливаем репозиторий EPEL:

yum install epel-release

Устанавливаем nginx:

yum install nginx

Разрешаем автозапуск сервиса и запускаем его:

systemctl enable nginx

systemctl start nginx

Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.

Приветствие NGINX — все настроено верно

PHP + PHP-FPM + NGINX

Устанавливаем php и php-fpm:

yum install php php-fpm

Настраиваем NGINX:

vi /etc/nginx/conf.d/default.conf

server {
    listen       80 default_server;
    set $root_path /usr/share/nginx/html;

    location / {
        root   $root_path;
        index index.php index.html;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
}

* где /usr/share/nginx/html — каталог для размещения портала управления Postfix; /var/run/php-fpm/php5-fpm.sock — путь до сокетного файла для взаимодействия с php-fpm (будет настроено ниже). 

Если мы хотим, чтобы postfixadmin был на отдельном виртуальном домене, создаем файл:

vi /etc/nginx/conf.d/postfixasdmin.conf

server {
    listen       80;
    server_name postfixasdmin.dmosk.ru;
    set $root_path /usr/share/nginx/html;

    location / {
        root $root_path;
        index index.php;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
}

postfixasdmin.dmosk.ru — доменное имя узла, к которому мы будем подключаться для работы с Postfixasdmin.

Настраиваем PHP-FPM:

vi /etc/php-fpm.d/www.conf

listen = /var/run/php-fpm/php5-fpm.sock

* здесь мы поменяли строку 127.0.0.1:9000.

Запускаем сервисы:

systemctl enable php-fpm

systemctl start php-fpm

systemctl restart nginx

* если в процессе перезапуска nginx выскочит ошибка nginx: [emerg] a duplicate default server, необходимо найти настройку виртуального домена, в которой также указана опция default_server — опцию нужно убрать. Или можно самостоятельно настроить другой виртуальный домен.

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

vi /usr/share/nginx/html/index.php

<?php phpinfo(); ?>

Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:

phpinfo

MariaDB

Устанавливаем сервер баз данных следующей командой:

yum install mariadb-server

Включаем автозапуск сервиса и запускаем его:

systemctl enable mariadb

systemctl start mariadb

Задаем пароль для пользователя sql root:

mysqladmin -u root password

3. Установка и настройка PostfixAdmin

Устанавливаем дополнительные компоненты для PHP:

yum install php-mysql php-mbstring php-imap

Для применения установленных пакетов, перезапускаем обработчик скриптов:

systemctl restart php-fpm

Скачиваем PostfixAdmin:

wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz

В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:

mkdir /usr/share/nginx/html/postfixadmin

tar -C /usr/share/nginx/html/postfixadmin -xf postfixadmin.tar.gz --strip-components 1

Создаем каталог templates_c внутри папки портала (без него не запустится установка):

mkdir /usr/share/nginx/html/postfixadmin/templates_c

Задаем права на каталог:

chown -R apache:apache /usr/share/nginx/html/postfixadmin

* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя apache.

Создаем базу данных postfix и учетную запись в mariadb:

mysql -u root -p

> CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* где postfix — имя базы.

> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfix123';

* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.

Выходим из командной оболочки MariaDB:

> quit

Создаем конфигурационный файл postfixadmin:

vi /usr/share/nginx/html/postfixadmin/config.local.php

* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.

И добавим следующее:

<?php

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'postfix123';
$CONF['emailcheck_resolve_domain']='NO';

?>

* где configured говорит приложению, что администратор закончил его конфигурирование; default_language — используемый язык по умолчанию; database_password — пароль для базы данных, который мы задали на предыдущем шаге; emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.

Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php

Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash:

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

После перезагрузки страницы копируем хэш:

Так выглядит хэш PostfixAdmin

Открываем конфигурационный файл:

vi /usr/share/nginx/html/postfixadmin/config.local.php

И добавляем строчку:

...
$CONF['setup_password'] = '$2y$10...BMK';

* где '$2y$10...BMK' — скопированный хэш.

Загружаем по новой страницу http://<IP-адрес сервера>/postfixadmin/public/setup.php — теперь у нас появится форма для ввода нашего пароля, созданного на предыдущем этапе. Вводим его и кликаем по Login with setup_password:

Форма для входа с паролем установки

* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.

Будет выполнена установка PostfixAdmin.

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

После установки в нижней части страницы должна быть форма добавления суперпользователя — вводим данные:

Создаем суперпользователя PostfixAdmin

И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/

Вводим логин и пароль для созданного пользователя.

Готово.

Однако, конкретно, в моем случае, пользователь не создавался при установке системы и необходимо было создать администратора вручную. Если это потребуется, в консоли сервера подключаемся к СУБД:

mysql -uroot -p

Переходим к использованию базы postfix:

> use postfix

Добавляем администратора запросом:

> INSERT INTO admin (`username`, `password`, `superadmin`, `active`) VALUES ('root@dmosk.ru', '$1$1b7ff416$/KKYqdyAd3viA3.PNu5hh/', '1', '1');

Выходим из sql-оболочки:

> quit

Теперь переходим на страницу http://<IP-адрес сервера>/postfixadmin/public/login.php вводим логин root@dmosk.ru и пароль qwe12345 — мы должны оказаться в системе управления почтой.

4. Настройка Postfix

По умолчанию, Postfix уже установлен в CentOS 7. Но если встретится сервер без него, выполним установку простой командой:

yum install postfix

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

groupadd -g 1024 vmail

useradd -d /home/mail -g 1024 -u 1024 vmail -m

* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.

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

vi /etc/postfix/main.cf

И редактируем следующие строки:

myorigin = $mydomain

* данная настройка указывает, какой домен подставлять отправителю, если он не указан в заголовке FROM.

mydestination = localhost.$mydomain, localhost, localhost.localdomain

* указываем, для каких доменов принимаем входящую почту.

local_recipient_maps = unix:passwd.byname $alias_maps

* указываем, откуда брать список локальных пользователей.

mynetworks = 127.0.0.0/8

* разрешаем отправлять сообщения локальному серверу.

inet_interfaces = all

* необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех (all). Также можно задать варианты loopback-only (127.0.0.1) или конкретный IP-адрес интерфейса.

inet_protocols = all

* данный параметр задаст протокол для работы postfix. В данном примере на всех (all). Также можно задать значения ipv4 или ipv6.

Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:

myhostname = mx01.dmosk.ru

Теперь в конец конфигурационного файла допишем следующее:

virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key
smtpd_use_tls = yes
smtp_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes

* где:

  • virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX.
  • virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей.
  • virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей.
  • virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей.
  • virtual_minimum_uid — с какого номера присваивать идентификаторы пользователям.
  • virtual_uid_maps — идентификатор пользователя, от которого записываются сообщения.
  • virtual_gid_maps — идентификатор группы, от которой записываются сообщения.
  • virtual_transport — задает доставщика сообщений.
  • dovecot_destination_recipient_limit — передача сообщений от Postfix в Dovecot выполняется по заданному количеству (в нашем примере, по 1 шт.).
  • smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
  • smtpd_sasl_exceptions_networks — исключение сетей от использования шифрования.
  • smtpd_sasl_security_options — дополнительные опции настройки sasl.
  • broken_sasl_auth_clients — эту опцию прописываем для клиентов MS Outlook.
  • smtpd_sasl_type — указывает тип аутентификации.
  • smtpd_sasl_path — путь до временных файлов обмена информацией с Dovecot. Указывается либо абсолютный путь, либо относительный queue_directory (по умолчанию /var/spool/postfix). Итого, полный путь — /var/spool/postfix/private/auth.
  • smtpd_tls_cert_file — полный путь до публичного сертификата.
  • smtpd_tls_key_file — полный путь до приватного сертификата.
  • smtp_use_tls — по возможности, нужно ли передавать сообщения по защищенному каналу.
  • smtpd_use_tls — указывает клиентам на наличие поддержки TLS.
  • smtpd_tls_auth_only — использовать только TLS.
  • smtpd_helo_required — требовать начинать сессию с приветствия.

Создаем файл с настройками обращения к базе с алиасами:

vi /etc/postfix/mysql_virtual_alias_maps.cf

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

* где user и password — логин и пароль для подключения к MySQL; hosts — имя сервера баз данных (в нашем случае, локальный сервер); dbname — имя базы данных; query — шаблон запроса к данным.

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

vi /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'

И файл с почтовыми ящиками:

vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Открываем файл master.cf и дописываем в самый конец:

vi /etc/postfix/master.cf

submission   inet  n  -  n  -  -  smtpd
  -o smtpd_tls_security_level=may
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname

smtps   inet  n  -  n  -  -  smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

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

* необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587. В файле master.cf мы настраиваем работу вспомогательных сервисов для Postfix. Описание каждого сервиса начинается с новой строки без отступа. Затем идут настройки для сервиса и параметры запуска. Для примера, рассмотрим первую добавленную строку — 
submission   inet  n  -  n  -  -  smtpd:

  • submission — имя сервиса. Возможно использование заранее определенных в postfix служб или создание своих. В данном примере submission для подключения MUA по порту 587 при отправке почты.
  • inet — тип обслуживания. Возможны варианты inet (сокет TCP/IP), unix (потоковый сокет), unix-dgram (сокет дейтаграммы), fifo (именованный канал очереди), pass (потоковый сокет UNIX-домена).
  • первый "n" — является ли сервис частным и должен быть ограниченным. Возможны варианты y или n. Для типа обслуживания inet может быть только n.
  • первый "-" — работает ли служба с правами root. Возможны варианты yn и -. Прочерк означает неприменимость данного параметра к конкретному сервису.
  • второй "n" — должна ли служба работать в окружении chroot. Возможны варианты y или n.
  • второй "-" — через какое время в секундах пробудить службу, если она неактивна.
  • третий "-" — максимальное количество одновременно выполняемых процессов, которые может запустить данный сервис.
  • smtpd — выполняемая команда.

* после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем слудующие аргументы:

  • smtpd_tls_security_level — задает уровень безопасности с применением TLS. В данном примере may говорит о возможности его использования.
  • smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
  • smtpd_sasl_type — указывает тип аутентификации.
  • smtpd_sasl_path — путь до временных файлов обмена информацией с сервером хранения почты (в нашем случае Dovecot). Указывается либо абсолютный путь, либо относительный queue_directory.
  • smtpd_sasl_security_options — дополнительные опции настройки sasl.
  • smtpd_sasl_local_domain — добавить домен для пользователей, которые проходят smtp-аутентификацию.
  • syslog_name — префикс названия службы при занесении ее в системный журнал.
  • smtpd_tls_wrappermode — запускать ли службу в нестандартном режиме (для поддержки TLS).
  • smtpd_client_restrictions — настройки ограничения клиентских соединений. В данном примере разрешить только авторизованных.

Перезапустим postfix:

systemctl restart postfix

5. Настройка Dovecot

Устанавливаем Dovecot с компонентом для работы с СУБД:

yum install dovecot dovecot-mysql

Настраиваем способ хранения сообщений:

vi /etc/dovecot/conf.d/10-mail.conf

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

* в данном примере сообщения будут храниться в продвинутом формате maildir в каталоге /home/mail/<почтовый домен>/<логин пользователя>. 

Настраиваем слушателя для аутентификации:

vi /etc/dovecot/conf.d/10-master.conf

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

* в данном примере мы настраиваем сервис для аутентификации и создаем два прослушивателя: /var/spool/postfix/private/auth — для возможности постфиксом использовать авторизацию через Dovecot (обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix); auth-userdb — сокет для авторизации через dovecot-lda. Опция mode задает права на сокет, например, 666 позволит любому пользователю к нему подключиться; user и group задает пользователя и группу владельцев на сокет.

Настраиваем аутентификацию в Dovecot:

vi /etc/dovecot/conf.d/10-auth.conf

#!include auth-system.conf.ext
!include auth-sql.conf.ext

* в данном случае мы просто комментируем обычную аутентификацию и снимаем комментарий для использования sql-аутентификации.

Настраиваем использование шифрования:

vi /etc/dovecot/conf.d/10-ssl.conf

ssl = required
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key

* ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.

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

vi /etc/dovecot/conf.d/15-lda.conf

lda_mailbox_autocreate = yes

Открываем файл:

vi /etc/dovecot/conf.d/20-imap.conf

Приводим опцию imap_client_workarounds к виду:

imap_client_workarounds = outlook-idle delay-newmail

* данная настройка позволит решить проблему потери соединения между Outlook и сервером IMAP.

Настраиваем подключение к нашей базе данных:

vi /etc/dovecot/conf.d/auth-sql.conf.ext

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

userdb {
  …
  args = /etc/dovecot/dovecot-sql.conf.ext
}

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

Создаем файл с настройками работы с mysql:

vi /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix123
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'

* в данном примере мы настроили запрос на получение данных из базы mysql (mariadb). password_query — запрос на получение пароля из таблицы mailbox; user_query — запрос на получение данных пользователя (домашняя почтовая директория, идентификатор 1024 (идентификатор созданного нами ранее пользователя vmail).

И, напоследок, настраиваем интерфейс, на котором будет слушать dovecot:

vi /etc/dovecot/dovecot.conf

listen = *

* по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:
master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
master: Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol

Генерируем сертификаты безопасности

Создаем каталог, в котором разместим сертификаты:

mkdir -p /etc/ssl/mail

И сгенерируем их следующей командой:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=relay.dmosk.ru"

* сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.
* если мы хотим использовать сертификат, который будет проходить все проверки безопасности, его нужно купить или запросить у Let's Encrypt.

Запускаем dovecot:

systemctl enable dovecot

systemctl start dovecot

6. Создаем первый почтовый ящик и проверяем работу сервера

В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.

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

Переходим в Список доменов - Новый домен:

Создаем новый домен в Postfixadmin

Заполняем формы и нажимаем по Добавить домен:

Данные домена

Теперь переходим в Обзор - Создать ящик:

Создаем новый почтовый ящик через Postfixadmin

Вводим данные нового пользователя и нажимаем по Создать ящик:

Заполняем данные для создания нового ящика

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

Параметры для подключения:

  • Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
  • IMAP: 143 STARTTLS или 993 SSL/TLS
  • POP3: 110 STARTTLS или 995 SSL/TLS
  • SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS

* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).

7. Устанавливаем и настраиваем Roundcube Webmail

На официальном сайте заходим на страницу загрузки Roundcube. Смотрим версию продукта (желательно, LTS):

Смотрим LTS версию Roundcube

В нашем примере это версия 1.5.6. Создаем переменную:

RCUBE_VER=1.5.6

Загружаем архив программы:

wget https://github.com/roundcube/roundcubemail/releases/download/${RCUBE_VER}/roundcubemail-${RCUBE_VER}-complete.tar.gz

Создаем каталог, где будут размещаться файлы портала:

mkdir /usr/share/nginx/html/webmail

И распаковываем скачанный архив:

tar -C /usr/share/nginx/html/webmail -xf roundcubemail-*.tar.gz --strip-components 1

Копируем шаблон конфига:

cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php

И открываем его на редактирование:

vi /usr/share/nginx/html/webmail/config/config.inc.php

$config['db_dsnw'] = 'mysql://roundcube:roundcube123@localhost/roundcubemail';
$config['enable_installer'] = true;

* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.

Также дописываем в конфигурационный файл следующее:

$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;

* настройка $config['create_default_folders'] = true создает папки по умолчанию, если их нет:

  • Drafts — Черновики.
  • Junk — СПАМ.
  • Sent — Отправленные.
  • Trash — Корзина.

* Без данной настройки, если не создавались папки другим клиентом, веб-клиент будет выдавать ошибки при пересещении писем, например, при их удалении.

Задаем владельца apache на папку портала:

chown -R apache:apache /usr/share/nginx/html/webmail

Создаем в MariaDB базу для roundcubemail:

mysql -uroot -p

> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Создаем пользователя и даем ему полные права на созданную базу:

> CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'roundcube123'; 

> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost;

Выходим в Linux shell:

> quit

И загружаем в созданную базу данные:

mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql

Если система вернет ошибку ERROR 1071 (42000) at line 51: Specified key was too long; max key length is 767 bytes, переходим к решению ниже.

Устанавливаем компоненты, необходимые для работы Roundcube:

yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime php-imagick php-gd php-zip

Настроим php:

vi /etc/php.ini

date.timezone = "Europe/Moscow"
...
allow_url_fopen = On

* date.timezone задает часовой пояс (в данном примере московское время); allow_url_fopen включает поддержку оберток URL, которые позволяют работать с ними как с обычными файлами.

Перезагружаем php-fpm:

systemctl restart php-fpm

Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).

На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.

Открываем конфигурационный файл roundcube:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Запрещаем установку портала:

$config['enable_installer'] = false;

После удаляем папку с установочными скриптами:

rm -rf /usr/share/nginx/html/webmail/installer

И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/.

В редких случаях, мы можем получить ошибку 504 при попытке войти в систему. Проблема может быть в несовместимости механизма аутентификации между MySQL и Roundcube. Для решения проблемы необходимо задать пароль учетной записи roundcube с использованием нативного плагина:

mysql -uroot -p

> ALTER USER 'roundcube'@'localhost' IDENTIFIED WITH mysql_native_password BY 'roundcube123';

> FLUSH PRIVILEGES;

> quit

Если при отправке сообщения мы видим ошибку авторизации SMTP, открываем конфигурационный файл roundcube:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Приводим опцию smtp_pass к виду:

$config['smtp_pass'] = '';

8. Защищаемся от вирусов

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

Установка и настройка ClamAV

Устанавливаем антивирус:

yum install clamav clamsmtp clamav-scanner-systemd clamav-update

Добавляем в postfix:

vi /etc/postfix/main.cf

content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings

* где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами.

Теперь редактируем master.cf:

vi /etc/postfix/master.cf

Дописываем следующее:

scan   unix  -  -  n  -  16  smtp
  -o smtp_send_xforward_command=yes
  -o smtp_enforce_tls=no

127.0.0.1:10026   inet  n  -  n  -  16  smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8

* итак, данной настройкой мы создадим два вспомогательных сервиса scan и 127.0.0.1:10026 (сервис без имени, он просто будет слушать на порту 10026 — это порт по умолчанию, на который отправляет сообщение антивирусная программа clam после выполнения проверки). Также, мы используем следующие опции:

  • smtp_send_xforward_command — передавать ли в сканирование сообщение с исходными именем клиента и IP-адресом. В данном примере, да.
  • smtp_enforce_tls — требовать ли TLS.
  • content_filter — приложение для сканирования. В данном примере сканирование отключено.
  • receive_override_options переопределяет опции в main.cf. В нашем случае, no_unknown_recipient_checks отключает попытки выяснить, является ли получатель неизвестным; no_header_body_checks отключает проверки заголовков и тала писем.
  • пустые значения для smtpd_helo_restrictionssmtpd_client_restrictionssmtpd_sender_restrictions отключают ограничения для данных опций.
  • smtpd_recipient_restrictions — контролирует ответ Postfix на SMTP-команду RCPT TO. Здесь мы разрешаем только соединения от узлов, перечисленных в mynetworks.
  • mynetworks_style=host указывает postfix, что он должен пересылать почту только с локального компьютера.
  • smtpd_authorized_xforward_hosts укажет, какие удаленные клиенты могут использовать XFORWARD. В данном случае локальный компьютер.

Конфигурируем clamsmtpd:

vi /etc/clamsmtpd.conf

ClamAddress: /tmp/clamd.sock

* где ClamAddress указываем на путь к сокетному файлу — он должен совпадать с путем к LocalSocket в конфигурационном файле для clamscan;

Редактируем конфигурационный файл для clamscan:

vi /etc/clamd.d/scan.conf

#Example
...
LocalSocket /tmp/clamd.sock
...
User clamsmtp

* где #Example — закомментированная Example, которая не позволит запустить сканер, пока ее не удалить или закомментировать; LocalSocket — путь до сокетного файла для взаимодействия с clamsmtp; User — пользователь, от которого будет запускаться clamd.

Открываем файл:

vi /etc/freshclam.conf

Комментируем строку:

##DatabaseMirror database.clamav.net

И добавляем:

PrivateMirror https://packages.microsoft.com/clamav/

Обновляем антивирусную базу:

freshclam

Теперь разрешаем запуск антивируса:

systemctl enable clamsmtpd

systemctl enable clamd@scan

Запускаем clamscan:

systemctl start clamd@scan

* запуск может занять некоторое время. Если мы получим ошибку Job for clamd.service failed because timeout was exceeded, переходим к ее решению.

И после запускаем clamsmtpd:

systemctl start clamsmtpd

И также перезапускаем postfix:

systemctl restart postfix

Настройка обновлений антивируса

Для настройки автоматического обновления, редактируем cron:

crontab -e

15 3 * * * /bin/freshclam

* в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav.

Проверка

Для проверки отправляем сообщение со следующим содержимым:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Письмо не должно дойти, а в логе должны увидет строку:

Mar 22 15:50:03 mx01 postfix/smtp[6189]: B5BEDCAF3E0: to=<test01@dmosk.local>, relay=127.0.0.1[127.0.0.1]:10025, delay=0.1, delays=0.01/0/0.04/0.04, dsn=2.0.0, status=sent (250 Virus Detected; Discarded Email)

9. Боремся со СПАМом

Проверка контента с помощью Spamassassin

Устанавливаем spamassassin:

yum install spamassassin

Редактируем master.cf:

vi /etc/postfix/master.cf

Для smtp добавляем опцию фильтра: 

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

* в данном случае мы добавим к сервису postfix smtp дополнительную опцию content_filter, которая отвечает за запуск фильтрации контента; spamassassin указывает на имя сервиса, который будет запускаться для фильтрации.

И добавить сам сервис для фильтра:

spamassassin      unix  -       n       n       -       -       pipe
  flags=R user=spamd argv=/usr/bin/spamc -u spamd -e /usr/sbin/sendmail -f $sender $recipient

spamassassin — добавляемый сервис фильтрации; /usr/bin/spamc — путь до исполняемого файла спамассасина; spamd — учетная запись, от которой запучкается spamassassin.

Создаем учетную запись spamd:

useradd spamd

Обновляем spamassassin:

sa-update --nogpg --verbose

Разрешаем его запуск и стартуем сервис:

systemctl enable spamassassin

systemctl start spamassassin

Перезапускаем postfix:

systemctl restart postfix

Для автоматического обновления добавим в cron следующее:

crontab -e

30 3 * * * /bin/sa-update

* обновление будет происходить каждый день в 03:30.

Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

В итоге должно прийти письмо с меткой в теме [SPAM], а в логах мы увидим:

... spamd: identified spam (999.0/5.0) for spamd:1025 in 0.2 seconds, 695 bytes.
... spamd: result: Y 999 - ALL_TRUSTED,GTUBE scantime=0.2,size=695,user=spamd,uid=1025,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=57254,mid=<20190328105822.3875FCAFD47@mx01.dmosk.local>,autolearn=no autolearn_force=no

Исходящие письма

Мы настроили антиспам фильтр для smtp-соединения. В основном, он будет отрабатывать для входящей почты. Если нам необходимо также проверять исходящую почту, в master.cf добавляем content_filter для smtps и submission:

vi /etc/postfix/master.cf

...
submission     inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin
    ...

smtps      inet n - n - - smtpd
  -o content_filter=spamassassin
  ...

Перезапускаем postfix:

systemctl restart postfix

Пересылка СПАМа на другой ящик

Все письма со спамом будут отправляться в ящик пользователя с пометкой в теме [SPAM]. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить обработку заголовков с перенаправлением сообщений.

Открываем конфигурационный файл Postfix:

vi /etc/postfix/main.cf

Проверяем наличие строки:

header_checks = regexp:/etc/postfix/header_checks

... и если ее нет, то добавляем.

Открываем на редактирование файл:

vi /etc/postfix/header_checks

И добавляем строку:

/^SUBJECT:\s+\[SPAM\]/ REDIRECT spam@dmosk.ru

Проверим, что мы все сделали правильно:

postmap -q "SUBJECT: [SPAM]" regexp:/etc/postfix/header_checks

Мы должны увидеть что-то на подобие:

REDIRECT spam@dmosk.ru

Перезапускаем Postfix:

systemctl restart postfix

Антиспам средствами Postfix

В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:

client -> helo -> sender -> relay -> recipient -> data -> end_of_data

Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:

  1. Соединение с сервером.
  2. Команда HELO. Приветствие, в котором отправитель называет свое имя, по которому можно проверить, соответствует ли оно правилам именования и своему IP-адресу.
  3. MAIL FROM — указывает адрес отправителя. Выполняется для sender и relay.
  4. RCPT TO — кому отправляем письмо.
  5. DATA — команда сообщает о готовности отправить письмо с заголовками и текстом.
  6. END-OF-DATA — отправка письма.

И так, для настройки антиспама в конфигурационный файл main.cf добавляем:

vi /etc/postfix/main.cf

smtpd_client_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_pipelining
        permit

smtpd_helo_restrictions =
        permit

smtpd_sender_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_sender
        reject_unknown_sender_domain
        permit

smtpd_relay_restrictions =
        permit

smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_recipient
        reject_unauth_destination
        reject_unknown_recipient_domain
        reject_unverified_recipient
        permit

smtpd_data_restrictions =
        permit

smtpd_end_of_data_restrictions =
        permit

* где параметры:

  1. smtpd_client_restrictions — настройки ограничений при осуществлении клиентских соединений с почтовым сервером.
  2. smtpd_helo_restrictions — ограничения в контексте клиентской команды HELO.
  3. smtpd_sender_restrictions — ограничения будут применяться во время выполнения клиентской команды MAIL FROM.
  4. smtpd_relay_restrictions — ограничения пересылки почты в контексте клиентской команды RCPT TO.
  5. smtpd_recipient_restrictions — ограничения в контексте клиентской команды RCPT TO после пересылки (smtpd_relay_restrictions).
  6. smtpd_data_restrictions — ограничения будут применяться во время выполнения команды DATA.
  7. smtpd_end_of_data_restrictions — ограничения во вреся выполнения команды END-OF-DATA.

... и значения для них:

  • permit_mynetworks — разрешает все адреса, перечисленные в настройке mynetworks.
  • permit_sasl_authenticated — разрешает запросы всех успешно авторизованных клиентов.
  • reject_unauth_pipelining — запрещает отправку писем, которые отправляются заранее (пропуская правильную цепочку сессии SMTP).
  • reject_non_fqdn_sender — отклонить соединение, если адрес отправителя указан неправильно (согласно RFC).
  • reject_unknown_sender_domain — запрещает запрос, если Postfix не является конечным пунктом назначения для адреса отправителя, а домен MAIL FROM не имеет 1) DNS-записи MX и DNS-записи A или 2) искаженной MX-записи, такой как запись с MX-именем хоста нулевой длины.
  • reject_non_fqdn_recipient — запретить соединение, если адрес получателя указан неправильно (согласно RFC).
  • reject_unauth_destination — отклонить соединение, если письмо не пересылается согласно правилу relay_domains или сервер не является адресом назначения. Другими словами, запрещает использование нашего сервера в качестве open relay.
  • reject_unknown_recipient_domain — отклонить запрос, если Postfix не является конечным пунктом назначения для домена получателя, а домен RCPT TO не имеет 1) DNS-записи MX и DNS-записи A или 2) неверно сформированной MX-записи, такой как запись с именем хоста MX нулевой длины.
  • reject_unverified_recipient — отклонить запрос, если известно, что почта на адрес RCPT TO отклоняется или когда адрес получателя не доступен. 
  • permit — разрешает соединение. Ставим в конец каждого блока ограничений (если ограничения не сработали, то разрешаем).

* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.

Для усиления защиты добавляем:

smtpd_recipient_restrictions =
        ...
        reject_unknown_client_hostname
        reject_invalid_helo_hostname
        reject_non_fqdn_helo_hostname
        reject_unknown_helo_hostname
        reject_rbl_client bl.spamcop.net
        reject_rbl_client cbl.abuseat.org
        reject_rbl_client dul.ru
        reject_rbl_client dnsbl.abuse.ch
        permit

* где:

  • reject_unknown_client_hostname — проверяет наличие PRT-записи отправителя и наличие рабочей А-записи в соответствие PTR.
  • reject_invalid_helo_hostname — проверяет синтаксис HELO-приветствия.
  • reject_non_fqdn_helo_hostname — требует правильного FQDN-имени во время HELO-приветствия.
  • reject_unknown_helo_hostname — запрещает представляться именами, для которых нет А-записи или MX.
  • reject_rbl_client — проверяет наличие отправителя в черных списках.

* более подробное описание опций для защиты можно найти на странице main.cf(5).

После внесения всех правок, необходима перезагрузка Postfix:

systemctl restart postfix

Защита от СПАМа «от себя к себе»

Часто можно наблюдать ситуацию, когда приходит спам от своих же ящиков (или ящиков своего домена, хотя таких почтовых адресов у нас не существует).

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

Для решения проблемы в Postfix нужно добавить простое правило:

vi /etc/postfix/main.cf

smtpd_sender_restrictions =
        ...
        check_sender_access hash:/etc/postfix/sender_access

Создадим сам файл:

vi /etc/postfix/sender_access

dmosk.ru REJECT Relay from dmosk.ru are denied

Создаем карту:

postmap /etc/postfix/sender_access

Перезапускаем постфикс:

systemctl restart postfix

10. Отправка почты наружу

Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.

Настройки DNS для сервера

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

1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.

И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:

postconf -n smtpd_banner

Если мы получим пустой ответ, то вводим:

postconf -d smtpd_banner

2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.

Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.

Настройки DNS для домена

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

  1. SPF.
  2. DMARC.

Настройка DKIM

DKIM настраивается на сервере, а для каждого домена создается специальная запись в DNS. Подробнее в инструкции Настройка DKIM + Postfix.

Возможные проблемы

1. Job for clamd.service failed because timeout was exceeded

Появляется при попытке запустить службу clamd.

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

Решение: увеличиваем время, в течение которого может стартовать сервис. Для этого открываем файл настройки юнита systemd для clamd:

vi /usr/lib/systemd/system/clamd.service

В раздел [Service] добавляем:

...
[Service]
...
TimeoutSec=900

...

Перечитываем юнит:

systemctl daemon-reload

Снова пробуем запустить clamscan:

systemctl start clamd@scan

2. SQLSTATE[HY000] [2002] No such file or directory

Ошибка появляется при попытке установить PostfixAdmin на этапе установки соединения с базой данных.

Причина: при попытке соединиться с базой по имени localhost, последний может разрешаться в IP-адрес, на котором не слушает запросы MySQL или который ведет на IPv6.

Решение: пробуем подключиться к нашему хосту по адресу 127.0.0.1. Для начала подключаемся к командной строке СУБД:

mysql -u root -p

Создаем пользователя, которому можно подключаться с адреса 127.0.0.1:

> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY '127.0.0.1';

Выходим:

> quit

Теперь в конфигурационном файле:

vi /usr/share/nginx/html/postfixadmin/config.local.php

... добавляем:

...
$CONF['database_host'] = '127.0.0.1';
...

3. ERROR 1071 (42000) at line 51: Specified key was too long; max key length is 767 bytes

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

Причина: в старых версиях MySQL максимальный размер для длины префикса индекса равен 767 байт. Этого достаточно, чтобы создать поле varchar(255) в кодировке utf8, но схема Roundcube пытается использовать кодировку utf8mb4, для которой 767 байт — это 191 символ. В результате мы не можем создать таблицу с таким полем.

Решение: в файле дампа, который идет в комплекте с Roundcube изменим кодировку на utf8.

Это можно сделать одной командой:

sed -e 's/utf8mb4/utf8/g' -i /usr/share/nginx/html/webmail/SQL/mysql.initial.sql

Удаляем созданную базу для roundcube и заново ее создает. После можно еще раз восстановить схему.

# CentOS # Linux # MySQL # NGINX # UNIX # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет