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».

Gracias por la ayuda a Andrei de [1], Спасибо огромное!!!

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *