Dovecot Quota - для каждого своя

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 17:02:46

Я про

Код: Выделить всё

DBUSER="exim"
DBPASS="exim"
DBNAME="exim"
У меня работает только если это записано так:

Код: Выделить всё

DBUSER='exim'
DBPASS='exim'
DBNAME='exim'
Отправлено спустя 1 минуту 58 секунд:
Ну, точнее, пароль требуется заключить в апострофы. Остальное необязательно.

Отправлено спустя 3 минуты 44 секунды:
Кстати, на своем (недоделанном пока) файрволе под FreeBSD я некоторое время назад аналогичным образом помучился с алиасами (похожая проблема с кавычками и апострофами).

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 17:23:00

quicktrick писал(а): Ну, точнее, пароль требуется заключить в апострофы. Остальное необязательно.
Нет, не надо. Переменные раскрываются без кавычек. Можете вообще никаких ограничителей не использовать, если в строке нет пробелов.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 17:28:08

Правильно, раскрываются без кавычек. И именно такой вариант с паролем (раскрывшимся без кавычек) в Линуксе не работает. Во всяком случае, в openSUSE. Посмотрите мой предыдущий длинный пост с тестами паролей в командной строке.

Отправлено спустя 1 минуту 2 секунды:
Я попробовал ваш скрипт в очень многих вариантах. И у меня он работает только так, как я написал. С паролем, заключенным в апострофы. Иначе никак.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 17:28:41

Возможно у вас в пароле используются специальные символы. Тогда, действительно, может потребоваться выбор ограничителей строки.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 17:34:15

Конечно, используются спецсимволы, а как же без них в паролях. Но вопрос не только в этом, а именно в выборе кавычек или апострофов. Я же говорю, в FreeBSD мне пришлось столкнуться с аналогичной проблемой в алиасах, а там никаких спецсимволов не было.

Отправлено спустя 24 секунды:
Потестировал пересчитанную доменную квоту с отправкой / приёмом, а также с удалением писем. Похоже, действительно, теперь доменная квота работает правильно, как и написано в вашей статье. Осталось только добавить триггер в MySQL.

Большое спасибо за статью! :) Теперь бы еще решить вопрос с отображением использованной доменной квоты в Постфикс Админе.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 17:43:39

quicktrick писал(а): Конечно, используются спецсимволы, а как же без них в паролях
Очень просто. Не давать критический доступ к базе за переделами localhost. Так что можете использовать чисто номинальный пароль для обычных пользователей.
К root и DBA это, конечно же, не относится.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 18:03:24

Ну, поскольку приходится всё же использовать phpMyAdmin, то проще дать нормальный пароль. Хотя доступ к локейшну pma в Nginx у меня тоже запаролен.

Отправлено спустя 3 минуты 20 секунд:
Тут у меня еще вот какие соображения по поводу триггера. Не случится ли такая ситуация, что в Постфикс Админе будет удален пользователь, а его почта на физическом диске останется? Мне кажется, это вполне рядовой случай. Тогда пересчет доменной квоты будет как бы некорректным. Администратору все равно надо удалять почту несуществующего пользователя с диска.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 18:19:34

quicktrick писал(а): что в Постфикс Админе будет удален пользователь, а его почта на физическом диске останется?
Оно именно так и присходит. Там есть скрипт в комплекте который сканирует и удаляет каталоги в случае отсутствия ссылки на них в базе.
Ну или можете на базе моего скрипта mboxcleanup.sh что-то наваять по этой статье.
"Автоматизация удаления неиспользуемых почтовых ящиков совместно с Dovecot".
В реальности он у меня сложнее - ещё базы Spamassassin и Roundcube чистятся плюс архив улетает в облако.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 19:20:43

xM писал(а): Там есть скрипт в комплекте который сканирует и удаляет каталоги в случае отсутствия ссыки на них в базе.
Подскажите, пожалуйста, "там" -- это где?

Ваш скрипт обязательно посмотрю. Я, правда, поставил себе Rspamd, но неважно, подстрою под свой сервер. Спасибо!

Ну, и последней нерешенной проблемой останется отображение использованных доменных квот в Постфикс Админе.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 19:26:56

quicktrick писал(а): Подскажите, пожалуйста, "там" -- это где?
В дистрибутиве.
https://github.com/postfixadmin/postfix ... /ADDITIONS
IT voodoo blog https://kostikov.co

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-12-03 20:10:34

Запостил баг с doveadm в список рассылки Dovecot.
https://dovecot.org/pipermail/dovecot/2 ... 10193.html
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-12-05 19:56:13

Не могли бы вы мне помочь разобраться? Я понимаю, что обращаюсь не вполне по адресу, поскольку у меня Rspamd, но я тут обнаружил проблему именно с квотой, а, точнее, с работой плагина trash. Проблема вот в чем. Когда я тестирую работу плагина trash, отправляя письма на тестовый ящик с того же домена, то всё работает как надо. При превышении квоты из папки Trash удаляется часть писем, и отправленное письмо доходит по адресу.

Но вот когда я делаю то же самое, отправляя тестовые письма с внешнего домена, то плагин trash так же срабатывает, удаляет часть писем из папки Trash, но тестовое письмо не доходит. Почему-то sieve не может его сохранить. Никак не могу понять, в чем дело.

Вот выдержки из логов.

1. Отправка превышающего квоту письма с внутреннего домена (письмо дошло по адресу):

Код: Выделить всё

Dec 05 19:11:27 voyo dovecot[3060]: lmtp(22366): Connect from local
Dec 05 19:11:27 voyo dovecot[3060]: imap(admin@mydomain.tld): Connection closed (IDLE running for 0.001 + waiting input for 0.001 secs, 2 B in + 10+10 B out, state=wait-input) in=7481 out=2896
Dec 05 19:11:27 voyo dovecot[3060]: lmtp(test@mydomain.tld): EC5CGy/FJlpeVwAAMhFstA: sieve: msgid=<7c6f221d-c87d-5221-a632-e8b3c2a55671@mydomain.tld>: stored mail into mailbox 'INBOX'
Dec 05 19:11:27 voyo postfix/lmtp[22179]: 4D56F2342: to=<test@mydomain.tld>, relay=mail.mydomain.tld[private/dovecot-lmtp], delay=0.34, delays=0.09/0.01/0.05/0.19, dsn=2.0.0, status=sent (250 2.0.0 <test@mydomain.tld> EC5CGy/FJlpeVwAAMhFstA Saved)
Dec 05 19:11:27 voyo dovecot[3060]: lmtp(22366): Disconnect from local: Successful quit
2. Отправка превышающего квоту письма с внешнего домена (письмо не дошло по адресу):

Код: Выделить всё

Dec 05 19:20:53 voyo dovecot[3060]: lmtp(22580): Connect from local
Dec 05 19:20:53 voyo postfix/smtpd[22487]: disconnect from smtp59.i.mail.ru[217.69.128.39] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
Dec 05 19:20:53 voyo dovecot[3060]: lmtp(test@mydomain.tld): EP//DmXHJlo0WAAAMhFstA: sieve: msgid=<29347684-e205-77a8-b8b1-40cc7cda96a0@mail.ru>: failed to store into mailbox 'INBOX': Quota exceeded (mailbox for user is full)
Dec 05 19:20:53 voyo dovecot[3060]: lmtp(test@mydomain.tld): EP//DmXHJlo0WAAAMhFstA: sieve: Execution of script /usr/lib/dovecot/sieve/after.d/junk.sieve failed with unsuccessful implicit keep
Dec 05 19:20:53 voyo dovecot[3060]: lmtp(22580): Disconnect from local: Successful quit
Dec 05 19:20:53 voyo postfix/lmtp[22506]: D32A12346: to=<test@mydomain.tld>, relay=mail.mydomain.tld[private/dovecot-lmtp], delay=0.5, delays=0.39/0/0/0.11, dsn=5.2.2, status=bounced (host mail.mydomain.tld[private/dovecot-lmtp] said: 552 5.2.2 <test@mydomain.tld> Quota exceeded (mailbox for user is full) (in reply to end of DATA command))
Из второго лога видно, что не сработал скрипт junk.sieve. Вот его содержимое:

Код: Выделить всё

require ["fileinto","mailbox"];
if header :contains "X-Spam" "Yes" {
 fileinto :create "Junk";
 stop;
}
Но дело, судя по всему, не в содержании этого скрипта. А вот в чем -- не могу понять. Все права на выполнение есть, ошибок в логах нет.

В принципе, я конфигурировал Rspamd вот по этой инструкции. Всё работает. За исключением того, что я здесь описал. Очевидно, что скрипт junk.sieve просто не вызывается при доставке письма, отправленного из того же домена (что вполне логично, хотя могут быть варианты со спамом и из своего же домена). Но вот как бы мне победить проблему потери письма из внешнего домена? Буду очень благодарен за любые советы.

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-12-06 17:28:11

Чудеса. Сегодня всё работает -- то, что вчера не работало. Ничего не делал, то есть вообще ничего. Просто еще раз попробовал. Причем вчера такая штука у меня проявлялась на двух серверах в разных сетях с разными доменами. Тестировал вчера оба сервера по нескольку раз. Сегодня оба работают как надо. Не трогал вообще ничего.

Потом для очистки совести включил в Довкоте mail_debug = yes с расширенным логированием. Получил кучу всего в логах. Всё проверил. Единственная странноватая запись в логах:

Код: Выделить всё

dovecot[522]: lmtp(test@email1.ru): Debug: sieve: include: sieve_global is not set; it is currently not possible to include `:global' scripts.
При этом в конфигах этот параметр нигде не задан. Ну да бог с ним.

В общем, отключил mail_debug, перезагрузил сервера на всякий пожарный -- всё работает. Что это было? Мистика.

Кстати, при превышении нижнего порога Quota warning -- после прихода этого сообщения и/или любого из следующих Quota warnings -- последующее удаление части почты из Inbox (перемещение удаленной почты в папку Trash) почему-то вызывает отправление сообщения "Quota warning: mailbox is 100% full". Хотя при этом заполненность квоты может быть всего процентов 80. Странновато, конечно, но пережить можно. Дальнейший прием почты на данный адрес вызывает отправку уже правильных Quota warnings.