2 个不稳定版本
0.1.0 | 2020年2月12日 |
---|---|
0.0.1 | 2020年2月3日 |
#191 in 电子邮件
15KB
250 行
policyd-rate-limit
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