- Брендирование (свой логотип и название)
- Возможные проблемы
- Libfreshclam init failed
- Подключение к удаленным почтовым серверам
- Настройка DKIM
- Скачать Roundcube
- Полезные настройки
- Создание писем в формате HTML
- Время сессии
- Отображение писем
- Установка и настройка PostfixAdmin
- Сервер баз данных
- Автоматическая настройка почтовых клиентов
- Зависимости PHP
- Настроить Roundcube
- Защищаемся от вирусов и СПАМа
- Установка и настройка Clamav + Amavisd
- Настройка обновлений антиспама
- Проверка
- Пересылка СПАМа и вирусов на другой ящик
- Обучение антиспама
- Подготовка
- Включить плагины Roundcube
- Настроить Nginx
- Создаем первый почтовый ящик и проверяем работу сервера
- Устанавливаем и настраиваем Roundcube Webmail
- Возможные ошибки
- Неудачное соединение с IMAP сервером
- Return type of zipdownload_mbox_filter
- Изменение размера вложения
- Папки на русском в Outlook
- Проверьте установку Roundcube
- Настройка квот
- Антиспам средствами Postfix
- Заголовки
- Проверка SPF
- Защита от СПАМа «от себя к себе»
- Настройка веб-сервера
- PHP + PHP-FPM + NGINX
- MariaDB
- Отправка почты наружу
- Настройки DNS для сервера
- Настройки DNS для домена
- Создать базу данных MySQL
- Смена пароля в roundcube
- Разное
- Настройка ограничений
- Смена email адреса
- Настройка Dovecot
- Подготовка системы
- Общие настройки
- Настройка безопасности
Брендирование (свой логотип и название)
Roundcube можно настроить для отображения вашего логотипа и названия. Для этого открываем конфигурационный файл:
Добавляем строки (или редактируем):
* skin_logo указывает путь относительно каталога roundcube (но если указать первым символом /, то путь будет относительно каталога с темой — это может быть полезным, если для каждой темы должен быть свой логотип); product_name — задает название в нижней части формы авторизации.
Создаем каталог для хранения изображений:
Открываем веб-интерфейс и проверяем, что логотип и название поменялись.
Возможные проблемы
При попытке подключиться к серверу мы можем увидеть ошибку «Невозможно установить безопасное соединение с сервером «IMAP».
Причина: в старых системах используется по умолчанию TLS 1.0, поддержка которого уже отсутствует.
Решение: необходимо выполнить 3 действия.
1. Устанавливаем обновление KB3140245.
2. Создаем две ветки реестра:
Это можно выполнить вручную в утилите regedit или ввести команды:
reg add «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSchannelProtocolsTLS 1.1Client»
reg add «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSchannelProtocolsTLS 1.2Client»
В созданных ветках создаем параметр DisabledByDefault с типом DWORD (32 бита) и значением 0. Это можно выполнить командами:
reg add «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSchannelProtocolsTLS 1.1Client» /v DisabledByDefault /t REG_DWORD /d 0
reg add «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSchannelProtocolsTLS 1.2Client» /v DisabledByDefault /t REG_DWORD /d 0
3. Перезагружаем компьютер.
Не запускается служба clamav-daemon, а в логе мы можем увидеть ошибку:
LibClamAV Error: cli_loaddbdir(): No supported database files found in /var/lib/clamav
ERROR: Can’t open file or directory
Причина: нет антивирусных баз.
Решение: для получения баз достаточно запустить команду:
Если команда вернет ошибку, переходим к решению ниже.
Libfreshclam init failed
При запуске команды freshclam мы можем получить ошибку:
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!
А в логе /var/log/clamav/freshclam.log можно увидеть строку:
Решение: меняем источник баз. Открываем файл:
Комментируем строки, которые начинаются на ##DatabaseMirror
systemctl stop clamav-freshclam
Удаляем старую информацию об обновлениях:
rm -f /var/lib/clamav/freshclam.dat
Ждем обновления, после запускаем службу clamav-freshclam и перезапускаем clamav-daemon:
systemctl restart clamav-daemon
Подключение к удаленным почтовым серверам
По умолчанию, roundcube подключается к локальному хосту. Если наш почтовый сервер расположен удаленно, открываем файл:
Редактируем опции default_host и smtp_server, например:
* в данном примере мы указали, что подключение к серверу по IMAP и SMTP выполняются с использованием TLS.
Важно отметить, что существуют различные вариации подключения к почтовой системе. Например, по открытым портам:
Или с помощью TLS:
Или с помощью SSL:
Обратите внимание, что адреса подключения по SSL указаны не IP, а именами. Это сделано сознательно, так как SSL проходит более строгую проверку сертификата, что потребует обращение по имени. При этом на стороне почтовой системы сертификат должен быть настроен также корректно. Но если мы хотим игнорировать проверку сертификата, то можем добавить в конфигурацию следующее:
Настройка DKIM
Подпись писем не является обязательной, но помогает не попадать в СПАМ. D KIM настраивается для каждого домена, а также должна создаваться специальная запись в DNS. Рассмотрим создание и настройку DKIM в amavisd.
Создаем каталог для хранения ключей:
mkdir -p /var/lib/dkim
Для нашего удобства создаем переменную с доменом, для которого будем создавать DKIM:
* где hostname -d — команда, которая вернет нам домен из имени нашего сервера. При необходимости создать dkim для другого домена, пропишем его вручную, а не с использованием команды.
Посмотреть значение полученной переменной можно командой:
Генерируем последовательность для нашего домена:
Задаем права на созданный файл:
chown amavis:amavis /var/lib/dkim/*.pem
chmod 0400 /var/lib/dkim/*.pem
Открываем конфигурационный файл amavisd:
* в данном примере мы закомментировали первую строку и раскомментировали вторую. Это укажет amavis, что он должен запускаться и работать на двух портах.
А также добавим:
$enable_dkim_verification = 1;
$enable_dkim_signing = 1;
dkim_key(‘dmosk.ru’, «dkim», «/var/lib/dkim/dmosk.ru.pem»);
* где dmosk.ru — домен, для которого мы настраиваем dkim; /var/lib/dkim/dmosk.ru.pem — путь до сгенерированного файла с последовательностью.
systemctl restart amavis
Посмотреть DKIM последовательность для нового домена можно командой:
Мы должны увидеть что-то на подобие:
; key#1 1024 bits, i=dkim, d=dmosk.ru, /var/lib/dkim/dmosk.ru.pem
dkim._domainkey.dmosk.ru. 3600 TXT (
«v=DKIM1; p=»
«MIGfMA0SDFqGSIb3DQEBAQUAA4GNADCBiQKBgQC44iOK+99mYBxsnIl1Co8n/Oeg»
«4+x90sxqWzoGW42d/GCP4wiYqVqncc37a2S5Berv0OdoCGcmkDkKWh4CHhFD4blk»
«x6eMYXsp1unAdo2mk/OVK7M2ApraIkh1jVbGBZrREVZYTE+uPOwtAbXEeRLG/Vz5»
«zyQuIpwY2Nx3IgEMgwIDAQAB»)
Проверить корректность настройки DKIM можно командой:
Переходим к настройке Postfix. Мы должны добавить отправку всех исходящих писем на проверку в amavis на порт 10026 и принимать обратно письма на порт 10027.
Отредактируем submission и smtps, добавив content_filter:
127.0.0.1:10027 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
systemctl restart postfix
* в данном примере мы указали, что соединение для отправки почты должно быть защищенным. Это важно для нашей настройки DKIM.
Пробуем отправить письмо — в заголовках мы должны увидеть:
Скачать Roundcube
Начните с загрузки архива Roundcube, используя следующую команду wget :
После завершения загрузки распакуйте архив и переместите код Roundcube в каталог /var/www/roundcubemail :
tar xzf roundcubemail-1.3.8.tar.gz.tar.gzsudo mv roundcubemail-1.3.8/ /var/www/roundcubemail
sudo chown -R www-data: /var/www/roundcubemail
Полезные настройки
В данном разделе рассмотрим настройки, которые могут пригодиться в ходе эксплуатации roundcube. Изменения вводим в конфигурационном файле:
Создание писем в формате HTML
По умолчанию, все письма создаются в текстовом формате. Данное поведение можно изменить в настройках пользователя. Однако, если мы хотим, чтобы у всех пользователей по умолчанию письма создавались в HTML, добавляем строку:
* возможны варианты:
Время сессии
* время указывается в минутах. В данном примере, 24 часа.
Отображение писем
Можно указать, чтобы письма по умолчанию отображались общим списком в порядке поступления или в режиме чата. За это отвечает опция:
* возможные варианты:
Установка и настройка PostfixAdmin
Устанавливаем дополнительные компоненты для PHP:
Для применения установленных пакетов, перезапускаем обработчик скриптов:
Создаем каталог templates_c внутри папки портала (без него не запустится установка):
* в противном случае, при попытке зайти в панель управления после ее установки мы получим ошибку ERROR: the templates_c directory doesn’t exist or isn’t writeable for the webserver.
Задаем права на каталог:
* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя www-data.
Подключаемся к СУБД MySQL:
mysql -u root -p
Создаем базу данных postfix:
* где postfix — имя базы.
Создаем учетную запись в mariadb и даем ей доступ к созданной базе:
* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.
Если мы получим ошибку:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
Выходим из командной оболочки MariaDB:
* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.
* где configured говорит приложению, что администратор закончил его конфигурирование; default_language — используемый язык по умолчанию; database_password — пароль для базы данных, который мы задали на предыдущем шаге; emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.
Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash:

После копируем хэш, который появится под кнопкой:

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

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

Однако, конкретно, в моем случае, пользователь не создавался при установке системы и необходимо было создать администратора вручную. Если это потребуется, в консоли сервера подключаемся к СУБД:
mysql -uroot -p
Переходим к использованию базы postfix:
Добавляем администратора запросом:
Выходим из sql-оболочки:
Создаем своего пользователя. После чего, можно удалить того, что создали через командную строку.
Установка Postfix в Ubuntu выполняется командой:
* помимо самого postfix, мы также установим postfix-mysql для возможности работы с СУБД.
В процессе установки должно появиться окно «Postfix Configuration» — оставляем Internet Site:

В следующем окне оставляем имя сервера и нажимаем Enter.
После установки пакетов создаем учетную запись, от которой мы будем работать с каталогом виртуальных почтовых ящиков:
groupadd -g 1024 vmail
* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail — в ней у нас будет храниться почта. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.
Если директория для почты ранее уже была создана, то необходимо задать в качестве владельца нашего созданного пользователя:
chown vmail:vmail /home/mail
Теперь открываем на редактирование конфигурационный файл почтового сервера:
И редактируем следующие строки:
Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в 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
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
Создаем файл с настройками обращения к базе с алиасами:
Создаем файл с инструкцией получения данных по виртуальным доменам:
И файл с почтовыми ящиками:
Открываем файл 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
* необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587. В файле master.cf мы настраиваем работу вспомогательных сервисов для Postfix. Описание каждого сервиса начинается с новой строки без отступа. Затем идут настройки для сервиса и параметры запуска. Для примера, рассмотрим первую добавленную строку —
submission inet n — n — — smtpd:
* после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем следующие аргументы:
Генерируем сертификаты безопасности. Для этого создаем каталог, в котором их разместим:
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.
Сервер баз данных
Также для Roundcube нужна СУБД — мы установим MariaDB:
apt install mariadb-server
Устанавливаем компоненты для работы php с mysql:

Автоматическая настройка почтовых клиентов
Для автоматического конфигурирования почтовых клиентов необходимо настроить сервис autodiscover. Для этого настраиваем веб-сервер, который будет возвращать почтовые настройки для домена.
Подробнее процесс настройки описан в статье Настройка Autodiscover для своего почтового сервера.
Зависимости PHP
Мы начнем с обновления списка пакетов и установки всех необходимых PHP- зависимостей:
sudo apt updatesudo apt install php-auth php-intl php-mail-mime php-mail-mimedecode php-mcrypt php-net-smtp php-net-socket php-pear php-xml php7.0-intl php7.0-mcrypt php7.0-xml php7.0-gd php7.0-gd php-imagick
После завершения установки выполните следующую команду sed чтобы установить значение date.timezone на UTC :
sudo sed -i «s/;date.timezone.*/date.timezone = UTC/» /etc/php/7.0/fpm/php.ini
Перезапустите службу PHP FPM, чтобы изменения вступили в силу:
sudo systemctl php7.0-fpm restart
Настроить Roundcube
Откройте браузер и перейдите по https://mail.linuxize.com/roundcubemail/installer .
Вам будет представлен следующий экран:

