May 062012
 
Artículo Postfix

En anteriores artículos hemos visto la manera de instalar Postfix, como administrarlo desde un navegador con Postfixadmin, y como dar acceso IMAP y POP3 con Dovecot.

Pero una vez que nuestro servidor de correo está operativo, cuando llega a tener un cierto número de usuarios, empieza a ser necesario establecer cuotas de uso de disco. A continuación explicamos cómo hacerlo en nuestra configuración con postfix, postfixadmin y dovecot 1.2:

Configuración de Postfix para que la entrega de mensajes sea a través del LDA de Dovecot

Para que la administración de cuotas de Dovecot sea operativa, es necesario que la entrega de los mensajes entrantes en los buzones sea realizada por el LDA (Local Delivery Agent) de Dovecot. Para ello, añadimos las siguientes líneas al final del fichero /etc/postfix/master.cf (Nota: Los espacios en blanco al comienzo de la segunda línea son necesarios):

dovecot unix - n n - - pipe
   flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

y añadimos al final del fichero /etc/postfix/main.cf las líneas:

# Uso de Dovecot como LDA (Local Delivery Agent).
# Esto es necesario para que funcionen las cuotas de disco
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Configuración de Dovecot LDA

En el fichero /etc/dovecot/dovecot.conf, debemos localizar el siguiente conjunto de parámetros, y editarlo como se indica:

  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = vmail
    }
    client {
      path = /var/run/dovecot/auth-client
      mode = 0660
      user = postfix
      group = postfix
    }
  }

Configuración de Postfixadmin para usar cuotas de disco

Editamos el fichero de configuración “/usr/share/postfixadmin/config.inc.php”, para indicar que queremos utilizar cuotas:

// Default Domain Values
// Specify your default values below. Quota in MB.
$CONF['aliases'] = '10';
$CONF['mailboxes'] = '10';
$CONF['maxquota'] = '10';
// Quota
// When you want to enforce quota for your mailbox users
// set this to 'YES'.
$CONF['quota'] = 'YES';
// You can either use '1024000' or '1048576'
$CONF['quota_multiplier'] = '1024000';

// Optional:
// Show used quotas from Dovecot dictionary backend in virtual
// mailbox listing.
// See: DOCUMENTATION/DOVECOT.txt
// http://wiki.dovecot.org/Quota/Dict
//
$CONF['used_quotas'] = 'YES';
// if you use dovecot >= 1.2, set this to yes.
// Note about dovecot config: table "quota" is for 1.0 & 1.1,
// table "quota2" is for dovecot 1.2 and newer
$CONF['new_quota_table'] = 'YES';

El resultado de multiplicar el valor especificado en ‘maxquota’ (10) por el valor de ‘quota_multiplier’ (1024000) es el máximo en bytes de ocupación de espacio de disco permitido a cualquier usuario. En el ejemplo, este límite global es de unos 10 MBytes.

Ahora, cuando accedemos con Postfixadmin a la configuración de un usuario, vemos que aparece un campo que nos permite establecer la cuota de uso de disco para el mismo (con un máximo de 10 MB):

Postfixadmin guarda este valor en la base de datos mysql, en el interior de la tabla ‘mailbox’:

mysql> show columns in mailbox;
+------------+--------------+------+-----+---------------------+-------+
| Field      | Type         | Null | Key | Default             | Extra |
+------------+--------------+------+-----+---------------------+-------+
| username   | varchar(255) | NO   | PRI | NULL                |       |
| password   | varchar(255) | NO   |     | NULL                |       |
| name       | varchar(255) | NO   |     | NULL                |       |
| maildir    | varchar(255) | NO   |     | NULL                |       |
| quota      | bigint(20)   | NO   |     | 0                   |       |
| local_part | varchar(255) | NO   |     | NULL                |       |
| domain     | varchar(255) | NO   | MUL | NULL                |       |
| created    | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| modified   | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| active     | tinyint(1)   | NO   |     | 1                   |       |
+------------+--------------+------+-----+---------------------+-------+

