Roundcube Webmail: установка и настройка веб-почты — АйТи Фреш

Roundcube Webmail: установка и настройка веб-почты

Roundcube Webmail: обзор и возможности

Roundcube — самый популярный open-source веб-клиент для работы с почтой. За 15 лет я видел его буквально везде: на хостингах с cPanel и Plesk, в корпоративных инфраструктурах и на самостоятельно поднятых серверах. Суть простая — пользователь открывает браузер и работает с почтой через чистый AJAX-интерфейс. Внутри — поддержка IMAP и SMTP, адресная книга, фильтры Sieve, и система плагинов, которая закрывает почти любую хотелку.

Из того, что реально используется в повседневной работе: многоязычный интерфейс (русский есть), drag-and-drop для писем и папок, полнотекстовый поиск, HTML-редактор, управление фильтрами Sieve прямо из браузера. Плюс импорт и экспорт контактов в vCard и CSV, несколько идентичностей отправителя, темы оформления — и всё это расширяется плагинами.

Roundcube написан на PHP. Для работы нужны: веб-сервер (Apache или Nginx), PHP версии 7.4 и выше с нужными модулями, СУБД — MySQL, PostgreSQL или SQLite, и доступ к IMAP- и SMTP-серверу. На практике 90% установок идут на связке Dovecot + Postfix — она и самая обкатанная.

Установка Roundcube на Ubuntu/Debian

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

# Зависимости
apt install -y apache2 php php-{mbstring,xml,intl,zip,gd,pdo,mysql,pgsql,curl,ldap,imagick} \
  mariadb-server unzip composer

# Скачивание Roundcube 1.6.x
cd /var/www
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.6/roundcubemail-1.6.6-complete.tar.gz
tar xzf roundcubemail-1.6.6-complete.tar.gz
mv roundcubemail-1.6.6 roundcube
chown -R www-data:www-data /var/www/roundcube
chmod -R 750 /var/www/roundcube/temp /var/www/roundcube/logs

Создаём базу данных:

mysql -u root << 'SQL'
CREATE DATABASE roundcube CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'RcDBPass2026';
GRANT ALL ON roundcube.* TO 'roundcube'@'localhost';
FLUSH PRIVILEGES;
SQL

# Импорт схемы
mysql -u roundcube -pRcDBPass2026 roundcube < /var/www/roundcube/SQL/mysql.initial.sql

Настройка Apache Virtual Host

Создайте виртуальный хост с HTTPS — без этого в 2024 году вообще не стоит запускать веб-почту. Let's Encrypt справляется за пару минут:

# /etc/apache2/sites-available/roundcube.conf
<VirtualHost *:443>
    ServerName mail.company.ru
    DocumentRoot /var/www/roundcube/public_html
    
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/mail.company.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mail.company.ru/privkey.pem
    
    <Directory /var/www/roundcube/public_html>
        AllowOverride All
        Require all granted
    </Directory>
    
    # Запрет доступа к конфигурации
    <Directory /var/www/roundcube/config>
        Require all denied
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
    CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined
</VirtualHost>

# Редирект HTTP → HTTPS
<VirtualHost *:80>
    ServerName mail.company.ru
    Redirect permanent / https://mail.company.ru/
</VirtualHost>
a2ensite roundcube
a2enmod ssl rewrite
systemctl restart apache2

Конфигурация Roundcube

Основной файл конфигурации — /var/www/roundcube/config/config.inc.php. Именно здесь прописывается всё, что важно:

<?php
// Подключение к БД
$config['db_dsnw'] = 'mysql://roundcube:RcDBPass2026@localhost/roundcube';

// IMAP-сервер (Dovecot)
$config['imap_host'] = 'ssl://localhost:993';
$config['imap_auth_type'] = 'LOGIN';
$config['imap_conn_options'] = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
];

// SMTP-сервер (Postfix)
$config['smtp_host'] = 'tls://localhost:587';
$config['smtp_auth_type'] = 'LOGIN';
$config['smtp_user'] = '%u';  // Логин пользователя
$config['smtp_pass'] = '%p';  // Пароль пользователя

