Postfix для квоты домена

Мы используем комбинацию 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 ГБ, но почему?

0
задан 2 March 2016 в 13:40
1 ответ

РЕШЕНИЕ НАЙДЕНО!

Чтобы использовать функцию квотирования домена в 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';
1
ответ дан 4 December 2019 в 16:40

Теги

Похожие вопросы