Configuración de Dovecot para usar quotas de disco

Dovecot 1.2 utiliza una tabla de mysql llamada ‘quota2’ que contiene los campos:

mysql> show columns in quota2;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| username | varchar(100) | NO   | PRI | NULL    |       |
| bytes    | bigint(20)   | NO   |     | 0       |       |
| messages | int(11)      | NO   |     | 0       |       |
+----------+--------------+------+-----+---------+-------+

Editamos el fichero de configuración “/etc/dovecot/dovecot.conf” para indicar los plugins a utilizar:

protocol imap {
  ...
  mail_plugins = quota imap_quota
  ...
}
protocol pop3 {
  ...
  mail_plugins = quota
  ...
}

En el mismo fichero, localizamos y editamos como se ve las líneas que indican al plugin ‘quota’ que utilice la configuración de acceso a mysql en el fichero ‘dovecot-dict-sql.conf’

dict {
  quotadict = mysql:/etc/dovecot/dovecot-dict-sql.conf
}
plugin {
  # v1.2 + SQL:
  quota = dict:user::proxy::quotadict
}

y también  creamos el fichero ‘/etc/dovecot/dovecot-dict-sql.conf’ con el siguiente contenido:

# v1.2+ only:
connect = host=localhost dbname=mails user=sqluser password=sqlpass
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
}

Por último, editamos el fichero ‘dovecot-sql.conf’ para que la consultas a la base de datos devuelvan también la quota de disco asignada al usuario:

user_query = SELECT CONCAT('/home/vmail/',maildir) AS home, 
5000 AS uid, 5000 AS gid, 
CONCAT('*:bytes=', CAST(quota AS CHAR)) AS quota_rule 
FROM mailbox WHERE username='%u';

# If you wish to avoid two SQL lookups (passdb + userdb), you can use
# userdb prefetch instead of userdb sql in dovecot.conf. In that case you'll
# also have to return userdb fields in password_query prefixed with "userdb_"
# string. For example:
password_query = 
SELECT username AS user, password, 
maildir AS userdb_home, 5000 AS userdb_uid, 5000 AS userdb_gid, 
CONCAT('*bytes=', CAST(quota AS CHAR)) AS userdb_quota_rule 
FROM mailbox WHERE username = '%u'

Y con esto, tras reiniciar postfix y dovecot ya quedan activadas las cuotas de disco.

 Publicado por en 10:19 am

  2 Respuestas a “Cómo configurar cuotas de uso de disco con Postfix+Postfixadmin+Dovecot 1.2”

  1. UN manual estupendo sencillo y comprensible,yo poseo un servidor con postfix parchado con postfix-vda+sasl+tls+mysql+postfxadmin+roundcube ,la razon por la que uso posfix-vda y no dovecot es que no tenia una informacion que em permitiera enterder logicamnete el funcionamiento y por eso resolvi el problema con lo que tenia ,me funciona perfectamente,lo que sucede es que llevo un tiempo tratando de encontrar informacion para hacer cuotas por mensajes ,es decir,adea de las cuotas delos buzones aplicar cuotas al usuario para que pueda mandar un correo con un tamano determinado

    Buzon pepe (10 MB)
    Mensaje (adjunto 2MB)

    Pense en crear unos registros en la BD y ahcerlo asi peor al verdad es que no tengo ni idea y por otra parte postfixadmin no he visto que posea alguna plantilla para esta finalidad,me pueen ayudar ,aconsejar cualquier cosa e sbienvenida y les agradesco mucho por su trabajo me hizo comprender a profundidad lo que debia saber de dovecot para que este fuese el LDA y no VIRTUAL como lo propone postfixvda

    MUCHAS GRACIAS!!!!!

  2. Se me olvido especificar ,las cuotas por mensajes que sean advitraria ,asignar indepnediente por usuario ,es decir,2 MB a pepe, 5 al jefe,comprendes 😀

 Deja un comentario

(requerido)

(requerido)