В разделе Checking available databases требуется только расширение MySQL.

Самая важная часть здесь — ввести правильные настройки базы данных MySQL.
Когда вы закончите с шагом настройки, перейдите к следующему шагу и импортируйте структуру базы данных MySQL Roundcube, нажав на кнопку Initialize database .

После создания структуры базы данных удалите каталог installer чтобы предотвратить изменение конфигурации и / или несанкционированный доступ.
sudo rm -rf /var/www/roundcubemail/installer
Включение автоматической очистки кеша Roundcube необязательно, но рекомендуется:
Защищаемся от вирусов и СПАМа
Антивирус требует много ресурсов. Будьте готовы, что после его запуска сервер начнет работать медленнее и понадобится добавить ресурсы.
Установка и настройка Clamav + Amavisd
Устанавливаем необходимые для работы антивируса и антиспама компоненты:
Добавляем пользователя clamav в группу amavis:
Открываем конфигурационный файл amavis:
Затем открываем на редактирование:
* данные опции позволят программе Outlook без ошибок отправлять тестовое сообщение.
** мы должны добавить их выше строки 1; # ensure a defined return.
Разрешаем запуск антивируса и amavis:
systemctl enable clamav-daemon clamav-freshclam amavis
* где content_filter указывает на приложение, которое будет сканировать сообщения;
Теперь редактируем master.cf:
scan unix — — n — 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
127.0.0.1:10025 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:10025 (сервис без имени, он просто будет слушать на порту 10025 — это порт по умолчанию, на который отправляет сообщение amavis после выполнения проверки). Также, мы используем следующие опции:
Настройка обновлений антиспама
Для обновления базы антиспама выполняем команду:
sa-update —nogpg —verbose
Для настройки автоматического обновления, используем cron. Установим его:
apt install cron
Открываем редактирование планировщика:
30 3 * * * /usr/bin/sa-update
* в данном примере, каждый день в 03:30 будет запускаться процесс обновления антиспама.
Проверка
Для проверки антивируса отправляем сообщение со следующим содержимым:
Большинство почтовых систем экранинуют вирусную последовательность и письмо нормально пройдет мимо нашего антивируса. Чтобы сделать корректный тест, необходимо отправить письмо SMTP-командами.
Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:
Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:
В итоге, письмо не должно прийти, а в логах мы увидим:
Пересылка СПАМа и вирусов на другой ящик
Все письма со спамом и вирусами будут перемещаться в карантин. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить amavis.
Добавляем такие опции:
Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.
Обучение антиспама
Хорошей практикой будет договориться с пользователями о ручном помещении нежелательной почты из входящих в папку СПАМ. Тогда мы сможем пройтись скриптом по всем ящикам на сервере и обучать антиспам. Например, такой командой:
Статистику обучения можно посмотреть командой:
sa-learn —dump magic
Подготовка
Прежде чем продолжить это руководство, убедитесь, что вы вошли в систему как пользователь с привилегиями sudo .
Включить плагины Roundcube
Roundcube поставляется с рядом плагинов, которые по умолчанию отключены. В этом руководстве мы активируем password и managesieve плагинами. Эти плагины позволят пользователям создавать сетчатые фильтры и изменять свои пароли из интерфейса Roundcube.
// Enable plugins
// Configure managesieve plugin
// Configure password plugin
Настроить Nginx
Перезагрузите службу Nginx, чтобы изменения вступили в силу:
sudo systemctl reload nginx
Создаем первый почтовый ящик и проверяем работу сервера
Переходим в Список доменов — Новый домен:
Заполняем формы и нажимаем по Добавить домен:

