Categories: Шпаргалки

Настройка квот в Dovecot + PostfixAdmin

Используемые термины: Dovecot , PostfixAdmin , Postfix .

При установке почтового сервера на базе Postfix + Dovecot и использовании панели управления почтовыми ящиками PostfixAdmin, по умолчанию, квотирование не настроено — его можно задавать в последней, но работать квоты не будут. Нужна дополнительная настройка…

Настройка Dovecot

Открываем конфигурационный файл10-mail.conf:

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

Находим строку с mail_plugins и приводим ее к виду:


mail_plugins = $mail_plugins quota

* данная строка подключает к плагинам дополнительно плагин для управления квотами ( quota ). Если опция закомментирована, снимаем комментарий.

Открываем конфигурационный файл 20-imap.conf:

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

Находим опцию protocol imap и добавим в нее также возможность использования плагина с квотами:

protocol imap {
mail_plugins = $mail_plugins imap_quota
}

* опция mail_plugins может быть закомментирована. Если это так, то коментарий снимаем.

Открываем конфигурационный файл 10-master.conf:

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

Находим опцию service dict , в ней unix_listener dict и приводим ее к виду:

service dict {
unix_listener dict {
mode = 0660
user = vmail
group = vmail
}
}

Открываем файл 90-quota.conf:

vi /etc/dovecot/conf.d/90-quota.conf

Добавляем:

plugin {
quota = dict:User quota::proxy::quota
}

* или снимаем комментарий с соответствующей строки quota = dict:User quota::proxy::quota .

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

vi /etc/dovecot/dovecot.conf

Находим раздел dict и снимаем комментарий или добавляем:

dict {
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}

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

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

connect = host=localhost dbname=postfix user=postfix password=postfix123
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
}

* где host — сервер mysql, к которому будем подключаться; dbname — имя базы данных, в которой находятся пользователи postfix; user — пользователь, под которым мы подключаемся к базе; password — пароль для подключения к базе. В данном примере мы подключимся к СУБД, которая находится на том же сервере ( localhost ) к базе postfix под пользователем postfix с паролем postfix123 .

Откроем наш файл, в котором мы описываем настройки выборки данных по пользователям из базы данных:

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

Находим запрос user_query и дописываем в SELECT CONCAT(‘*:bytes=’, quota) AS quota_rule — у меня в итоге получилось:

user_query = SELECT CONCAT(‘/home/mail/’,LCASE(`domain`),’/’,LCASE(`maildir`)), 1024 AS uid, 1024 AS gid , CONCAT(‘*:bytes=’, quota) AS quota_rule FROM mailbox WHERE username = ‘%u’

* если в нашем файле запросов есть несколько строк user_query , то необходимо дописать запрос для последней.

Проверяем конфигурационный файл dovecot:

doveconf

… и если команда не вернет ошибку, перезапускаем его:

systemctl restart dovecot

Проверка работы квот

Для начала в командной строке вводим:

doveadm quota get -u user@domain.net

* user@domain.net — почтовый пользователь, для которого нужно показать квоту.

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

Quota name Type Value Limit %
User quota STORAGE 16420 50000 32
User quota MESSAGE 14 — 0

* в данном примере почтовый ящик занимает около 16 Мб, а квота около 50 Мб — ящик заполнен на 32% .

Теперь открываем PostfixAdmin — заходим в настройки почтового ящика и ставим небольшой лимит, например, в 5 Мб:

Теперь объем ящика превышает лимит:

doveadm quota get -u user@domain.net

Quota name Type Value Limit %
User quota STORAGE 16420 5000 328
User quota MESSAGE 14 — 0

* объем превышен, почти, втрое.

Некоторые почтовые клиенты покажут превышение лимита, например, Thunderbird:

Оповещения при превышении квоты

Открываем конфигурационный файл 90-quota.conf:

vi /etc/dovecot/conf.d/90-quota.conf

Снимаем комментарий или добавляем данные строки:

plugin {
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
}

* в данном примере мы указываем на необходимость делать 2 предупреждения — первое при достижении объема ящика в 80% , второе — 95% . Сервис dovecot, который будет это обеспечивать, называется quota-warning .

Теперь находим раздел service quota-warning и приводим его к виду:

service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = dovecot
unix_listener quota-warning {
user = vmail
}
}

* мы создали сервис quota-warning , который будет запускать скрит /usr/local/bin/quota-warning.sh .

Создаем сам скрипт quota-warning.sh:

vi /usr/local/bin/quota-warning.sh

cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $2 -o «plugin/quota=maildir:User quota:noenforcing»
Content-Type: text/html; charset=utf-8
From: Администратор почты <postmaster@remontka.com>
Subject: Предупреждение о превышении квоты на почтовый ящик
X-Priority: 2

<p>Размер Вашего почтового ящика составляет $1% от установленного ограничения.<br>
Чтобы уменьшить его размер Вы можете удалить большие письма с вложениями, старые письма или почистить корзину.</p>
EOF

* где postmaster@remontka.com — административный почтовый ящик. Сам текст сообщения можно преобразовать, чтобы оно было более презентабельным.

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

chmod +x /usr/local/bin/quota-warning.sh

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

/usr/local/bin/quota-warning.sh 80 user@domain.net

* где user@domain.net — наш почтовый ящик, на который должно будет отправиться уведомление.

Перезапускаем службу dovecot:

systemctl restart dovecot

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago