Продолжаем.
1. Настроем квоты в Dovecot.
Официальная документация тут https://wiki2.dovecot.org/Quota/Configuration
Вначале изменим необходимые опции в конфигурационном файле PostfixAdmin, открываем настройки и редактируем:
1 2 3 4 5 6 7 8 9 10 |
nano /var/www/html/postfixadmin/config.local.php // это предел квоты всего домена $CONF['maxquota'] = '1024'; $CONF['domain_quota_default'] = '2048'; // включаем квотирования $CONF['quota'] = 'YES'; // Установите множитель в '1024000' или '1048576', так как PostfixAdmin оперирует мегабайтами $CONF['quota_multiplier'] = '1048576'; |
Теперь настроим квоты в Dovecot. Для этого открываем конфигурационный файл и вносим изменения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
nano /etc/dovecot/dovecot.conf // Проверяем настройки: ..... mail_plugins = $mail_plugins quota ..... ..... protocol imap { ..... mail_plugins = $mail_plugins imap_quota ..... } ..... // Добавляем секцию в самый конец service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } dict { sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext } ## ## Quota limits ## plugin { # Using SQL Tables to store current quota size quota = dict:User Quota::proxy::sqluserquota # это правило "зарезервируем" для ответа о квоте пользователя посредством запроса # к базе данных MySQL # quota_rule = # Allow 10% more for Trash Folder quota_rule2 = Trash:storage=+10%% quota_rule3 = Spam:storage=+20%% # на сколько можно превысить квоту и получить "последнее" сообщение. # если это превысит (100 + 10 = 110%), ты письмо не дойдет до адресата quota_grace = 10%% # Максимальный размер отправляемого письма. quota_max_mail_size = 25M } ## ## Quota warnings ## plugin { quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u quota_warning3 = -storage=100%% quota-warning below %u # тем кто уже забил ящик, овер-квота уже недоступна } service quota-warning { executable = script /usr/local/bin/quota-warning.sh # use some unprivileged user for executing the quota warnings user = vmail unix_listener quota-warning { mode = 660 user = vmail } } |
Создадим файл который содержит информацию отображения квот для почтовых ящиков пользователей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
nano /etc/dovecot/dovecot-dict-sql.conf.ext connect = host=localhost dbname=mail_db user=user_db password=My$upperPa$$word map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages } |
Исправим параметры подключения к MySQL, user_query =….
1 2 3 4 |
nano /etc/dovecot/dovecot-mysql.conf // новая строка: user_query = SELECT username AS user, '5000' AS uid, '5000' AS gid, CONCAT('*:bytes=', IF(mailbox.quota = 0 || mailbox.quota = -1, 0, mailbox.quota)) as quota_rule FROM mailbox, domain WHERE username = '%u' AND mailbox.active = '1' AND domain.domain = '%d' AND domain.active = '1' |
Перезапускаем dovecot и проверяем.
1 2 3 4 5 6 7 8 9 10 |
systemctl restart dovecot.service // Проверить состояние квоты Dovecot для конкретного пользователя Вы можете с помощью утилиты dovadm: doveadm -Dv quota recalc -u admin@samara-it.ru doveadm quota get -u admin@samara-it.ru Quota name Type Value Limit % User Quota STORAGE 13465 30720 43 User Quota MESSAGE 21 - 0 |
Настроем оповещение при превышении квоты. Как было настроено выше, при превышении квоты должен выполняться скрипт /usr/local/bin/quota-warning.sh, но по факту, его там нет. Создадим его.
1 2 3 4 5 6 7 8 9 10 11 12 |
nano /usr/local/bin/quota-warning.sh #!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster <postmaster@samara-it.ru> Subject: Quota warning $PERCENT% Your mailbox is now $PERCENT% full. Please remove unnecessary emails to avoid new mail loosing. EOF |
Поменяем права на файл и проверим работу:
1 2 3 4 |
chown vmail:dovecot /usr/local/bin/quota-warning.sh chmod +x /usr/local/bin/quota-warning.sh /usr/local/bin/quota-warning.sh 82 admin@samara-it.ru |
Если все работает — перезапускаем еще раз dovecot
1 |
systemctl restart dovecot.service |
2. Устанавливаем и настраиваем Roundcube.
Подготовим конфигурацию для nginx, сайт будет находится по адресу: https://mail.samara-it.ru
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
nano /etc/nginx/conf.d/roundcube.conf server { listen 80; server_name mail.samara-it.ru; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name mail.samara-it.ru; access_log /var/log/nginx/mail-access.log; error_log /var/log/nginx/mail-error.log; include /etc/nginx/includes/ssl; # Path to the root root /var/www/html/roundcube/; location / { index index.php; allow XX.XX.XX.XX; deny all; } # ############### Статика ########################## location ~* /.+(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|woff|exe|jpeg)$ { # Only for / !!!! root /var/www/html/roundcube/; expires max; # add_header X-debug-message "This is static main" always; access_log off; allow allow XX.XX.XX.XX; deny all; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; try_files $uri =404; fastcgi_buffers 8 256k; fastcgi_buffer_size 128k; fastcgi_intercept_errors on; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; allow XX.XX.XX.XX; deny all; } } |
Скачаем roundcube. Качать будем версию «Complete» с официального сайта https://roundcube.net/, последняя версия на момент написания статьи была 1.4.1
1 2 3 4 5 |
wget -P /var/www/html/ https://github.com/roundcube/roundcubemail/releases/download/1.4.1/roundcubemail-1.4.1-complete.tar.gz tar -xzf /var/www/html/roundcubemail-1.4.1-complete.tar.gz -C /var/www/html/ mv /var/www/html/roundcubemail-1.4.1 /var/www/html/roundcube/ chown -R nginx:nginx /var/www/html/roundcube/ rm -f /var/www/html/roundcubemail-1.4.1-complete.tar.gz |
Создадим базу данных под roundcube.
1 2 3 4 5 6 7 |
mysql -u root -p mysql> CREATE DATABASE roundcube_db CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> CREATE USER roundcube_user@localhost IDENTIFIED BY 'MyPa$$ForUser'; mysql> GRANT ALL PRIVILEGES ON roundcube_db.* TO roundcube_user@localhost; mysql> FLUSH PRIVILEGES; mysql> quit |
Загрузим базу
1 |
mysql -u roundcube_user -p roundcube_db < /var/www/html/roundcube/SQL/mysql.initial.sql |
Перезапустим nginx
1 |
systemctl restart nginx.service |
и откроем сайт https://mail.samara-it.ru/installer , видим следующее:
Здесь все пункты, кроме Checking available databases должны иметь значение OK. Исправим ошибки, доставим необходимые пакеты и перезапустим nginx и php-fpm
1 2 3 |
dnf install php-intl php-ldap php-pecl-imagick php-pecl-zip -y systemctl restart php-fpm.service && systemctl restart nginx.service |
Теперь все OK, продолжаем, нажимаем Next внизу. На следующем вносим данные для подключения к MySQL, я еще поменял тип логирования (не обязательно).
Т.к. почтовый сервер находится на том же сервере, что и roundcube, настройки IMAP оставляем по умолчанию.
Меняем настройки SMTP и настройки интерфейса
Выбираем плагины на свое усмотрение. Далее жмем на Create Config. Если программа предлагает сохранить файл вручную, значит у неё нет доступа на запись к папке конфигурации. После того, как файл будет сохранен, нажмите кнопку Continue.
Проверяем настройки:
После окончания всех настроек, удаляем папку с установщиком
1 |
rm -rf /var/www/html/roundcube/installer/ |
И заходим на сайт https://mail.samara-it.ru/