Теперь переходим в Обзор — Создать ящик:
Вводим данные нового пользователя и нажимаем по Создать ящик:

Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.
Параметры для подключения:
* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).
Устанавливаем и настраиваем Roundcube Webmail
В данной инструкции мы разберем использование веб-клиента Roundcube. При необходимости, можно установить другой, например, WebMail Lite или несколько одновременно.
На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на версию продукта с длительной поддержкой (LTS):

Используем ссылку, чтобы загрузить архив программы:
Создаем каталог, где будут размещаться файлы портала:
И распаковываем скачанный архив:
tar -C /var/www/html/webmail -xf roundcubemail-*.tar.gz —strip-components 1
Копируем шаблон конфига:
cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php
И открываем его на редактирование:
Также дописываем в конфигурационный файл следующее:
* Без данной настройки, если не создавались папки другим клиентом, веб-клиент будет выдавать ошибки при перемещении писем, например, при их удалении.
Задаем владельца apache на папку портала:
chown -R www-data:www-data /var/www/html/webmail
Создаем в MariaDB базу для roundcubemail:
И загружаем в созданную базу данные:
mysql -uroot -p roundcubemail < /var/www/html/webmail/SQL/mysql.initial.sql
Устанавливаем компоненты, необходимые для работы Roundcube:
apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl php-dom php-xml php-mcrypt
Если система выдаст ошибку при установке компонента mcrypt, его нет в репозитории — поставим его вручную. Для этого установим пакеты, необходимые для сборки его из исходников:
apt install make php-dev libmcrypt-dev
pecl channel-update pecl.php.net
pecl install mcrypt
Создадим файл с настройкой нового модуля:
Компоненты установлены. Настроим php:
* в данном примере мы задаем московское время и возможность загружать файл размером в 50 Мб (это будет максимальным объемом вложений, которые можно отправлять через веб-интерфейс).
Добавим строку в раздел http:
* данной настройкой мы также разрешим загрузку файлов размером 50 Мб.
Перезапустим nginx для применения настройки:
systemctl restart nginx

В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).
На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Открываем конфигурационный файл roundcube:
Запрещаем установку портала:
После удаляем папку с установочными скриптами:
Открываем страницу загрузки Roundcube. Копируем ссылку на архив портала. В нашем случае будет выбрана LTS-версия продукта (с длительной поддержкой):

* на момент написания инструкции LTS версия была 1.5.3.
Создаем каталог для размещения файлов Roundcube:
И распаковываем архив в созданную папку:
tar -C /var/www/html/webmail -xvf roundcubemail-*.tar.gz —strip-components 1
Копируем шаблон конфигурационного файла и создаем рабочий конфиг:
Редактируем строку для подключения к СУБД:
* первая строка разрешает установку портала. Остальные — указывают на необходимость создания папок по умолчанию, если их нет. Без данной настройки, если не создавались папки другим клиентом, веб-клиент может выдавать ошибки при перемещении писем, например, при их удалении.
* несмотря на то, что наш сервер обрабатываем скрипты с помощью php-fpm, работает последний по умолчанию от apache.
Подключаемся к MySQL:
Создаем в MariaDB базу и пользователя для roundcubemail:
* данными командами мы создаем базу данных roundcubemail и пользователя roundcube с паролем roundcube123. Обратите внимание, что если в вашем случае будут использоваться другие пользователь, пароль и база данных, то следует внести соответствующие изменения в настройку самого roundcube, которую мы выполняли ранее.
mysql roundcubemail < /var/www/html/webmail/SQL/mysql.initial.sql
apt install php-pear php-intl php-ldap php-net-smtp php-mail-mime php-curl php-gd php-imagick php-zip
date.timezone = «Europe/Moscow»
* в данном примере мы задаем московское время.
В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK):
Возможные ошибки
Рассмотрим некоторые ошибки, с которыми столкнулся я.
Неудачное соединение с IMAP сервером
Появляется при попытке авторизоваться в Roundcube.
Причина: как правило, недоступен IMAP-сервер или Roundcube неправильно настроен на подключение к серверу.
Решение: проверяем, что сервер доступен по сети. Проверяем настройки SSL и TLS по методу, описанному выше.
Если это не помогло, на стороне почтового сервера можно включить лог. Например, при использовании сервера IMAP dovecot открываем файл:
Добавляем в самый низ:
mail_debug = yes
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
systemctl restart dovecot
Теперь можно отлавливать ошибки командой:
tail -f /var/log/dovecot/imap.log
После решения проблемы, рекомендую отключить лог в dovecot.
Ошибка появляется при попытке отправить письмо.
Причина: SMTP-сервер не разрешает удаленному хосту отправку сообщений. Для этого требуется пройти аутентификацию.
Решение: есть два способа устранить ошибку:
1. Настроить аутентификацию в Roundcube по методу, описанному выше.
2. Также можно решить проблему, добавив наш хост Roundcube в качестве relay на почтовом сервере. Данный способ не является правильным с точки зрения безопасности и его рекомендуется применить для временного использования.
В качестве SMTP-сервера могут использоваться разные MTA. Приведем пример для разрешения отправки писем в Postfix. Открываем его конфигурационный файл:
* где mynetworks — список доверенных узлов, которым можно будет отправлять сообщения без дополнительных проверок. В данном примере мы добавили хост 192.168.0.14.
systemctl reload postfix
Return type of zipdownload_mbox_filter
В логах maillog мы можем наблюдать большое количество ошибок Roundcube, примерно, такого вида:
Причина: у нас установлена слишком свежая версия PHP, в которой некоторые методы кода объявлены как устаревшие. Система нас об этом просто предупреждает.
Решение: данное сообщение не является критической ошибкой и не повлияет на работу системы. Однако, данные сообщения сильно мешают при изучении почтового лога.
Для решения проблемы мы должны понизить версию PHP (на ту, что указана в документации Roundcube). Однако, это неоправданно рискованно, поэтому мы просто отключим предупреждения DEPRECATED.
Для этого откроем файл:
* то есть, мы исключаем лог типа E_DEPRECATED.
Изменение размера вложения
По умолчанию, приложение может разрешать небольшой размер вложения. Предположим, нам нужно отправлять файлы объемом 30 Мб. Чтобы это сделать, выполняем следующие действия.
1. Настройка лимитов при отправке файлов в PHP.
Roundcube написан на PHP и нам необходимо убедиться, что интерпретатор не ограничивает нас в объеме загружаемых файлов. Для этого открываем файл:
* в разных системах это могут быть разные пути, но мы рассматриваем установку под CentOS.
Редактируем следующие директивы:
Перезапускаем интерпретатор PHP (в нашем случае это php-fpm):
* данный путь может отличаться для вашей системы.
Редактируем или добавляем опцию (если ее нет, то ничего не редактируем):
* обратите внимание, что необходимо установить значение max_message_size на 30-40% больше, чем желаемый максимальный размер сообщения. Это связано с тем, что в процессе отправки сообщения могут добавляться дополнительные данные (например, кодирование в base64), которые увеличивают размер сообщения.
3. Ограничения в nginx.
Если в качестве веб-сервера у нас используется nginx, то также нужно убедиться, что задана опция client_max_body_size со значением 30M или более в разделе http.
После внесения изменений, перезагружаем веб-сервер:
nginx -t && nginx -s reload
4. Увеличение лимита отправки для MTA.
Стоит не забывать, что сам почтовый сервер также устанавливаем ограничения на размер отправляемого сообщения. В зависимости от того, какой MTA мы используем, будут различные варианты настройки.
Например, для Postfix задать лимит можно изменив значение для директивы message_size_limit. Подробнее в инструкции Лимиты в Postfix.
Папки на русском в Outlook
По умолчанию, все почтовые клиенты, кроме Outlook распознают служебные папки IMAP:
Данные каталоги переводятся на русский язык и корректно отображаются в клиенте. В Outlook эти папки отображаются как есть — на английском языке.
Для решения проблемы мы должны открыть файл:
Найти блок настроек namespace inbox. Приводим его к виду:
* и так, мы задали несколько вариантов служебных каталогов:
Для применения настроек перезапускаем dovecot:
Проверьте установку Roundcube
Откройте свой веб-браузер, перейдите по https://mail.linuxize.com/roundcubemail : https://mail.linuxize.com/roundcubemail и войдите в систему, используя имя пользователя и пароль своей учетной записи электронной почты.

