Проблема с postfix

Автор DarkLor, 09 ноября 2011, 12:14:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

DarkLor

Есть небольшой почтовый сервер на дебиане работающий под postfix настроенный для работы с mysql и postfixadmin. Возникла необходимость ограничить размер virtual mailbox до 3Гб и вот тут возникла проблема. При вот таких настройках postfix'а virtual_mailbox_limit = 3000000000, message_size_limit = 30000000 postfix ругается: "fatal: main.cf configuration error: virtual_mailbox_limit is smaller than message_size_limit". При настройках по умолчанию все живет нормально, если поставить virtual_mailbox_limit = 0 то тоже все работает нормально. Возникло такое чувство что у postfix есть какое-то ограничение на максимально возможный объем ящика выше которого он просто уходит в минус. можно конечно покопаться в исходниках, но как-то это не есть хорошо. Подскажите пожалуйста что я делаю не так или если это невозможно то как еще можно ограничить объем почтового ящика?

dolphin8383

если используешь mysql то...

БД MySQL /etc/dovecot/dovecot-dict-mysq.conf: (типо того)
connect = host=127.0.0.1 dbname=mail user=user password=password
map {
  pattern = priv/quota/storage
  table = users
  username_field = login
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = users
  username_field = login
  value_field = messages
}


и еще момент в
Файл настроек для проверки учётных данных пользователя и его квот по таблице в БД MySQL /etc/dovecot/dovecot-mysql.conf:

driver = mysql
connect = host=127.0.0.1 dbname=mail user=user password=password
default_pass_scheme = CRYPT
password_query = SELECT password FROM users WHERE login = '%u'
user_query = SELECT CONCAT(SUBSTRING_INDEX(login, '@', -1), '/', SUBSTRING_INDEX(login, '@', 1), '/'), \
999 AS uid, \
999 AS gid, \
CONCAT('*:bytes=', max_bytes, ':messages=', max_messages) AS quota_rule \
FROM users \
WHERE login = '%u'


В настройки postfix добавлен LDA delivery из Dovecot, в файл /etc/postfix/master.cf добавлены две строчки:
Не забываем пробелы ставить!
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

Столбцы со счётчиками и со значениями квот для пользователей добавлены с помощью четырёх SQL-запросов:
ALTER TABLE users ADD COLUMN bytes bigint default 0;
ALTER TABLE users ADD COLUMN messages integer default 0;
ALTER TABLE users ADD COLUMN max_bytes bigint default 1073741824;
ALTER TABLE users ADD COLUMN max_messages bigint default 1000;


В таком виде Dovecot не будет принимать от Postfix письма для адресатов, превысивших квоту. Но такие письма будут просто попадать в очередь отложенных писем Postfix. Нужно же, чтобы письмо не занимало дисковое пространство ни в почтовом ящике получателя, ни в очереди отложенных писем, а отклонялось сразу же с соответствующим сообщением отправителю о том, что адресат превысил квоту.

Для этого нужно настроить проверку квот при приёме почты самим Postfix'ом. Для этого воспользуемся правилом check_recipient_access mysql:/etc/postfix/sql/quotas.cf, которое нужно поместить в том числе до правил permit_mynetworks и permit_sasl_authenticated. Если поместить его после этих двух проверок, то квоты получателя просто не будут проверяться, если отправитель аутентифицировался на почтовом сервере или он отправляет почту из доверенной сети.

Файл /etc/postfix/sql/quotas.cf для проверки квоты получателя:
user = user
password = password
dbname = mail
hosts = 127.0.0.1
query = SELECT '452 Mailbox is over quota'
FROM users
WHERE login = '%s'
AND ((bytes >= max_bytes AND max_bytes > 0)
OR (messages >= max_messages AND max_messages > 0))


Вот так примерно, у меня так настроено, и все отлично работает уже пару лет!