user icon

DovecotのQuotaをSQLで個別に設定

前回の投稿 にクォータを加えて、個人別に容量を制限出来るようにしてみます。 ※使用したDovecotのバージョンは2.3.16でした。2.2.19以降であれば恐らく設定をそのまま使えると思います。
まずは、全員共通の設定が出来るようにします。

Dovecot設定

  • /etc/dovecot/conf.d/10-mail.conf
mail_plugins = $mail_plugins quota
  • /etc/dovecot/conf.d/20-imap.conf
protocol imap{
   mail_plugins = $mail_plugins imap_quota
   # ...
}
  • /etc/dovecot/conf.d/90-quota.conf
plugin {
  quota_rule = *:storage=100M
  # res postfix
  quota_status_success = DUNNO
  quota_status_nouser = DUNNO
  quota_status_overquota = "552 5.2.2 Mailbox is full"
}

# ...

# backend
plugin{
  quota_vsizes = yes
  quota = count:User quota
}
# for postfix
service quota-status {
  executable = quota-status -p postfix
  inet_listener {
    port = 12340
    # You can choose any port you want
  }
  client_limit = 1
}
quota_status_*とservice quota-statusはPostfix用の設定で、Dovecot 2.2からはPostfix用ポリシーサービスを使えるようになり、PostfixはDovecotにquotaのお伺いを立てるだけで良いようです。 https://blog.sys4.de/postfix-dovecot-mailbox-quota-en.html
バックエンドには2.2.19からcountが追加され、新規インストールにはcountを使う事を推奨しているようですのでcountを使います。
https://doc.dovecot.org/configuration_manual/quota_plugin/

Postfix設定

  • /etc/postfix/main.cf
smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:12340
これでPostfixは送信前にDovecotへお伺いを立てるようになります。 ここまでの設定で、全員が100MBの容量制限を設定されました。 DovecotとPostfixをリロードしてRoundCubeで見ると、確かに100MBの制限が入っています。

次は個人ごとの設定です。

PostgreSQL

psqlコマンドラインでクォータ用カラムを追加します。 取り合えず細かい容量設定は必要無いのでquota_mbとして、MB単位での入力にしておきます。
ALTER TABLE mail_users ADD quota_mb integer DEFAULT 100;
DROP VIEW user_view;
CREATE VIEW user_view AS SELECT *,
    name||'@'||domain AS mail,
    '/var/mail/vhosts/'||domain||'/'||name AS dovecot_home,
    domain||'/'||name||'/Maildir/' AS maildir,
    '*:storage='||quota_mb||'M' AS quota_rule
    FROM mail_users;
user_viewにquota_ruleを追加する事で、前回のdovecot-sql.conf.extならquota_ruleを個別に適用してくれます。 Dovecotをリロードしてquota_mbの値を10にUPDATEしてみると、RoundCubeも10MBに更新されています(UPDATEするたびに値が変わるので、結構楽しいです)。
doveadm userでも10MBになっている事が確認出来ます。 ここで自分宛に送って10MB容量いっぱいにしてから送信をすると、送信時にエラーメッセージが表示され、送信出来ない事が確認出来ました。
これで全体の100MBでなく、ちゃんと個別の10MBで制限されている事が確認出来ました。 Facebooktwitterlinkedintumblrmail

タグ: , ,

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)