// Общие настройки
$config['product_name'] = 'Корпоративная почта';
$config['support_url'] = 'mailto:it@company.ru';
$config['des_key'] = 'генерируйте_случайную_24_символа';  // openssl rand -hex 12
$config['default_host'] = 'ssl://localhost';
$config['default_port'] = 993;
$config['language'] = 'ru_RU';
$config['date_format'] = 'd.m.Y';
$config['time_format'] = 'H:i';
$config['skin'] = 'elastic';  // Современная тема
$config['plugins'] = [
    'archive',
    'zipdownload',
    'managesieve',
    'password',
    'markasjunk',
];

Настройка Sieve-фильтров

Плагин ManageSieve — одна из причин, почему пользователи любят Roundcube. Правила фильтрации писем настраиваются прямо из веб-интерфейса, без доступа к серверу:

// /var/www/roundcube/plugins/managesieve/config.inc.php
$config['managesieve_host'] = 'localhost';
$config['managesieve_port'] = 4190;
$config['managesieve_auth_type'] = null;  // Автоопределение
$config['managesieve_usetls'] = true;
$config['managesieve_default'] = '/var/www/roundcube/plugins/managesieve/default.sieve';

// На стороне Dovecot: убедитесь что sieve включён
// /etc/dovecot/conf.d/20-managesieve.conf
// protocols = $protocols sieve
// service managesieve-login { inet_listener sieve { port = 4190 } }

Плагин смены пароля

Плагин password даёт пользователям возможность менять пароль почтового ящика не беспокоя администратора. Настраивается так:

// /var/www/roundcube/plugins/password/config.inc.php

$config['password_driver'] = 'sql';
$config['password_minimum_length'] = 8;
$config['password_require_nonalpha'] = true;
$config['password_force_new_user'] = false;

// Для SQL-драйвера (пароли в БД Postfix/Dovecot)
$config['password_db_dsn'] = 'mysql://postfix:PostfixDBPass@localhost/postfix';
$config['password_query'] = "UPDATE mailbox SET password=%C WHERE username=%u";
$config['password_hash_algorithm'] = 'blowfish-crypt';  // bcrypt
$config['password_blowfish_cost'] = 12;

// Для LDAP/Active Directory:
// $config['password_driver'] = 'ldap';
// $config['password_ldap_host'] = 'ldap://dc.company.local';
// $config['password_ldap_port'] = 389;
// $config['password_ldap_starttls'] = true;
// $config['password_ldap_basedn'] = 'ou=Users,dc=company,dc=local';
// $config['password_ldap_method'] = 'user';

Интеграция с Postfix и Dovecot

Roundcube сам по себе — только клиент. Он подключается к уже работающим IMAP- и SMTP-серверам и ничего не хранит, кроме сессий и настроек. Типичная связка, которую мы используем: Postfix на приём и отправку, Dovecot для IMAP, виртуальные домены и ящики в MySQL.

На стороне Dovecot убедитесь, что IMAP и Sieve включены и работают корректно:

# /etc/dovecot/dovecot.conf
protocols = imap lmtp sieve

# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login

# /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.company.ru/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.company.ru/privkey.pem
ssl_min_protocol = TLSv1.2

# /etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
  mailbox Drafts { auto = subscribe; special_use = \Drafts }
  mailbox Sent   { auto = subscribe; special_use = \Sent }
  mailbox Trash  { auto = subscribe; special_use = \Trash }
  mailbox Junk   { auto = subscribe; special_use = \Junk }
  mailbox Archive { auto = subscribe; special_use = \Archive }
}

На стороне Postfix нужен submission-порт для отправки писем от клиента:

# /etc/postfix/master.cf
submission inet n - y - - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Оптимизация производительности

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

// config.inc.php — кэширование
$config['imap_cache'] = 'db';        // Кэш IMAP-структуры в БД
$config['messages_cache'] = 'db';     // Кэш заголовков писем
$config['session_lifetime'] = 30;     // Минут до таймаута
$config['min_refresh_interval'] = 60; // Секунд между автообновлениями
$config['mail_pagesize'] = 50;        // Писем на страницу
$config['addressbook_pagesize'] = 50;

// Ускорение PHP: OPcache должен быть включён
// /etc/php/8.1/apache2/conf.d/10-opcache.ini
// opcache.enable=1
// opcache.memory_consumption=128
// opcache.max_accelerated_files=10000
// opcache.revalidate_freq=60

Redis для сессий и кэша

Перенос сессий в Redis — один из самых заметных приростов производительности при большом числе одновременных пользователей. Дисковый ввод-вывод падает, время отклика сокращается:

# Установка Redis
apt install -y redis-server php-redis

# config.inc.php
$config['session_storage'] = 'redis';
$config['redis_hosts'] = ['localhost:6379'];

// Memcached — альтернатива:
// $config['session_storage'] = 'memcache';
// $config['memcache_hosts'] = ['localhost:11211'];

systemctl restart apache2

Безопасность Roundcube

Веб-почта — это вход в корпоративную переписку. Если её взломают, последствия будут серьёзными. Минимальный набор защиты такой:

// config.inc.php — безопасность
$config['login_rate_limit'] = 3;       // Максимум попыток входа в минуту
$config['ip_check'] = true;            // Привязка сессии к IP
$config['use_https'] = true;           // Принудительный HTTPS
$config['login_lc'] = 2;               // Приводить логин к нижнему регистру
$config['sendmail_delay'] = 5;         // Задержка между письмами (антиспам)
$config['max_message_size'] = '25M';   // Максимальный размер письма

// Безопасные заголовки (Apache)
// .htaccess или VirtualHost:
// Header set X-Content-Type-Options "nosniff"
// Header set X-Frame-Options "SAMEORIGIN"
// Header set X-XSS-Protection "1; mode=block"
// Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'"
// Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Из того, что обязательно делаем на каждой установке: fail2ban с парсингом /var/www/roundcube/logs/errors.log — спасает от брутфорса, ограничение доступа по IP через Apache или Nginx, если веб-почта нужна только из офиса, и двухфакторная аутентификация через плагин two_factor_totp.

Fail2Ban для Roundcube

Настройка fail2ban для блокировки неудачных попыток входа — первое, что делаем после базовой установки:

# /etc/fail2ban/filter.d/roundcube.conf
[Definition]
failregex = IMAP Error: Login failed for .* from <HOST>
            Login failed for .* from <HOST>
ignoreregex =

# /etc/fail2ban/jail.d/roundcube.conf
[roundcube]
enabled = true
port = http,https
filter = roundcube
logpath = /var/www/roundcube/logs/errors.log
maxretry = 5
findtime = 600
bantime = 3600

systemctl restart fail2ban

Часто задаваемые вопросы

Да, Roundcube — чистый IMAP-клиент, ему всё равно, какой сервер за ним стоит. Gmail подключается так: IMAP host ssl://imap.gmail.com:993, SMTP tls://smtp.gmail.com:587. Yandex: ssl://imap.yandex.ru:993 и tls://smtp.yandex.ru:587. Но есть нюанс — Gmail с включённой 2FA потребует App Password, иначе авторизация не пройдёт. На практике Roundcube ставят именно для работы с собственным почтовым сервером на базе Postfix + Dovecot, а не как прокси к Gmail.

Обновление делается так: скачиваете новую версию, распаковываете рядом с текущей, копируете config/config.inc.php и каталог plugins/ с вашими кастомными плагинами. Дальше запускаете скрипт миграции: bin/installto.sh /var/www/roundcube — он обновит файлы и накатит изменения в БД. Перед этим — обязательно бэкап базы и каталога, без исключений. После обновления чистим кэш командой bin/cleandb.sh.

Если нужна только веб-почта — берите Roundcube. Лёгкий, быстрый, богатая экосистема плагинов. SOGo — это уже другая история: полноценный groupware с почтой, календарём, контактами и поддержкой ActiveSync. Но за это платишь сложностью настройки и потреблением ресурсов. Плагины CalDAV/CardDAV для Roundcube существуют, но это всё равно не его стихия — если нужна синхронизация календарей и совместная работа, смотрите в сторону SOGo.

Централизованного управления подписями в Roundcube из коробки нет — это больной вопрос для корпоративных внедрений. Есть три варианта. Первый — плагин identity_select с predefined identities через БД. Второй — тянуть подпись из LDAP-атрибутов при авторизации через плагин new_user_identity. Третий — добавлять подпись на уровне Postfix через milter (altermime). Мы чаще всего выбираем третий: подпись прикрепляется ко всем исходящим письмам вне зависимости от того, какой клиент использует сотрудник — веб, мобильный или десктоп.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Roundcube установка#веб-почта Linux#Roundcube настройка#webmail сервер#Roundcube Postfix#Roundcube Dovecot#почтовый клиент web#Roundcube плагины
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.