Настройка квот
После применения квот мы сможем наблюдать в почтовом клиенте Roundcube информацию об оставшемся дисковом пространстве:
Антиспам средствами Postfix
Рассмотрим в отдельном разделе защиту от СПАМа средствами самого MTA Postfix.
Заголовки
В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:
Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:
И так, для настройки антиспама открываем конфигурационный файл main.cf:
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
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_mynetworks
permit_sasl_authenticated
defer_unauth_destination
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
* где параметры:
* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.
Для усиления защиты добавляем:
* более подробное описание опций для защиты можно найти на странице postfix.org/postconf.5.html.
После внесения всех правок, необходима перезагрузка Postfix:
Проверка SPF
Проверка SPF позволит отбрасывать все попытки отправить сообщения от доменов, которые не прошли валидацию по SPF.
apt install postfix-policyd-spf-python
Открываем конфигурационный файл postfix:
По умолчанию, политика блокирует письма, только если владелец домена указал жесткую блокировку (использовал -all, вместо ~all). Если мы хотим указать более жесткую политику, открываем файл:
Задаем значения для опций HELO_reject и Mail_From_reject:
* в данном примере мы будем блокировать письма:
Подробнее информацию об опциях конфигурационного файла policyd-spf.conf можно узнать командой:
Защита от СПАМа «от себя к себе»
Часто можно наблюдать ситуацию, когда приходит спам от своих же ящиков (или ящиков своего домена, хотя таких почтовых адресов у нас не существует).
Это происходит из-за возможности в поле FROM подставить любой адрес. А адрес от своей организации может внушить доверие, что побудит пользователя откликнуться на нежелательное сообщение.
Для решения проблемы в Postfix нужно добавить простое правило:
Создадим сам файл:
dmosk.ru REJECT Relay from dmosk.ru are denied
* в данном примере мы будет отклонять все попытки отправить почту с чужих серверов от нашего домена dmosk.ru.
Настройка веб-сервера
Устанавливаем nginx командой:
Разрешаем автозапуск сервиса:
systemctl enable nginx

