할당량이 초과되면 Dovecot을 사용하여 사용자에게 경고를 보내는 방법은 무엇입니까?

할당량이 초과되면 Dovecot을 사용하여 사용자에게 경고를 보내는 방법은 무엇입니까?

Dovecot에서 할당량을 초과한 사용자에 대해 할당량 경고를 다음과 같이 구현하려고 합니다.이 팁. 나는 다음을 내 항목에 추가했습니다 /etc/dovecot/conf.d/30-overquota.conf(아마도 원본의 모든 수정 사항은 /etc/dovecot/dovecot.conf업데이트 시 제거될 것입니다).

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
  }
}

그런 다음 /opt/extra-script/quota-warning.sh를 만들고 755로 chmoded했습니다.

#!/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

불행하게도 이것은 95%가 꽉 찬 1MB 테스트 편지함에 어떤 메시지도 수신하지 못하기 때문에 작동하지 않습니다(그리고 30-overquota.conf의 한도는 5행에서 50%로 설정되어 있습니다).

이 서비스를 올바르게 구성하는 데 도움을 줄 수 있는 사람이 있습니까? 다음은 dovecot -n내가 알 수 있는 한 추가 구성이 실행 중인 서비스에 포함되어 있음을 확인하는 출력입니다(그러나 예상되는 효과는 없습니다).

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"
}

편집: Jens Erat의 제안에 따라 root@centos1670:~# doveadm quota get실제로 다음과 같은 출력이 생성됩니다.

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

quota_rule = *:storage=1GB이는 강제 할당량 재계산과 같은 기능을 추가하여 수정할 수 있는 구성의 결함을 나타내는 것 같습니다 . 문제는 내가 요청하는 Dovecot 설정이 각 사용자마다 다른 사서함 크기를 설정할 수 있는 Plesk에서 실행된다는 것입니다. 따라서 quota_rule값을 매개변수적으로 정의할 수 있으면 감사하겠습니다.

답변1

Dovecot은 할당량을 다시 계산하도록 명시적으로 요청하지 않는 한(대규모 사용자 그룹 및 사서함의 경우 상당한 시간이 걸릴 수 있는 작업) 사용자의 할당량 사용에 새로운 변경 사항만 추가합니다. 따라서 할당량 재계산을 강제로 수행하지 않으면 Dovecot은 사서함이 할당량 제한을 초과했다는 사실을 알지 못할 수 있습니다.

사용doveadm quota get현재 할당량 데이터베이스의 덤프를 가져옵니다.doveadm quota recalc강제 할당량 재계산.

답변2

문제는 잘못된 할당량 소스 정의로 인해 발생합니다.

pleskDovecot에는 passdb 드라이버가 전혀 없습니다. 가능한 드라이버는 passwd, passwd-file, 및 ldap입니다 . plesk 구성을 참조하여 plesk가 어떤 유형을 사용하고 있는지 알아내야 합니다 . 그런 다음 비둘기장 구성에 해당 줄을 추가해야 합니다.sqldictvpopmailpassdb

일반적으로 비둘기장 할당량 구성은 다음과 같아야 합니다.

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 

여기에서 사용자별 할당량은 사용자의 자격 증명과 연결되며 로그인/비밀번호 및 저장 위치와 함께 동일한 위치에 저장됩니다. dovecot은 passdb를 참조할 때 deliver할당량 제한도 검색하여 실제 메일함 크기와 비교합니다.

알아채다

또한 알림 스크립트에는 quota-warning두 개가 아닌 세 개의 매개변수가 있음을 알 수 있습니다. 여러 도메인이 하나의 도메인에 의해 제공되고 dovecot거의 다른 도메인에 동일한 사용자가 있을 수 있기 때문에 사용자 이름과 도메인을 별도로 전달했습니다(예: webmaster또는 ) abuse. 정확한 로컬 부분과 도메인을 전달함으로써 dovecot은 모호성을 피하고 메시지를 올바른 사서함에 저장할 수 있습니다.

관련 정보