Cuotas al correo de Samba4+Postfix+Dovecot+SASL

Ok, si has seguido la serie de posts en los que monto la infraestructura básica de una red contra Samba4 compilado desde cero, este te vendrá de perlas. Recordaremos que:

– Ya montamos un ADDC[Active Directory Domain Controller], desde cero
– Configuramos el ADDC para conectar a todas las PCs de la red contra él
– Vincular un servidor de correo
– Vinculamos el proxy contra el ADDC, y próximamente pondremos como autenticar el proxy por grupos contra ldap y contra NTLM.
– Y después vincular OpenFire/Ejabberd contra él.

Así tendremos al menos, Internet, Correo y Mensajería Instántanea en nuestra red, totalmente con samba4, cero «Microsoft Active Directory Service«.

Hoy lo que haremos será ponerle cuota al correo, a los usuarios me refiero.
Explico un poco. Casi todos los setups, o al menos los más conocidos configuran las cuotas de espacio de almacenamiento de los usuarios a MySQL, por ejemplo iRedmail. Ahora supongamos… Si mi correo está vinculado contra un LDAP o Active Directory, para que necesito el MySQL? Y qué si yo les dijera que se puede ponerle cuota sin él?

Nos evitaríamos otro daemon más corriendo en la máquina u ocupando ram. Entonces, vamos a ello!

NOTA: Adjunto la configuración que FUNCIONA, así que no os desesperéis! Sigan leyendo para que entiendan como funciona la cosa!

Lo primero es editar el dovecot-ldap.conf agregar al final del archivo:

user_attrs = =home=/home/vmail/%Ld/%Ln/,=mail=maildir:/home/vmail/%d/%n/Maildir,=quota_rule=*:bytes=%{ldap:postOfficeBox}

Y en el dovecot.conf:

mail_plugins = quota mailbox_alias acl mail_log notify stats

En el apartado plugins debemos editarlo de la siguiente manera:

# new "Quota in ADDC's postOfficeBox"
    quota = maildir:User quota

    quota_rule2 = Trash:storage=+100M
    quota_warning = storage=95%% quota-warning 95 %u
    quota_warning2 = storage=80%% quota-warning 80 %u
    quota_grace = 10%%
    # 10% is the default
    quota_status_success = DUNNO
    quota_status_nouser = DUNNO
    quota_status_overquota = "552 5.2.2 Mailbox is full"

Y agregamos dos nuevos servicios:

service quota-warning {
    executable = script /etc/dovecot/scripts/quota-warning.sh
    unix_listener quota-warning {
    user = vmail
    }
}

# Obtained from Dovecot Wiki
service quota-status {
    executable = quota-status -p postfix
    inet_listener {
        port = 12340
        # You can choose any port you want
    }
    client_limit = 1
}

Y en los protocolos:

protocol lda {
    mail_plugins = $mail_plugins
    lda_mailbox_autocreate = yes
    lda_mailbox_autosubscribe = yes
    info_log_path = /var/log/dovecot/dovecot-deliver.log
    log_path = /var/log/dovecot/dovecot.log
    mail_plugin_dir = /usr/lib/dovecot/modules
    mail_plugins = $mail_plugins
    postmaster_address = postmaster@inutil.cu
    sendmail_path = /usr/lib/sendmail
}

protocol imap {
    mail_max_userip_connections = 10
    mail_plugin_dir = /usr/lib/dovecot/modules
    imap_client_workarounds = tb-extra-mailbox-sep
    mail_plugins = $mail_plugins imap_quota imap_stats
}

protocol pop3 {
    mail_plugins = $mail_plugins
    pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
    pop3_uidl_format = %08Xu%08Xv
    mail_max_userip_connections = 10
    pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
    mail_plugin_dir = /usr/lib/dovecot/modules
}

Guardamos y salimos del editor.

cd /etc/dovecot
mkdir scripts
cd scripts
nano quota-warning.sh

Contenido de quota-warning.sh:

#!/bin/sh

PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@inutil.cu
Subject: quota warning

Your mailbox is now $PERCENT% full.
EOF

Guardamos y salimos. Le damos permisos de ejecución:

chmod +x quota-warning.sh

Y listo. Ahora en el Postfix, en el main.cf, sólo debemos editar:

smtpd_recipient_restrictions =
 ...
 check_policy_service inet:127.0.0.1:12340
 ...

Qué es donde el Dovecot está ecuchando conexiones para chequear la cuota al usuario, en el puerto 12340.

Listo, ahora es sólo en el Active Directory, editar las quotas, para lograrlo se deben fijar en:

Propiedades de usuario/Dirección/Apartado Postal

Y ahí seteamos la cuota. La cuota se da en K, M o G, para los valores de Kilo, Mega y Gigabytes, respectivamente. En caso de que no se asigne cuota, el Dovecot nos dará un error como este:

Y el Postfix no dejará enviar el correo, mostrándonos un mensaje de error en los logs como el siguiente:

Ahora bien, si queremos asignar a un buzón cuota ilimitada, sólo debemos asignar de cuota «0G» o «0».

Fuentes:
[1] https://4skill.ru/
[2] https://wiki.dovecot.org/

¿De cuánta utilidad te ha parecido este contenido?

Leslie León Sinclair

Ver comentarios

  • Hola
    Tengo montado postfix con dovecot y parece que las cuotas funcionan correctamente pero cuando envío un email a un dominio externo me crea el directorio del dominio/usuario en /var/vmail con un único fichero en su interior, esto es un problema si se envían muchos emails a distintos destinatarios ya que el sistema de ficheros acabará llegando a límites de inodos, número de directorios, etc.

    Por ejemplo si envío un email a test@dominioinventado.com puedo ver en /var/vmail/dominioinventado.com/test un fichero maildirsize con el contenido:
    53687091200S
    0 0

    Según la doc de postfix:
    http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
    Optional restrictions that the Postfix SMTP server applies in the context of a client RCPT TO command

    Supongo que smtpd_recipient_restrictions se ejecuta cada vez que se detecta un RCPT TO, tanto en los mails de entrada como de salida, hay alguna forma de comprobar las cuotas solo para emails entrantes?

    Un saludo

  • Buenas Tardes.
    Me gustaria saber si conoces la manera de poder contolar los usuarios que tienen permiso de enviar a una lista creada en el AD

Compartir
Publicado por
Leslie León Sinclair

Entradas recientes

Alta disponibilidad de sus base de datos con Percona XtraDB Cluster en Kubernetes

Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…

8 meses hace

Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…

1 año hace

Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…

1 año hace

Home automation (Parte 1)

Desde hace varios meses vengo con la idea de automatizar la casa donde vivo. Poco…

1 año hace

Cocinando una imagen personalizada de OpenWRT

El artículo describe el uso para un caso particular de OpenWRT y la creación de…

1 año hace