PHP + PHP-FPM + NGINX
Устанавливаем php и php-fpm:
* в данном примере будет установлена нативная версия php, например, для Ubuntu 20.04 это php 7.4, для Ubuntu 22.04 — 8.1. Если необходимо установить конкретную версию, смотрим инструкцию Установка разных версий PHP на Linux Ubuntu.
Для дальнейшего удобства, создадим переменную:
* где 7.4 — версия установленного в системе PHP.
В разделах http — server указываем, чтобы первым индексным файлом был index.php, а также добавляем настройку для обработки запросов php (location):
* где /var/www/html — каталог для размещения данных nginx по умолчанию; /run/php/php7.4-fpm.sock — путь до сокет-файла php-fpm (обратите внимание, что точное значение зависит от используемой вервии php).
Разрешаем автозапуск php-fpm:
Для проверки, создаем индексный файл в директории сайта со следующим содержимым:

MariaDB
Устанавливаем сервер баз данных следующей командой:
Включаем автозапуск сервиса баз данных:
systemctl enable mariadb
Задаем пароль для пользователя sql root:
Отправка почты наружу
Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Настройки DNS для сервера
Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.
1. r DNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.
Если мы получим пустой ответ, то вводим:
postconf -n myhostname
Если и в этот вариант не вернет ответ, вводим:
Настройки DNS для домена
Для каждого домена, для которого будем отправлять почту создаем записи:
Для проверки корректности настройки сервера, воспользуемся ресурсами:
Создать базу данных MySQL
Roundcube поддерживает серверные части баз данных MySQL , PostgreSQL и SQLite.
В этом руководстве мы будем использовать MySQL в качестве сервера базы данных. Войдите в оболочку MySQL :
Создайте новую базу данных MySQL , пользователя и предоставьте ему привилегии над вновь созданной базой данных:
Смена пароля в roundcube
Веб интерфейс roundcube позволяет пользователям менять свои пароли с помощью плагина password. Данный плагин идет в стандартной поставке, но может быть не включен в конфигурации. Проверим это — открываем файл:
* в вашем случае путь до конфигурационного файла может быть другим.
Проверяем, что в перечне плагинов есть password. В противном случае, добавляем:
Переходим в каталог с плагином. Он находится в папке roundcube + plugins/password. В моем случае это:
Используем шаблон конфигурационного файла:
mv config.inc.php.dist config.inc.php
Открываем его и вносим правки:
Значения для опций очень сильно зависят от вашей почтовой инфраструктуры. Я лишь, приведу пример моей конфигурации, но вам придется изучить вопрос, чтобы правильно настроить плагин.
* в моем примере настройка выполнена для конфигурации Dovecot + MySQL.
Заходим в Roundcube. Переходим в раздел Настройки — Пароль. Пробуем его сменить.
Разное
Рассмотрим дополнительные настройки для нашего сервера.
Настройка ограничений
Также важно настроить некоторые ограничения, например:
Подробнее, информацию можно найти в статье Лимиты в Postfix.
Смена email адреса
Нам нужно внести изменения в базу данных — для этого заходим в оболочку sql:
Вводим пароль, который создавали после установки СУБД.
Используем базу postfix:
Редактируем алиасы командой:
Редактируем почтовый ящик:
С базой данных закончили — выходим из sql:
Переходим в каталог с почтовыми ящиками пользователей для нашего домена:
Перемещаем папку с почтой старого ящика в новый:
Проверяем работу через веб-интерфейс. Если используем почтовый клиент, меняем настройки для использования нового email-адреса.
Настройка Dovecot
Устанавливаем Dovecot с компонентом для работы с СУБД:
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Настраиваем способ хранения сообщений:
mail_location = maildir:/home/mail/%d/%u/
Настраиваем слушателя для аутентификации:
А также в этом файле добавим строки:
* в противном случае, мы увидим в логе ошибку error net_connect_unix(/var/run/dovecot/stats-writer) failed permission denied, так как у пользователя vmail не будет прав.
Настраиваем аутентификацию в Dovecot:
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем использование шифрования:
* ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.
Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:
lda_mailbox_autocreate = yes
Настраиваем подключение к нашей базе данных:
* в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Данная настройка является настройкой по умолчанию и, в большинстве случаев, ее не нужно менять без необходимости указать свой путь.
Откроем на редактирование файл с настройками работы с mysql:
В самый низ добавим:
И, напоследок, настраиваем интерфейс, на котором будет слушать dovecot:
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
Подготовка системы
И так, данная инструкция написана под систему Linux Ubuntu Server. Предварительно, выполним следующие действия.
Общие настройки
apt update && apt upgrade
Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа:
* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru.
Устанавливаем пакет для синхронизации времени:
Задаем временную зону (в данном примере московское время):
timedatectl set-timezone Europe/Moscow
* чтобы получить список всех возможных зон, вводим timedatectl list-timezones.
Разрешаем сервис для обновления времени:
systemctl enable chrony
Настройка безопасности
Заранее открываем порты на брандмауэре с помощью iptables:
iptables -I INPUT 1 -p tcp —match multiport —dports 25,110,143,465,587,993,995 -j ACCEPT
iptables -I INPUT 1 -p tcp —match multiport —dports 80,443 -j ACCEPT

