This program is a policy dæmon to make Postfix reject emails if:
- The recipient is an Unix user, and
- Their filesystem quota is full.
I use it with Linux ext4 diskquota over NFS, but it should work with whatever
implementation understood by the command quota(1). The quota check is run
right during the SMTP transaction, so that Postfix won't have to run further
processing, test for spam, call maildrop/procmail, etc. (It will also prevent a
misconfigured procmail from silently storing messages at /var/mail or
elsewhere.) The sender receives a short failure message saying that the
recipient can't receive messages right now.
The program uses Postfix access policy delegation; for more info, see http://www.postfix.org/SMTPD_POLICY_README.html .
- Python 2.x
- If your python is < 2.7: python-argparse (available via apt-get or pip)
- python-daemon (available via apt-get or pip)
- quota (the binary)
- sudo
I recommend this dæmon to be run under its own user, for security reasons. Quotapolicy must create a socket file, and a pid file; it creates both of them in a directory we’ll call its homedir.
-
If your postfix is chrooted, the quotapolicy homedir must be inside the chroot. If the chroot is at
/var/spool/postfix, then/var/spool/postfix/quotapolicyis as good as any. -
If you don't chroot postfix, then the standards-compliant place would be
/var/run/quotapolicy.
The quotapolicy user needs the following privileges:
-
Read/write/execute permissions on the homedir.
-
Ability to run
sudo /usr/bin/quotawithout a password (you can customize the path to quota(1)).
Once you have decided on a homedir, proceed with the installation. The default
homedir is /var/spool/postfix/quotapolicy.
-
Get the sources:
$ git clone git://github.com/leoboiko/quotapolicy.git $ cd quotapolicy -
Create user
quotapolicyhowever you like. For convenience, the Makefile includes a creation command withadduser, so if you want, you can just use$ sudo make createuserIf your homedir isn't the default, call it like
$ sudo make homedir=/some/other/dir createuser -
Install the program:
$ sudo make installAgain, use
make homedir=if your homedir isn't the default. -
Setup the dæmon to run at system startup, before Postfix. Startup scripts are provided for Debian (
/etc/init.d/quotapolicy), so you can just$ sudo make install_debian # then edit /etc/default/quotapolicy if you want to change optionsSee
quotapolicy --helpfor options. -
Add to
/etc/sudoers(using visudo(8)):quotapolicy myhost=NOPASSWD: /usr/bin/quotaMake sure it works without passwords:
myuser$ sudo -u quotapolicy sudo /usr/bin/quota someuser -
Add the quotapolicy socket to your
smtpd_recipient_restrictionsin Postfixmain.cf. Chrooted postfix example:smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination check_policy_service unix:quotapolicy/quotapolicy.socket [other restrictions...]Non-chrooted example:
smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination check_policy_service unix:/var/run/quotapolicy/quotapolicy.socket [other restrictions...] -
Start the dæmon and restart postfix.