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
문제는 잘못된 할당량 소스 정의로 인해 발생합니다.
plesk
Dovecot에는 passdb 드라이버가 전혀 없습니다. 가능한 드라이버는 passwd
, passwd-file
, 및 ldap
입니다 . plesk 구성을 참조하여 plesk가 어떤 유형을 사용하고 있는지 알아내야 합니다 . 그런 다음 비둘기장 구성에 해당 줄을 추가해야 합니다.sql
dict
vpopmail
passdb
일반적으로 비둘기장 할당량 구성은 다음과 같아야 합니다.
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은 모호성을 피하고 메시지를 올바른 사서함에 저장할 수 있습니다.