Мы используем комбинацию Postfix 2.11.0 и Dovecot 2.2.9 в качестве MTA / MDA. В качестве интерфейса для управления почтовыми доменами и почтовыми ящиками используется postfix.admin.
Поскольку разрешение пользователям добавлять почтовые ящики в свои домены может довольно легко выйти из-под контроля, я хотел бы установить максимальный размер почтовых ящиков для каждого домена.
Так, например:
domain example.com >> Domain quoata = 20000 MB
Это затем позволит пользователям свободно настраивать свои почтовые ящики любого желаемого размера, но не позволит им использовать в общей сложности более 20 ГБ (распределенных по всем почтовым ящикам).
Для пояснения я не хочу устанавливать квоту для каждого почтового ящика, которая принудительно с этим. Администраторы получают x МБ пространства и могут назначать его по своему усмотрению.
Моей первой мыслью было бы добавить эту функцию в postfix.admin самостоятельно, добавив новый столбец в таблицу доменов, в которой хранится квота домена. Затем каждый раз при добавлении нового почтового ящика в конкретный домен столбец, содержащий текущие квоты почтовых ящиков, будет запрашиваться и суммироваться, а затем проверяться с помощью этого образца кода (это не настоящий код!):
if (SUM(mailbox_quota) + to_add_mailbox_quota > domain_qouta) {
throw_warning and don't proceed
}
Но, возможно, мне не хватает Из-за некоторой функции, я рад познакомиться с несколькими подходами к этому.
EDIT:
Оценивая postfix. Код администратора Я нашел это:
# TODO: detailed error message ("domain quota exceeded", "mailbox quota too big" etc.) via flash_error? Or "available quota: xxx MB"?
if ( !Config::bool('domain_quota') ) {
return true; # enforcing domain_quota is disabled - just allow it
} elseif ($limit['quota'] <= 0) { # TODO: CHECK - 0 (unlimited) is fine, not sure about <= -1 (disabled)...
$rval = true;
} elseif ($quota == 0) { # trying to create an unlimited mailbox, but domain quota is set
return false;
} else {
$table_mailbox = table_by_key('mailbox');
$query = "SELECT SUM(quota) FROM $table_mailbox WHERE domain = '" . escape_string($domain) . "'";
$query .= " AND username != '" . escape_string($this->id) . "'";
$result = db_query ($query);
$row = db_row ($result['result']);
$cur_quota_total = divide_quota($row[0]); # convert to MB
if ( ($quota + $cur_quota_total) > $limit['quota'] ) {
$rval = false;
} else {
$rval = true;
}
}
return $rval;
Это должно, если я правильно понимаю, делать именно то, что я сказал выше, если он установлен таким образом в конфигурации (а это так):
// If you want to enforce domain-level quotas set this to 'YES'.
$CONF['domain_quota'] = 'YES';
Но я могу добавить почтовые ящики с квотой 4 ГБ в домен с принудительной квотой 2 ГБ, но почему?
РЕШЕНИЕ НАЙДЕНО!
Чтобы использовать функцию квотирования домена в postfix 2.3.8, вы должны не только принудительно установить квоту домена, но и установить квоту для пользователей почтовых ящиков в целом.
Это действительно плохо документировано / недокументировано / неясно с точки зрения администраторов. Я надеюсь, что это поможет кому-нибудь в будущем.
Это должно быть в вашем config.inc.php
:
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'YES';
// If you want to enforce domain-level quotas set this to 'YES'.
$CONF['domain_quota'] = 'YES';