#rate-limiting #postfix #limit #smtp #daemon #quota

bin+lib policyd-rate-limit

Postfix 速率限制 SMTP 策略守护进程

2 个不稳定版本

0.1.0 2020年2月12日
0.0.1 2020年2月3日

#191 in 电子邮件

BSD-3-Clause

15KB
250

policyd-rate-limit

crates.io Build Status

Postfix 速率限制 SMTP 策略守护进程

工作原理

它依赖于 Postfix 策略委派协议,它搜索 sasl_username,并根据存储在 MySQL 数据库中定义的限额拒绝或允许发送 action=DUNNO 的电子邮件。

使用方法

USAGE:
    policyd-rate-limit [OPTIONS] --dsn <dsn> [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -d, --dsn <dsn>          mysql://<username>:<password>@tcp(<host>:<port>)/<database>
        --max <max>          mysql pool max connections [default: 50]
        --min <min>          mysql pool min connections [default: 3]
    -s, --socket <socket>    path to Unix domain socket [default: /tmp/policy-rate-limit.sock]

SUBCOMMANDS:
    cuser    Create the user if not found, defaults: 100 messages per day
    help     Prints this message or the help of the given subcommand(s)

对于子命令 cuser

Create the user if not found, defaults: 100 messages per day

USAGE:
    policyd-rate-limit --dsn <dsn> cuser [OPTIONS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -l, --limit <limit>    maximum allowed messages [default: 100]
    -r, --rate <rate>      rate in seconds, limits the messages to be sent in the defined period [default: 86400]

使用管理器 (immortal) 运行 policyd-rate-limit,例如,如果未找到则创建用户,并且每小时只允许发送 3 封电子邮件,请使用

policyd-rate-limit -d mysql://root:test@tcp(localhost)/policyd -s /var/run/policy-rate-limit.sock cuser -l 3 -r 3600

数据库模式

CREATE SCHEMA IF NOT EXISTS `policyd` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE policyd;

CREATE TABLE IF NOT EXISTS `ratelimit` (
	`username` VARCHAR(128) NOT NULL COMMENT 'sender address (SASL username)',
	`quota` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'limit',
	`used` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'current recipient counter',
	`rate` INT(10) UNSIGNED DEFAULT '0' COMMENT 'seconds after which the counter gets reset',
	`rdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'datetime when counter was reset',
	PRIMARY KEY (`username`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

Postfix 配置

将策略速率限制套接字路径添加到 smtpd_sender_restrictions,例如

smtpd_sender_restrictions: check_policy_service { unix:/tmp/policy-rate-limit.sock, default_action=DUNNO }

检查套接字的权限,您可能需要 chmod 666

依赖项

~17–29MB
~470K SLoC