Como enviar um aviso com o Dovecot aos usuários quando excederem a cota?

1

Estou tentando implementar o aviso de cota para usuários sobre cotas com a Dovecot, seguindo esta dica . Eu adicionei o seguinte ao meu /etc/dovecot/conf.d/30-overquota.conf (qualquer modificação no original /etc/dovecot/dovecot.conf é dita seria removida em caso de atualização).

plugin {
  quota = dict:user::file:/var/vmail/%d/%n/.quotausage
  sieve=/var/vmail/%d/%n/.sieve

quota_warning = storage=50%% quota-warning 50 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_warning3 = -storage=100%% quota-warning below %u # user is no longer over quota

}

service quota-warning {
  executable = script /opt/extra-script/quota-warning.sh
  user = root
  unix_listener quota-warning {
        user = root
        mode = 0600
  }
}

então eu criei o /opt/extra-script/quota-warning.sh, chmodeando-o para 755

#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: [email protected]
Subject: Mailbox piena

La tua casella è piena al $PERCENT%. Cancellare i messaggi vecchi.
EOF

Infelizmente, isso não está funcionando como deveria, já que não estou recebendo nenhuma mensagem em uma caixa de correio de teste de 1 MB cheia a 95% (e o limite de 30-overquota.conf foi definido em 50% na linha 5).

Alguém pode me ajudar a configurar corretamente o serviço? aqui segue a saída dovecot -n que, tanto quanto eu posso entender, confirma que minha configuração extra está incluída no serviço em execução (mas sem nenhum efeito desejado)

root@centos1670:~# dovecot -n
# 2.2.18: /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.8 (0c4ae064f307+)
# OS: Linux 2.6.32-642.15.1.el6.x86_64 x86_64 CentOS release 6.8 (Final) ext3
auth_mechanisms = plain login digest-md5 cram-md5 apop
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890&.-_@'
disable_plaintext_auth = no
first_valid_uid = 30
imap_client_workarounds = delay-newmail
imap_logout_format = rcvd=%i, sent=%o
mail_home = /var/qmail/mailnames/%Ld/%Ln
mail_location = maildir:/var/qmail/mailnames/%Ld/%Ln/Maildir
mail_log_prefix = "service=%s, user=%u, ip=[%r]. "
mail_plugins = " quota"
managesieve_logout_format = rcvd=%i, sent=%o
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate imapflags notify
namespace inbox {
  inbox = yes
  location = 
  prefix = INBOX.
  separator = .
}
passdb {
  driver = plesk
}
plugin {
  quota = dict:user::file:/var/vmail/%d/%n/.quotausage
  quota_grace = 0
  quota_warning = storage=50%% quota-warning 50 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  quota_warning3 = -storage=100%% quota-warning below %u
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_extensions = +notify +imapflags
}
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_logout_format = rcvd=%i, sent=%o, top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
protocols = imap pop3 sieve
service auth-worker {
  group = 
  user = 
}
service auth {
  group = 
  unix_listener auth-userdb {
    group = popuser
    mode = 0600
    user = popuser
  }
  user = 
}
service quota-warning {
  executable = script /opt/extra-script/quota-warning.sh
  unix_listener quota-warning {
    mode = 0600
    user = root
  }
  user = root
}
ssl_cert = </etc/dovecot/private/ssl-cert-and-key.pem
ssl_key = </etc/dovecot/private/ssl-cert-and-key.pem
userdb {
  args = uid=popuser gid=popuser
  driver = static
}
protocol imap {
  mail_plugins = " quota imap_quota"
}
protocol pop3 {
  pop3_uidl_format = UID%u-%v
}
protocol lda {
  mail_plugins = " quota sieve"
}

edit: como sugerido por Jens Erat, root@centos1670:~# doveadm quota get produz a seguinte saída:

Quota name Type Value Limit %
user STORAGE 0 - 0
user MESSAGE 0 - 0

Isso parece denotar uma configuração defeituosa que pode ser corrigida adicionando algo como quota_rule = *:storage=1GB e impondo o recálculo de cotas. O problema em fazer isso é que a configuração do Dovecot que estou perguntando está rodando sob o Plesk, no qual é possível definir diferentes tamanhos de caixa de correio por usuário, então a possibilidade de definir o valor para quota_rule de uma forma paramétrica seria apreciada.

    
por funkoolow 08.05.2017 / 10:45

2 respostas

1

O Dovecot só adiciona novas alterações ao uso da cota do usuário, a menos que solicitado explicitamente a recalcular a cota (que é uma operação que pode exigir algum tempo para grandes bases de usuários e caixas de correio). Portanto, se você não tiver imposto um recálculo de cota, talvez o Dovecot não saiba que as caixas de correio ultrapassaram o limite de cota.

Use doveadm quota get para obter um dump do banco de dados de cotas atual; doveadm quota recalc aplica o recálculo de cotas.

    
por 08.05.2017 / 18:49
1

Seu problema é causado pela definição incorreta da origem da cota.

O Dovecot ainda não tem o driver% de% de% de% de%. Os possíveis drivers são: plesk , passwd , passwd-file , ldap , sql e dict . Você tem que se referir à configuração do plesk e descobrir que tipo de vpopmail é usado pelo plesk. Então você tem que adicionar linhas correspondentes à sua configuração dovecot.

Na configuração geral da cota do dovecot, deve ser assim:

quota           = maildir:User quota
quota_rule      = Junk:ignore
quota_rule2     = Trash:storage=+100M
quota_warning   = storage=90%% quota-warning 90 %u %d
quota_warning2  = storage=80%% quota-warning 80 %u %d
quota_exceeded_message = ERROR:422 - Mailbox full 

Aqui, a cota por usuário é associada às credenciais do usuário e armazenada junto com o local de login / aprovação e armazenamento no mesmo local. Quando passdb dovecot se refere ao passdb, ele também recupera o limite de cota e o compara com o tamanho real da caixa de correio.

N.B.

Você também pode notar que o script de notificação deliver tem três argumentos em vez de dois - passei nome de usuário e domínio separadamente porque vários domínios são atendidos por um quota-warning e alguns domínios diferentes podem ter os mesmos usuários como dovecot ou webmaster . Tendo passado local e domínio exatos, o dovecot pode evitar a ambiguidade e armazenar mensagens na caixa postal correta.

    
por 09.05.2017 / 12:36

Tags