Amazon Best VPN GoSearch

OnWorks 网站图标

postfwd1 - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 postfwd1

这是 postfwd1 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


postfwd - postfix 防火墙守护进程

概要


postfwd [选项] [SOURCE1, SOURCE2, ...]

规则集:(至少一个,允许多次使用):
-f, --file 从中读取规则
-r, --规则添加配置

评分:
-s, --scores = 回报当分数超过

控制:
-d, --daemon 作为守护进程运行 postfwd
-k, --kill 停止守护进程
--reload 重新加载配置
--dumpstats 显示使用统计
--dumpcache 显示缓存内容
--delcache 从请求缓存中删除一个项目
--延迟从速率缓存中删除一个项目

网络:
-i, --interface 监听接口
-p, --port 监听端口
--proto 套接字类型(tcp 或 unix)
-u, --user 将 uid 设置为用户
-g, --group 将 gid 设置为组
--umask 为文件权限设置 umask
-R, --chroot 将守护进程 chroot 到
--pidfile 在下创建pidfile
- 设施系统日志工具
--socktype系统日志袜子类型
-l, --logname系统日志消息的标签
--loglen 在之后截断系统日志字符

缓存:
-c, --cache 将请求缓存超时设置为秒
--cache-no-size 忽略缓存的大小属性
--cache-no-sender 忽略缓存中的发件人地址
--cache-rdomain-only 忽略缓存中收件人地址的本地部分
--cache-rbl-timeout 默认 rbl 超时,如果未在规则集中指定
--cache-rbl-default 默认 rbl 响应模式匹配(正则表达式)
--cacheid , .. 请求缓存标识符的属性列表
--cleanup-requests 请求缓存的清理间隔(以秒为单位)
--cleanup-rbls rbl 缓存的清理间隔(以秒为单位)
--cleanup-rates 速率缓存的清理间隔(以秒为单位)

可选的:
-t, --test 测试, 总是返回 "dunno"
-v, --verbose 详细日志记录,使用两次 (-vv) 来提高级别
-S, --summary 每隔一段时间显示一些使用统计信息秒
--norulelog 禁用规则日志记录
--norulestats 禁用每个规则的统计信息
--noidlestats 在空闲时禁用统计信息
-n, --nodns 禁用 dns
--nodnslog 禁用 dns 日志记录
--dns_async_txt 同时执行 dnsbl A 和 TXT 查找
--dns_timeout 异步 dns 查询的超时时间(以秒为单位)
--dns_timeout_max dns 超时的最大值,直到 dnsbl 将被停用
--dns_timeout_interval 以秒为单位的 dns 超时最大计数器的间隔
--dns_max_ns_lookups 使用 sender_ns_addrs 查找的最大名称
--dns_max_mx_lookups 使用 sender_mx_addrs 查找的最大名称
-I, --instantcfg 为每个新请求重新读取规则文件
--config_timeout
--keep_rates 在重新加载时不清除速率限制计数器
--save_rates 磁盘上的保存和加载速率限制
--fast_limit_evaluation 在解析规则集之前评估速率限制
(请注意限制)

插件:
--插件从文件加载 postfwd 插件

信息(仅在命令行中使用!):
-C, --showconfig 显示规则集摘要,-v 表示详细
-L, --stdoutlog 将系统日志消息重定向到标准输出
-P, --perfmon 没有系统日志,没有标准输出
-V, --version 显示程序版本
-h, --help 显示用法
-m, --manual 显示程序手册

商品描述


引言
postfwd 被编写成将复杂的后缀限制组合在一个类似于那些规则集的规则集中
大多数防火墙。 程序使用后缀策略委托协议来控制
在邮件被接受之前访问邮件系统(请访问
<http://www.postfix.org/SMTPD_POLICY_README.html> 了解更多信息)。

postfwd 允许您为多个组合选择一个操作(例如拒绝、不知道)
smtp 参数(如发件人和收件人地址、大小或客户端的 TLS 指纹)。
它还提供了简单的宏/acls,应该允许直接和易于阅读
配置。

特色:

* smtp 参数的复杂组合

* 结合 RBL/RHSBL 查找与根据结果的任意操作

* 评分系统

* 基于日期/时间的规则

* 宏/ACL、组、否定

* 比较请求属性(例如 client_name 和 helo_name)

* 请求和 dns 查找的内部缓存

* 内置统计规则效率分析

配置
配置行由可选的 item=value 对组成,以分号 (`;`) 分隔
以及适当的期望操作:

[ = ; = ; ...] 动作=

计费示例:

客户端地址=192.168.1.1; 发件人==[电子邮件保护] ; 行动=拒绝

这将拒绝来自 192.168.1.1 的所有带有信封发件人的邮件 [电子邮件保护]。 的顺序
元素并不重要。 因此,以下将导致与以下相同的结果
上一个例子:

动作=拒绝; 客户端地址=192.168.1.1; 发件人==[电子邮件保护]

将请求项与规则集进行比较的方式可能会受到以下影响
方式:

================================================== ==================
ITEM == VALUE 如果 ITEM 等于 VALUE,则为真
ITEM => VALUE 如果 ITEM >= VALUE,则为真
ITEM =< VALUE 如果 ITEM <= VALUE 为真
ITEM > VALUE 如果 ITEM > VALUE 为真
ITEM < VALUE 如果 ITEM < VALUE 为真
ITEM =~ VALUE 如果 ITEM ~= /^VALUE$/i 为真
ITEM != VALUE 如果 ITEM 等于 VALUE,则为 false
ITEM !> VALUE 如果 ITEM >= VALUE,则为 false
ITEM !< VALUE 如果 ITEM <= VALUE,则为 false
ITEM !~ VALUE 如果 ITEM ~= /^VALUE$/i,则为 false
ITEM = VALUE 默认行为(参见项目部分)
================================================== ==================

要识别日志文件中的单个规则,您可以为每个规则添加唯一标识符
它:

id=R_001 ; 动作=拒绝; 客户端地址=192.168.1.1; 发件人==[电子邮件保护]

您可以使用这些标识符作为`跳()` 命令(参见操作部分
以下)。 前导或尾随空白字符将被忽略。 使用“#”来评论你的
配置。 别人会欣赏。

一个规则集由一个或多个规则组成,可以从文件加载或作为
命令行参数。 有关更多信息,请参阅下面的命令行部分
这个话题。

由于 postfwd 版本 1.30 跨越多行的规则可以通过前缀定义
以下几行带有一个或多个空白字符(或 '}' 表示宏):

id=规则001
客户端地址=192.168.1.0/24
发件人==[电子邮件保护]
action=REJECT 没有访问权限

1.30 之前的 postfwd 版本需要尾随 ';' 和 '\'-字符:

id=规则001; \
客户端地址=192.168.1.0/24; \
发件人==[电子邮件保护]; \
action=REJECT 没有访问权限

指标
id - 唯一的规则 ID,可用于日志分析
id 也用作“跳转”命令的目标。

日期,时间 - 指定规则内的时间或日期范围应命中
# 格式:
# 29 月 XNUMX 日
日期= 29.02.2008
# 24 月,26 日 - XNUMX 日
日期=24.12.2008-26.12.2008
#即日起至23月XNUMX日
日期=-23.09.2008
#从1月XNUMX日到今天

日期=01.04.2008-
天、月 - 一系列工作日(周日至周六)或月(XNUMX 月至 XNUMX 月)
在规定的规则内应击中

score - 当指定的分数被击中时(见动作部分)
指定的动作将返回到 postfix
分数被设置为全局直到重新定义!

request_score - 此值允许访问请求的分数。 它
可以用作变量($$request_score)。

rbl, rhsbl, - 查询指定的 RBLs/RHSBLs,可能的值为:
rhsbl_client, [/ / , / / ]
rhsbl_sender,(默认:reply=^127\.0\.0\.\d+$ maxcache=3600)
rhsbl_reverse_client 将合并所有 rhsbl_* 查询的结果
在 rhsbl_count 中(见下文)。

rblcount, rhsblcount - 要匹配的最小 RBL/RHSBL 命中计数。 如果没有指定
单个 RBL/RHSBL 命中将匹配 rbl/rhsbl 项目。
您可以指定“all”来评估所有项目,并使用
它作为动作中的变量(参见动作部分)
(默认:1)

sender_localpart, - 发件人地址的本地/域部分
发件人域

收件人_本地部分,-收件人地址的本地/域部分
收件人域

helo_address - postfwd 尝试查找 helo_name。 用
helo_address=!!(0.0.0.0/0) 检查未知。
请不要将其用于积极的访问控制
(白名单),因为它可能是伪造的。

sender_ns_names, - postfwd 尝试查找名称/IP 地址
发件人域部分的名称服务器的 sender_ns_addrs。
请不要将其用于积极的访问控制
(白名单),因为它可能是伪造的。

sender_mx_names, - postfwd 尝试查找名称/IP 地址
发件人域部分的 mx 记录的 sender_mx_addrs。
请不要将其用于积极的访问控制
(白名单),因为它可能是伪造的。

版本 - postfwd 版本,包含“postfwd n.nn”
这可以在您的规则集中启用基于版本的检查
(例如迁移)。 也适用于旧版本,
因为一个不存在的项目总是返回 false:
# 版本 >= 1.10
id=R01; 版本~=1\.[1-9][0-9]; sender_domain==some.org \
; action=REJECT 抱歉没有访问权限

ratecount - 仅适用于 rate()、size() 和 rcpt() 操作。
包含实际限制计数器:
id=R01; action=rate(发件人/200/600/REJECT 超过 200 的限制 [$$ratecount hits])
id=R02; action=rate(发件人/100/600/WARN 超过 100 的限制 [$$ratecount hits])

除了这些,您还可以指定 postfix 策略委托协议的任何属性。
随意按照您需要的方式组合它们(查看下面的示例部分)。

大多数值可以指定为正则表达式 (PCRE)。 请看下表
细节:

# ================================================== ==========
# 项目=值类型
# ================================================== ==========
id=某物掩码=字符串
日期=01.04.2007-22.04.2007 掩码 = 日期 (DD.MM.YYYY-DD.MM.YYYY)
时间=08:30:00-17:00:00 掩码 = 时间 (HH:MM:SS-HH:MM:SS)
days=Mon-Wed 掩码 = 工作日(Mon-Wed)或数字(1-3)
月份=Feb-Apr 掩码= 月份(Feb-Apr)或数字(1-3)
score=5.0 掩码 = 最大浮点值
rbl=zen.spamhaus.org 掩码 = / / [,...]
rblcount=2 掩码 = 数字,如果 rbl 命中 >= 2 则匹配
helo_address= 掩码 = CIDR[,CIDR,...]
sender_ns_names=some.domain.tld 掩码 = PCRE
sender_mx_names=some.domain.tld 掩码 = PCRE
sender_ns_addrs= 掩码 = CIDR[,CIDR,...]
sender_mx_addrs= 掩码 = CIDR[,CIDR,...]
#------------------------------
# Postfix 2.1 及更高版本:
#------------------------------
客户地址= 掩码 = CIDR[,CIDR,...]
client_name=another.domain.tld 掩码 = PCRE
reverse_client_name=another.domain.tld 掩码 = PCRE
helo_name=some.domain.tld 掩码 = PCRE
发件人=[电子邮件保护] 掩码 = PCRE
收件人=[电子邮件保护] 掩码 = PCRE
收件人计数=5 掩码=数字,如果收件人>= 5,则匹配
#------------------------------
# Postfix 2.2 及更高版本:
#------------------------------
sasl_method=普通掩码= PCRE
sasl_username=你掩码= PCRE
sasl_sender= 掩码 = PCRE
size=12345 掩码 = 数字,如果大小 >= 12345 匹配
ccert_subject=blackhole.nowhere.local mask = PCRE(仅当 tls 验证)
ccert_issuer=John+20Doe 掩码 = PCRE(仅当 tls 验证时)
ccert_fingerprint=AA:BB:CC:DD:EE:... mask = PCRE(不要在这里使用“...”)
#------------------------------
# Postfix 2.3 及更高版本:
#------------------------------
加密协议=TLSv1/SSLv3 掩码= PCRE
encryption_cipher=DHE-RSA-AES256-SHA 掩码 = PCRE
加密密钥大小= 256 掩码 = 数字,如果密钥大小 >= 256 将匹配
...

当前列表可以在http://www.postfix.org/SMTPD_POLICY_README.html>. 请
仔细阅读可以在 smtp 事务的哪个级别使用哪个属性
(例如 size 只会在 END-OF-MESSAGE 级别可靠地工作)。 模式匹配是
执行不区分大小写。

允许多次使用同一项目,并将作为逻辑 OR 进行比较,这意味着
这将按预期工作:

id=TRUST001; 动作=确定; 加密密钥大小=64
ccert_fingerprint=11:22:33:44:55:66:77:88:99
ccert_fingerprint=22:33:44:55:66:77:88:99:00
ccert_fingerprint=33:44:55:66:77:88:99:00:11
发件人=@domain\.local$

client_address、rbl 和 rhsbl 项目也可以指定为空格或逗号分隔
值:

id=跳过01; 行动=不知道
客户端地址=192.168.1.0/24, 172.16.254.23
id=跳过02; 行动=不知道
客户端地址=10.10.3.32 10.216.222.0/27

以下项目目前必须是唯一的:

id、最小值和最大值、rblcount 和 rhsblcount

任何项目都可以通过前面的 '!!' 否定到它,例如:

id=HOST001 ; 主机名 == !!secure.trust.local ; action=REJECT only secure.trust.local 请

或使用正确的比较运算符:

id=HOST001 ; 主机名 != secure.trust.local ; action=REJECT only secure.trust.local 请

为了避免与正则表达式混淆或只是为了更好的可见性,您可以使用 '!!(...)':

id=USER01 ; sasl_username = !!( (bob|alice) ) ; action=REJECT 那是谁?

请求属性可以通过前面的 '$$' 字符进行比较,例如:

id=R-003 ; 客户名称 = !! $$helo_name ; action=WARN helo 与 DNS 不匹配
# 要么
id=R-003 ; 客户端名称 = !!($$(helo_name)) ; action=WARN helo 与 DNS 不匹配

这仅对 PCRE 值有效(参见上面的列表)。 比较将执行为
不区分大小写的精确匹配。 使用“-vv”选项进行调试。

任何新规则都将重置这些特殊项目:

rblcount - 包含 RBL 答案的数量
rhsblcount - 包含 RHSBL 答案的数量
匹配 - 包含匹配项目的数量
dnsbltext - 包含表单中所有 RBL 和 RHSBL 回复的 dns TXT 部分
rbltype:rblname: ; rbltype:rblname: ; ...

这些特殊项目将针对任何匹配规则进行更改:

request_hits - 包含所有匹配规则的 ID

这意味着可能需要保存它们,如果您计划在
后期规则:

# 设置值
id=RBL01 ; rhsblcount = 全部; rblcount = 全部
动作=设置(HIT_rhls=$$rhsblcount,HIT_rbls=$$rblcount,HIT_txt=$$dnsbltext)
rbl=list.dsbl.org、bl.spamcop.net、dnsbl.sorbs.net、zen.spamhaus.org
rhsbl_client=rddn.dnsbl.net.au、rhsbl.ahbl.org、rhsbl.sorbs.net
rhsbl_sender=rddn.dnsbl.net.au、rhsbl.ahbl.org、rhsbl.sorbs.net

# 相比
id=RBL02 ; HIT_rhls>=1 ; HIT_rbls>=1 ; action=554 5.7.1 使用 $$HIT_rhls RHSBLs 和 $$HIT_rbls RBLs [INFO: $$HIT_txt] 阻止
id=RBL03 ; HIT_rhls>=2 ; action=554 5.7.1 使用 $$HIT_rhls RHSBLs [INFO: $$HIT_txt] 阻止
id=RBL04 ; HIT_rbls>=2 ; action=554 5.7.1 使用 $$HIT_rbls RBLs 阻止 [INFO: $$HIT_txt]

FILES
由于 postfwd1 v1.15 和 postfwd2 v0.18 长项目列表可以存储在单独的文件中:

id=R001 ; ccert_fingerprint==file:/etc/postfwd/wl_ccerts ; 行动=不知道

postfwd 将从 /etc/postfwd/wl_ccerts 读取项目列表(每行一个项目)。
允许评论:

# 客户端 1
11:22:33:44:55:66:77:88:99
# 客户端 2
22:33:44:55:66:77:88:99:00
# 客户端 3
33:44:55:66:77:88:99:00:11

要以键=值格式使用现有表,您可以使用:

id=R001 ; ccert_fingerprint==table:/etc/postfwd/wl_ccerts ; 行动=不知道

这将忽略右侧的值。 项目可以混合:

id=R002 ; 行动=拒绝
客户名称==未知
client_name==文件:/etc/postfwd/blacklisted

对于非 pcre(逗号分隔)项目:

id=R003 ; 行动=拒绝
客户端地址==10.1.1.1,文件:/etc/postfwd/blacklisted

id=R004 ; 行动=拒绝
rbl=myrbl.home.local, zen.spamhaus.org, 文件:/etc/postfwd/rbls_changed

您可以在命令行中使用 --show_config 选项检查您的配置:

# postfwd --showconfig --rule='action=DUNNO; 客户端地址=10.1.0.0/16,文件:/etc/postfwd/wl_clients,192.168.2.1'

应该给出类似的东西:

规则 0: id->"R-0"; 动作->“不知道”; client_address->"=;10.1.0.0/16, =;194.123.86.10, =;186.4.6.12, =;192.168.2.1"

如果一个文件不能被读取,它将被忽略:

# postfwd --showconfig --rule='action=DUNNO; 客户端地址=10.1.0.0/16,文件:/etc/postfwd/wl_clients,192.168.2.1'
[日志警告]:错误:找不到文件 /etc/postfwd/wl_clients - 文件将被忽略?
规则 0: id->"R-0"; 动作->“不知道”; 客户端地址->"=;10.1.0.0/16,=;192.168.2.1"

在配置阶段评估文件项。 因此,如果出现以下情况,则需要重新加载 postfwd
文件已更改。

如果要指定一个文件,该文件将为每个请求重新加载,您可以使用 lfile:
和ltable:

id=R001; client_address=lfile:/etc/postfwd/client_whitelist; 行动=不知道

这将在每次规则时检查 /etc/postfwd/client_whitelist 的修改时间
进行评估并根据需要重新加载。 当然这可能会增加系统负载,所以
请小心使用。

--showconfig 选项说明了区别:

## 在配置阶段评估
# postfwd2 --nodaemon -L --rule='client_address=table:/etc/postfwd/clients; 行动=不知道' -C
规则 0: id->"R-0"; 动作->“不知道”; client_address->"=;1.1.1.1, =;1.1.1.2, =;1.1.1.3"

## 评估任何规则命中
# postfwd2 --nodaemon -L --rule='client_address=ltable:/etc/postfwd/clients; 行动=不知道' -C
规则 0: id->"R-0"; 动作->“不知道”; client_address->"=;ltable:/etc/postfwd/clients"

文件可以引用其他文件。 以下内容有效。

-- 文件 /etc/postfwd/rules.cf --
id=R001; client_address=file:/etc/postfwd/clients_master.cf; 行动=不知道

-- 文件 /etc/postfwd/clients_master.cf --
192.168.1.0/24
文件:/etc/postfwd/clients_east.cf
文件:/etc/postfwd/clients_west.cf

-- 文件 /etc/postfwd/clients_east.cf --
192.168.2.0/24

-- 文件 /etc/postfwd/clients_west.cf --
192.168.3.0/24

请注意,当前没有循环检测(/a/file 调用 /a/file)并且这
功能仅适用于 postfwd1 v1.15 和 postfwd2 v0.18 及更高版本。

行动
一般用途总体评估

当所有规则项都匹配一个请求(或至少其中之一)时,将执行操作
任何项目列表)。 您可以通过前面的 $$ 字符来引用请求属性,例如:

id=R-003; client_name = !!$$helo_name; action=WARN helo '$$helo_name' 与 DNS '$$client_name' 不匹配
# 要么
id=R-003; client_name = !!$$helo_name; action=WARN helo '$$(helo_name)' 与 DNS '$$(client_name)' 不匹配

后缀 行动

根据策略委派请求,操作将回复到 postfix。 任何动作
允许后缀理解 - 请参阅“man 5 access”或
<http://www.postfix.org/access.5.html> 进行说明。 如果未指定操作,则
仅记录事件的后缀警告操作将用于相应的规则。

如果 postfwd 已到达规则集的末尾并且没有规则,则 postfwd 将返回不知道
匹配。 这可以通过放置仅包含操作语句的最后一条规则来更改:

...
行动=不知道; [电子邮件保护] # 发件人正常
action=reject # 默认拒绝

后转 行动

postfwd 动作控制程序的行为。 目前您可以指定
在以下:

跳( )
跳转到带有 id 的规则, 使用它来跳过某些规则。
你可以向后跳 - 但请记住没有循环
此刻检测! 跳转到不存在的 id 将被跳过。

分数 ( )
请求的分数将被指定的修改,
这必须是一个浮点值。 修饰符可以是
+n.nn 将 n.nn 添加到当前分数
-n.nn 从当前分数中减去 n.nn
*n.nn 将当前分数乘以 n.nn
/n.nn 将当前分数除以 n.nn
=n.nn 将当前分数设置为 n.nn
如果分数超过`--scores` 选项设置的最大值(参见
COMMAND LINE) 或得分项目(见项目部分),动作
将返回为此案例定义的(默认值:5.0=>“REJECT postfwd score exceeded”)。

放 ( = , = ,...)
此命令允许您插入或覆盖请求属性,然后可能是
与您的进一步规则集相比。 使用它来加速与大型项目列表的重复比较。
请参阅示例部分了解更多信息。 您可以分隔多个键=值对
由“,”字符组成。

速度 ( / / / )
这个命令为给定的创建一个计数器, 任何时候请求都会增加
包含它到达。 如果超过之内秒它会返回到后缀。
速率计数器非常快,因为它们在解析规则集之前执行。
请注意仅限于 postfwd 版本 <1.33 的 postfix 操作(无 postfwd 操作)!
# 每 3 分钟不超过 5 个请求
# 来自同一个“未知”客户端
id=RATE01 ; 客户名称==未知
action=rate(client_address/3/300/450 4.7.1 抱歉,每 3 分钟最多 5 个请求)
另请注意,规则集中的速率限制顺序很重要,这意味着
这个:
# 按预期工作
id=R001; action=rcpt(发件人/500/3600/REJECT 限制每小时 500 个收件人超过发件人 $$sender)
编号=R002; action=rcpt(sender/200/3600/WARN state YELLOW for sender $$sender)
导致与此不同的结果:
# 规则 R002 永远不会被执行
编号=R001; action=rcpt(sender/200/3600/WARN state YELLOW for sender $$sender)
id=R002; action=rcpt(发件人/500/3600/REJECT 限制每小时 500 个收件人超过发件人 $$sender)

尺寸 ( / / / )
此命令的工作原理类似于 rate() 命令,不同之处在于速率计数器是
通过请求的大小属性增加。 要可靠地做到这一点,您应该从以下位置调用 postfwd
smtpd_end_of_data_restrictions。 如果你想确定,你可以在规则集中检查它:
# 每个客户端每小时大小限制 1.5mb
id=SIZE01 ; protocol_state==END-OF-MESSAGE ; 客户端地址!=10.1.1.1
动作=大小(客户端地址/1572864/3600/450 4.7.1 抱歉,每小时最大 1.5mb)

rcpt ( / / / )
此命令的工作原理类似于 rate() 命令,不同之处在于速率计数器是
通过请求的 receiver_count 属性增加。 要可靠地做到这一点,你应该调用 postfwd
来自 smtpd_data_restrictions 或 smtpd_end_of_data_restrictions。 如果你想确定,你可以
在规则集中检查它:
# 每个客户每小时接收人数限制 3
id=RCPT01 ; protocol_state==END-OF-MESSAGE ; 客户端地址!=10.1.1.1
action=rcpt(client_address/3/3600/450 4.7.1 抱歉,每小时最多 3 个收件人)

rate5321,size5321,rcpt5321 ( / / / )
与对应的非5321函数相同,不同的是localpart
发件人或收件人地址根据 rfc5321 区分大小写。 那
意味着请求来自 [电子邮件保护][电子邮件保护] 会被区别对待

问 ( : [: ])
允许将策略决定委托给另一个策略服务(例如 postgrey)。 首先
第二个参数(地址和端口)是强制性的。 第三个可选参数可能是
指定告诉 postfwd 忽略某些答案并继续解析规则集:
# example1: 查询 postgrey 并将它的答案返回给 postfix
id=灰色; 客户端地址==10.1.1.1; 行动=问(127.0.0.1:10031)
# example2: 查询 postgrey 但忽略答案,如果它匹配 'DUNNO'
# 并继续解析 postfwd 的规则集
id=灰色; 客户端地址==10.1.1.1; 行动=问(127.0.0.1:10031:^dunno$)

邮件(服务器/直升机/从/到/主题/正文)
此命令已弃用。 您应该尝试改用 sendmail() 操作。
非常基本的邮件命令,它发送带有给定参数的消息。 限制:
这基本上执行telnet。 没有可用的身份验证或 TLS。 此外它确实
不跟踪通知状态,并会随时通知您,相应的规则命中。

发送邮件(发送邮件路径::from::to::subject::body)
Mail 命令,它使用现有的 sendmail 二进制文件并发送带有给定参数的消息。
限制:该命令不会跟踪通知状态,并且会随时通知您,
相应的规则命中(对于 RCPT 阶段具有 100 个收件人的邮件,这可能意味着 100 封邮件)。

等待 ( )
暂停程序执行秒。 用这个
延迟或限制连接。

笔记 ( )
只记录给定的字符串并继续解析规则集。
如果字符串为空,则不会记录任何内容(noop)。

退出 ( )
使用给定的退出代码终止程序。 后缀不
太喜欢了,所以要小心使用。

您可以参考请求属性,例如

id=R-HELO ; helo_name=^[^\.]+$ ; action=REJECT 无效的 helo '$$helo_name'

宏指令/ACLS
长项的多次使用或它们的组合可以用宏来缩写。 那些
必须以“&&”(两个“&”字符)为前缀。 首先必须将宏定义为
如下:

&&RBLS { rbl=zen.spamhaus.org,list.dsbl.org,bl.spamcop.net,dnsbl.sorbs.net,ix.dnsbl.manitu.net; };

然后这些可能会在您的规则中使用,例如:

&&RBLS ; 客户名称=^未知$; 行动=拒绝
&&RBLS ; 客户端名称=(\d+[\.-_]){4} ; 行动=拒绝
&&RBLS ; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_] ; 行动=拒绝

宏也可以包含动作:

# 定义
&&GONOW { action=REJECT 您的请求导致我们的垃圾邮件检测策略拒绝此邮件。 更多信息在 http://www.domain.local; };
# 规则
&&现在走 ; &&RBLS ; 客户名称=^未知$
&&现在走 ; &&RBLS ; 客户端名称=(\d+[\.-_]){4}
&&现在走 ; &&RBLS ; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_]

宏也可以包含宏:

# 定义
&&RBLS{
rbl=zen.spamhaus.org
rbl=list.dsbl.org
rbl=bl.spamcop.net
rbl=dnsbl.sorbs.net
rbl=ix.dnsbl.manitu.net
};
&&动态的{
客户名称=^未知$
客户端名称=(\d+[\.-_]){4}
客户端名称=[\.-_](adsl|动态|ppp|)[\.-_]
};
&&GOAWAY { &&RBLS; &&动态的; };
# 规则
&&离开 ; action=REJECT 动态客户端并在 RBL 上列出

基本上宏是简单的文本替换 - 请参阅“PARSER”部分了解更多信息
信息。

PLUGINS
描述

插件界面允许您定义自己的检查并增强 postfwd 的
功能。 欢迎分享有用的东西!

警告

请注意,插件接口仍处于开发阶段。 请测试您的插件
小心,因为错误可能会导致 postfwd 中断! 也允许覆盖
属性或内置函数,但请确保您知道自己在做什么,因为某些
它们在内部使用。

请记住安全,当您访问合理的资源时,永远不要运行
postfwd 作为特权用户! 也永远不要相信你的输入(尤其是主机名和电子邮件
地址)。

指标

项目插件是 perl 子程序,它在之前将附加属性集成到请求中
它们像策略委托的任何其他项目一样根据 postfwd 的规则集进行评估
协议。 这允许您创建自己的检查。

plugin-items 不能有选择性地使用。 这些函数将针对每个请求执行
postfwd 接收,所以请记住性能。

概要:%result = postfwd_items_plugin{ }(%要求)

意味着你的子程序,叫做, 可以访问一个名为 %request 的哈希,它
包含所有请求属性,如 $request{client_name} 并且必须在
以下表格:

保存:$result{ } =

这将创建新项目包含,它将被集成到
策略委托请求,因此可以在 postfwd 的规则集中使用。

# 不要删除下一行
%postfwd_items_plugin = (

# 示例 - 集成在 postfwd 中。 无需在此处激活它们。

# 允许在规则集中检查 postfwd 版本
“版本” => 子 {
我的(%请求)= @_;
我的(%结果)=(
"version" => $NAME." ".$VERSION,
);
返回%结果;
},

# sender_domain 和recipient_domain
“address_parts”=> 子{
我的(%请求)= @_;
我的(%结果)=();
$请求{发件人} =~ /@([^@]*)$/;
$result{sender_domain} = ($1 || '');
$请求{收件人} =~ /@([^@]*)$/;
$result{recipient_domain} = ($1 || '');
返回%结果;
},

# 不要删除下一行
);

比较

比较插件允许您定义如何将新项目与规则集进行比较。
这些是可选的。 如果不指定,则默认(== 表示完全匹配,=~ 表示
PCRE, ...) 将被使用。

概要: => sub { 返回 &{$postfwd_compare{ }}(@_); },

# 不要删除下一行
%postfwd_compare_plugin = (

示例 - 集成在 postfwd 中。 无需在此处激活它们。

# 简单的例子
# 概要: = (返回 &{$postfwd_compare{ }}(@_))
“client_address” => sub { return &{$postfwd_compare{cidr}}(@_); },
“大小” => sub { return &{$postfwd_compare{numeric}}(@_); },
“recipient_count” => sub { return &{$postfwd_compare{numeric}}(@_); },

# 复杂的例子
# 概要: = ( , , , )
“数字” => 子 {
我的($cmp,$val,$myitem,%request) = @_;
我的($myresult) = undef; $myitem ||=" "0"; $val ||=" "0";
如果 ($cmp eq '==') {
$myresult = ($myitem == $val);
} elsif ($cmp eq '=<') {
$myresult = ($myitem <= $val);
} elsif ($cmp eq '=>') {
$myresult = ($myitem >= $val);
} elsif ($cmp eq '<') {
$myresult = ($myitem < $val);
} elsif ($cmp eq '>') {
$myresult = ($myitem > $val);
} elsif ($cmp eq '!=') {
$myresult = not($myitem == $val);
} elsif ($cmp eq '!<') {
$myresult = not($myitem <= $val);
} elsif ($cmp eq '!>') {
$myresult = not($myitem >= $val);
} {
$myresult = ($myitem >= $val);
};
返回 $myresult;
},

# 不要删除下一行
);

行动

动作插件允许定义新的 postfwd 动作。 通过设置 $stop-flag 你可以
决定是继续还是停止解析规则集。

简介:( , , , , ) =
( , , , , , )

# 不要删除下一行
%postfwd_actions_plugin = (

# 示例 - 集成在 postfwd 中。 无需在此处激活它们。

# 笔记( ) 命令
“注意” => 子 {
我的($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = '不知道'; 我的($停止)= 0;
log_info "[RULES] ".$myline." - 注意:".$myarg if $myarg;
返回 ($stop,$index,$myaction,$myline,%request);
},

# 跳过下一步规则
“跳过” => 子 {
我的($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = '不知道'; 我的($停止)= 0;
$index += $myarg if ( $myarg and not(($index + $myarg) > $#Rules) );
返回 ($stop,$index,$myaction,$myline,%request);
},

# 将当前请求内容转储到系统日志
“转储请求”=> 子{
我的($index,$now,$mycmd,$myarg,$myline,%request) = @_;
my($myaction) = '不知道'; 我的($停止)= 0;
map { log_info "[DUMP] rule=$index, Attribute: $_=$request{$_}" } (keys %request);
返回 ($stop,$index,$myaction,$myline,%request);
},

# 不要删除下一行
);

指挥 LINE
规则集

以下参数用于指定 postfwd 规则集的来源。 这意味着
postfwd 至少需要以下一项才能工作。

-f, --file
从中读取规则. 请参阅配置部分
了解更多信息。

-r, --规则
添加到规则集。 请记住,您可能需要引用
包含空格或 shell 字符的字符串。

进球

-s, --scores =
退货后缀,当请求的分数超过

允许多次使用。 只需链接您的论点,例如:

postfwd -r " = ;动作= “ -F -F ...
or
postfwd --scores 4.5="WARN high score" --scores 5.0="REJECT postfwd score too high" ...

如果有多个分数,最高匹配将被计算在内。 参数的顺序将
反映在 postfwd 规则集中。

通过积极争取让商标与其相匹配的域名优先注册来维护

-d,--守护进程
postfwd 将作为守护进程运行并在网络上侦听传入
查询(默认 127.0.0.1:10040)。

-k,--杀死
停止正在运行的 postfwd 守护进程。

--重新加载
重新加载配置。

--dumpstats
显示程序使用统计信息。

--转储缓存
显示缓存内容。

--delcache
从请求缓存中删除一个项目。 使用 --dumpcache 来识别对象。
例如:
# postfwd --dumpcache
...
%rate_cache -> %sender=[电子邮件保护] -> %RATE002+2_600 -> @count -> '1'
%rate_cache -> %sender=[电子邮件保护] -> %RATE002+2_600 -> @maxcount -> '2'
...
# postfwd --delrate="sender=[电子邮件保护]"
速率缓存项 'sender=[电子邮件保护]' 已删除

--延迟
从速率缓存中删除一个项目。 使用 --dumpcache 来识别对象。

网络

postfwd 可以作为守护进程运行,以便它在网络上侦听传入的请求。 这
在这种情况下,以下参数将控制它的行为。

-i, --interface
将 postfwd 绑定到指定的接口(默认 127.0.0.1)。

-p, --port
postfwd 侦听指定端口(默认为 tcp/10040)。

--proto
postfwd 套接字的协议类型。 目前,您可以在此处使用“tcp”或“unix”。
要将 postfwd 与 unix 域套接字一起使用,请按如下方式运行它:
postfwd --proto=unix --port=/somewhere/postfwd.socket

-u, --user
将真实有效的用户转变为.

-g, --group
将真实有效的组变为.

--umask
更改文件权限的 umask(unix 域套接字、pidfiles)。
注意:这是 umask,而不是 chmod - 您必须指定
不应该适用。 例如:umask 077 等于 chmod 700。

-R, --chroot
将进程chroot到指定路径。
使用前测试一下——你可能需要一些库。

--pidfile
进程 id 将保存在指定的文件中。

- 设施
设置系统日志工具,默认为“邮件”

--socktype
将 Sys::Syslog socktype 设置为“native”、“inet”或“unix”。
默认是根据模块版本和操作系统自动检测。

-l, --logname
标记系统日志消息。 运行多个时很有用
postfwd 的实例。

--loglen
后截断任何系统日志消息人物。

插件

--插件
从文件加载 postfwd 插件。 请参见 http://postfwd.org/postfwd.plugins
或 tarball 中提供的 plugins.postfwd.sample 以获取更多信息。

可选 参数

这些参数影响 postfwd 的工作方式。 它们中的任何一个都可以组合。

-v,--详细
详细日志显示了很多有用的信息,但可能会导致
您的日志文件显着增长。 所以请谨慎使用。 设置选项
两次 (-vv) 以获取更多信息(记录所有请求属性)。

-c, --cache (默认值 = 600)
请求缓存超时,相同请求的结果将是
缓存直到重新加载配置或这次(以秒为单位)到期。
设置为 0 将禁用此功能。

--缓存无大小
忽略缓存比较的大小属性,这将导致更好的
缓存命中率。 你应该设置这个选项,如果你不使用大小
规则集中的项目。

--缓存无发送者
忽略缓存比较的发件人地址,这将导致更好的
缓存命中率。 如果您不使用发件人,则应设置此选项
规则集中的项目。

--cache-rdomain-only
这将在填写之前删除收件人地址的本地部分
缓存。 这可能会大大增加缓存命中率。

--cache-rbl-超时(默认值 = 3600)
此默认值将用作 rbl 缓存项的超时(以秒为单位),
如果规则集中没有指定。

--cache-rbl-default (默认=^127\.0\.0\.\d+$)
火柴如果规则集中未指定,则为 rbl/rhsbl 答案(regexp)。

--cacheid , , ...
这个 csv 分隔的请求属性列表将用于构造
请求缓存标识符。 仅使用此选项,如果您确切地知道您的
是做。 例如,如果您仅将 postfwd 用于 RBL/RHSBL 控制,
您可以将其设置为
postfwd --cache=3600 --cacheid=client_name,client_address
这提高了缓存的效率并提高了 postfwd 的性能。
警告:您应该在此处列出规则集中使用的所有项目!

--清理请求(默认值 = 600)
此后将在请求缓存中搜索超时项目在
秒。 它是一个最小值。 清理过程只会在以下情况发生
一个新的请求到达。

--cleanup-rbls (默认值 = 600)
此后将在 rbl 缓存中搜索超时项目在
秒。 它是一个最小值。 清理过程只会在以下情况发生
一个新的请求到达。

--清理率(默认值 = 600)
此后将在速率缓存中搜索超时项目在
秒。 它是一个最小值。 清理过程只会在以下情况发生
一个新的请求到达。

-S, --summary (默认值 = 600)
显示一些使用统计信息(程序正常运行时间、请求计数器、匹配规则)
每一个秒。 此选项包含在 -v 开关中。
此功能使用警报信号,因此您可以强制 postfwd 转储统计信息
使用`kill -ALRM `(其中是 postfwd 的进程 ID)。

计费示例:
19 月 12 日 39:45:1 mail666 postfwd[213000]:[STATS] 计数器:39 秒正常运行时间,XNUMX 条规则
19 月 12 日 39:45:1 mail666 postfwd[71643]:[STATS] 请求:总共 49,最后间隔 62.88,缓存命中率 XNUMX%
19 月 12 日 39:45:1 mail666 postfwd[20.18]: [STATS] 平均值:总体 4.90,最后间隔 557.30,顶部 XNUMX
19 月 12 日 39:45:1 mail666 postfwd[44]:[STATS] 内容:239 个缓存请求,XNUMX 个缓存 dnsbl 结果
19 月 12 日 39:45:1 mail666 postfwd[001]: [STATS] 规则 ID:R-2704 匹配:XNUMX 次
19 月 12 日 39:45:1 mail666 postfwd[002]: [STATS] 规则 ID:R-9351 匹配:XNUMX 次
19 月 12 日 39:45:1 mail666 postfwd[003]: [STATS] 规则 ID:R-3116 匹配:XNUMX 次
...

--无规则统计
禁用每个规则统计。 保持您的日志干净,如果您不使用它们。
如果没有设置--summary 或--verbose,此选项无效。

-L, --标准输出日志
将所有 syslog 消息重定向到 stdout 以进行调试。 切勿将其与 postfix 一起使用!

-t,--测试
在测试模式下 postfwd 总是返回“dunno”,但根据
到它的规则集。 -v 将使用此选项自动设置。

-n,--节点
禁用所有基于 DNS 的检查,如 RBL 检查。 规则包含
这些元素将被忽略。

-n, --nodnslog
禁用 dns 事件的日志记录。

--dns_timeout(默认值:14)
以秒为单位设置异步 dns 查询的超时时间。 此值将适用于
规则中的所有 dns 项目。

--dns_timeout_max(默认值:10)
设置 dnsbl 查找的最大超时计数器。 如果超时超过此值
相应的 dnsbl 将停用一段时间(请参阅 --dns_timeout_interval)。

--dns_timeout_interval (默认=1200)
dnsbl 超时计数器将在此间隔后以秒为单位清除。 用这个
结合 --dns_timeout_max 参数。

--dns_async_txt
同时执行 dnsbl A 和 TXT 查找(否则仅适用于带有 at
至少一个 A 记录)。 由于查询增加,这需要更多的网络带宽,但是
可能会增加吞吐量,因为查找可以并行化。

--dns_max_ns_lookups (默认=0)
使用 sender_ns_addrs 项目查找的最大 ns 名称。 使用 0 表示没有最大值。

--dns_max_mx_lookups (默认=0)
使用 sender_mx_addrs 项目查找的最大 mx 名称。 使用 0 表示没有最大值。

-I,--instantcfg
-f 指定的配置文件将为每个请求重新读取
postfwd 接收。 这可以实现动态配置更改
无需重新启动。 虽然只有在必要时才会读取文件
(这意味着他们的访问时间自上次阅读以来发生了变化)这可能
显着增加系统负载。

--config_timeout (默认=3)
以秒为单位的超时解析单个配置行。 如果超过,规则将
被跳过。 这用于防止由于大文件或循环引起的问题。

--keep_rates(默认值=0)
使用此选项设置 postfwd 不会清除重新加载时的速率限制计数器。 请
请注意,如果您更改,则必须使用此选项重新启动(而不是重新加载)postfwd
任何速率限制规则。

--save_rates(默认=无)
使用此选项 postfwd 将现有的速率限制计数器保存到磁盘并重新加载它们
在程序启动时。 这允许跨程序重新启动或重新启动的持久速率限制。
请注意 postfwd 需要对指定文件的读写权限。

--fast_limit_evaluation (默认=0)
一旦规则集设置了速率限制,将根据它评估未来的请求
在查阅规则集之前。 此模式是 v1.30 之前的默认行为。
用这种模式限速会更快,但也最终成立
规则集中的白名单规则可能无法按预期工作。
限制:此选项不允许嵌套 postfwd 命令,例如
动作=率(发件人/3/60/等待(3))
此选项不适用于 strict-rfc5321 rate() 函数。

信息化 参数

这些参数仅用于命令行使用。 永远不要将它们与 postfix spawn 一起使用!

-C, --显示配置
显示当前规则集。 使用 -v 进行详细输出。

-P,--perfmon
此选项会关闭任何系统日志记录和输出。 它包括
用于性能测试。

-V,--version
显示程序版本。

-h,--帮助
显示程序使用情况。

-m, --手册
显示程序手册。

REFRESH
在守护进程模式下,postfwd 在收到 HUP 信号后重新加载它的规则集。 请参阅
'-I' 开关的描述,用于为每个请求刷新您的配置
postfwd 接收。

示例
##白名单
# 1. 网络 192.168.1.0/24, 192.168.2.4
# 2. client_names *.gmx.net 和 *.gmx.de
# 3. 发件人 *@someshop.tld 来自 11.22.33.44
id=WL001; 行动=不知道; 客户端地址=192.168.1.0/24, 192.168.2.4
id=WL002; 行动=不知道; 客户端名称=\.gmx\.(net|de)$
id=WL003; 行动=不知道; 发件人=@someshop\.tld$ ; 客户端地址=11.22.33.44

## TLS 控制
# 1. *@authority.tld 只有正确的 TLS 指纹
# 2. *@secret.tld 仅当密钥大小 >=64 时
id=TL001; 行动=不知道; 发件人=@authority\.tld$ ; ccert_fingerprint=AA:BB:CC..
id=TL002; action=REJECT 错误的 TLS 指纹; 发件人=@authority\.tld$
id=TL003; action=REJECT tls keylength < 64 ; 发件人=@secret\.tld$ ; 加密密钥大小=64

## 组合 RBL 检查
# 这将拒绝邮件如果
# 1. 在 ix.dnsbl.manitu.net 上列出
# 2. 在 zen.spamhaus.org 上列出(sbl 和 xbl,dns 缓存超时 1200s 而不是 3600s)
# 3. 列在 bl.spamcop.net、list.dsbl.org、dnsbl.sorbs.net 的第 2 分钟
# 4. 在 bl.spamcop.net 和 rhsbl.ahbl.org 之一上列出,rhsbl.sorbs.net
id=RBL01 ; action=REJECT 在 ix.dnsbl.manitu.net 上列出; rbl=ix.dnsbl.manitu.net
id=RBL02 ; action=REJECT 在 zen.spamhaus.org 上列出; rbl=zen.spamhaus.org/127.0.0.[2-8]/1200
id=RBL03 ; action=REJECT 列在太多 RBL 上; rblcount=2 ; rbl=bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id=RBL04 ; action=REJECT 组合 RBL+RHSBL 检查; rbl=bl.spamcop.net ; rhsbl=rhsbl.ahbl.org, rhsbl.sorbs.net

## 消息大小(需要将 message_size_limit 设置为 30000000)
# 1. 30MB 用于 *.customer1.tld 中的系统
# 2. 20MB 用于 SASL 用户 joejob
# 3. 默认 10MB
id=SZ001; protocol_state==END-OF-MESSAGE; 行动=不知道; 大小<=30000000; 客户名称=\.customer1.tld$
id=SZ002; protocol_state==END-OF-MESSAGE; 行动=不知道; 大小<=20000000; sasl_username==joejob
id=SZ002; protocol_state==END-OF-MESSAGE; 行动=不知道; 大小<=10000000
id=SZ100; protocol_state==END-OF-MESSAGE; action=REJECT 消息太大

## 选择性灰名单
##
## 注意 postfwd 不包括灰名单。 此设置需要运行 postgrey 服务
## 在端口 10031 和 main.cf 中的以下后缀限制类:
##
## smtpd_restriction_classes = check_postgrey, ...
## check_postgrey = check_policy_service inet:127.0.0.1:10031
#
# 1. 如果在 zen.spamhaus.org 上列出结果为 127.0.0.10 或 .11,则 dns 缓存超时 1200 秒
# 2. 客户端没有 rDNS
# 3. 客户端来自多个拨入域
id=GR001; 动作=check_postgrey ; rbl=dul.dnsbl.sorbs.net, zen.spamhaus.org/127.0.0.1[01]/1200
id=GR002; 动作=check_postgrey ; 客户名称=^未知$
id=GR003; 动作=check_postgrey ; client_name=\.(t-ipconnect|alicedsl|ish)\.de$

## 约会时间
日期=24.12.2007-26.12.2007; action=450 4.7.1 圣诞节期间关闭办公室
时间=04:00:00-05:00:00; action=450 4.7.1 维护中,稍后再试
时间=-07:00:00; sasl_username=jim ; action=450 4.7.1 早点给你,吉姆
时间=22:00:00-; sasl_username=jim ; action=450 4.7.1 现在晚了,吉姆
月=-四月; action=450 4.7.1 五月见
天=!!周一至周五; 动作=check_postgrey

##跳转的用法
# 下面允许不同的消息大小为 30MB
# 个用户/客户,而其他人只有 10MB。
id=R001 ; 动作=跳跃(R100); sasl_username=^(Alice|Bob|Jane)$
id=R002 ; 动作=跳转(R100); 客户端地址=192.168.1.0/24
id=R003 ; 动作=跳转(R100); ccert_fingerprint=AA:BB:CC:DD:...
id=R004 ; 动作=跳转(R100); ccert_fingerprint=AF:BE:CD:DC:...
id=R005 ; 动作=跳跃(R100); ccert_fingerprint=DD:CC:BB:DD:...
id=R099 ; protocol_state==END-OF-MESSAGE; action=REJECT 消息太大(最大 10MB); 大小=10000000
id=R100 ; protocol_state==END-OF-MESSAGE; action=REJECT 消息太大(最大 30MB); 大小=30000000

##分数的使用
# 下面拒绝邮件,如果客户端
# - 列于 1 RBL 和 1 RHSBL
# - 列在 1 RBL 或 1 RHSBL 中并且没有正确的 rDNS
# - 其他没有正确 rDNS 的客户端将进行灰名单检查
# - 一些白名单用于降低分数
id=S01 ; 得分=2.6; 动作=check_postgrey
id=S02 ; 分数=5.0; action=REJECT postfwd 分数太高
id=R00 ; 动作=分数(-1.0); rbl=exemptions.ahbl.org,list.dnswl.org,query.bondedsender.org,spf.trusted-forwarder.org
id=R01 ; 动作=分数(2.5); rbl=bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id=R02 ; 动作=分数(2.5); rhsbl=rhsbl.ahbl.org, rhsbl.sorbs.net
id=N01 ; 动作=分数(-0.2); client_name==$$helo_name
id=N02 ; 动作=分数(2.7); 客户名称=^未知$
...

## 使用率和大小
# 以下临时拒绝来自“未知”客户端的请求,如果他们
# 1. 每小时超过 30 个请求或
#2. 尝试在 1.5 分钟内发送超过 10mb
id=RATE01 ; 客户端名称==未知; 协议状态==RCPT
action=rate(client_address/30/3600/450 4.7.1 抱歉,每小时最多 30 个请求)
id=SIZE01 ; 客户端名称==未知; protocol_state==END-OF-MESSAGE
动作=大小(客户端地址/1572864/600/450 4.7.1 抱歉,每 1.5 分钟最多 10mb)

## 宏
# 定义
&&RBLS { rbl=zen.spamhaus.org,list.dsbl.org,bl.spamcop.net,dnsbl.sorbs.net,ix.dnsbl.manitu.net; };
&&GONOW { action=REJECT 您的请求导致我们的垃圾邮件检测策略拒绝此邮件。 更多信息在 http://www.domain.local; };
# 规则
&&现在走 ; &&RBLS ; 客户名称=^未知$
&&现在走 ; &&RBLS ; 客户端名称=(\d+[\.-_]){4}
&&现在走 ; &&RBLS ; client_name=[\.-_](adsl|dynamic|ppp|)[\.-_]

## 组
# 定义
&&RBLS{
rbl=zen.spamhaus.org
rbl=list.dsbl.org
rbl=bl.spamcop.net
rbl=dnsbl.sorbs.net
rbl=ix.dnsbl.manitu.net
};
&&RHSBLS{
...
};
&&动态的{
客户名称==未知
客户端名称~=(\d+[\.-_]){4}
客户端名称~=[\.-_](adsl|dynamic|ppp|)[\.-_]
...
};
&&BAD_HELO{
helo_name==my.name.tld
helo_name~=^([^\.]+)$
helo_name~=\.(本地|局域网)$
...
};
&&维护{
日期= 15.01.2007
日期= 15.04.2007
日期= 15.07.2007
日期= 15.10.2007
time=03:00:00 - 04:00:00
};
# 规则
id=组合; &&RBLS ; &&动态的 ; action=REJECT 动态客户端并在 RBL 上列出
id=维护; &&维护 ; action=DEFER 维护时间 - 请稍后再试

# 现在使用 set() 命令,注意那个长项
# 列表不必比较两次
id=RBL01 ; &&RBLS ; 动作=设置(HIT_rbls=1)
id=HELO01 ; &&BAD_HELO ; 动作=设置(HIT_helo=1)
id=DYNA01 ; &&动态的 ; 动作=设置(HIT_dyna=1)
id=REJECT01 ; HIT_rbls==1 ; HIT_helo==1 ; 行动=拒绝请看 http://some.org/info?reject=01 了解更多信息
id=REJECT02 ; HIT_rbls==1 ; HIT_dyna==1 ; 行动=拒绝请看 http://some.org/info?reject=02 了解更多信息
id=REJECT03 ; HIT_helo==1 ; HIT_dyna==1 ; 行动=拒绝请看 http://some.org/info?reject=03 了解更多信息

##结合增强的rbl功能
#
id=RBL01 ; rhsblcount=all ; rblcount = 全部; &&RBLS ; &&RHSBLS
动作=设置(HIT_dnsbls=$$rhsblcount,HIT_dnsbls+=$$rblcount,HIT_dnstxt=$$dnsbltext)
id=RBL02 ; HIT_dnsbls>=2 ; action=554 5.7.1 使用 $$HIT_dnsbls DNSBLs 阻止 [INFO: $$HIT_dnstxt]

解析器
配置

postfwd 规则集可以在命令行(-r 选项)中指定或从文件中读取
(-F)。 您的参数的顺序将被保留。 您应该使用 -C | 检查解析器。
--showconfig 在应用新配置之前在命令行切换。 以下调用:

postfwd --showconfig \
-r“id=TEST;recipient_count=100;action=WARN 有 100 多个收件人的邮件”\
-f /etc/postfwd.cf \
-r "id=DEFAULT; action=dunno";

将产生以下输出:

Rule 0: id->"TEST" action->"WARN mail with 100+收件人"; 收件人计数->“100”
...
... ...
...
规则: id->"DEFAULT" action->"dunno"

多个相同类型的项目将被添加到列表中(有关更多信息,请参阅“项目”部分
信息):

postfwd --showconfig \
-r "client_address=192.168.1.0/24; client_address=172.16.26.32; action=dunno"

将导致:

规则 0: id->"R-0"; 动作->“不知道”; 客户端地址->"192.168.1.0/24, 172.16.26.32"

宏在配置阶段进行评估,这意味着

postfwd --showconfig \
-r "&&RBLS { rbl=bl.spamcop.net; client_name=^unknown$; };" \
-r "id=RBL001; &&RBLS; action=REJECT 列在 spamcop 和错误的 rdns";

将导致:

规则 0: id->"RBL001"; 动作->“拒绝在 spamcop 和坏 rdns 上列出”; rbl->"bl.spamcop.net"; 客户端名称->"^unknown$"

请求 加工

当策略委托请求到达时,它将与 postfwd 的规则集进行比较。 到
详细检查处理过程,您应该使用“-v”或“-vv”增加详细程度
转变。 “-L”将日志消息重定向到标准输出。

一般保持规则集的顺序,项目将按随机顺序进行比较,这
基本上意味着

id=R001; 行动=不知道; 客户端地址=192.168.1.1; 发件人=[电子邮件保护]

等于

id=R001; 发件人=[电子邮件保护]; 客户端地址=192.168.1.1; 行动=不知道

列表将按照指定的顺序进行评估。 这样可以更快地放置
最初的表达:

postfwd -vv -L -r "id=RBL001; rbl=localrbl.local zen.spamhaus.org; action=REJECT" /some/where/request.sample

产生以下

[日志信息]: 比较 rbl: "remotehost.remote.net[68.10.1.7]" -> "localrbl.local"
[日志信息]:count1 rbl:“2”->“0”
[LOGS info]:查询rbl:localrbl.local 7.1.10.68 (7.1.10.68.localrbl.local)
[日志信息]:count2 rbl:“2”->“0”
[日志信息]:匹配 rbl:FALSE
[日志信息]: 比较 rbl: "remotehost.remote.net[68.10.1.7]" -> "zen.spamhaus.org"
[日志信息]:count1 rbl:“2”->“0”
[日志信息]:查询 rbl:zen.spamhaus.org 7.1.10.68 (7.1.10.68.zen.spamhaus.org)
[日志信息]:count2 rbl:“2”->“0”
[日志信息]:匹配 rbl:FALSE
[日志信息]:行动:不知道

否定运算符!!( ) 具有最高优先级,因此将被评估
第一的。 然后执行变量替换:

postfwd -vv -L -r "id=TEST; action=REJECT; client_name=!!($$heloname)" /some/where/request.sample

会给

[日志信息]: 比较 client_name: "unknown" -> "!!($$helo_name)"
[日志信息]: 否定 client_name: "unknown" -> "$$helo_name"
[日志信息]:替换client_name:“未知”->“english-breakfast.cloud8.net”
[日志信息]:匹配client_name:TRUE
[日志信息]:操作:拒绝

规则集 评估

当所有项目(或每个项目的列表中的至少一个元素)都匹配时,规则命中。
一旦一项(或列表的所有元素)无法与请求进行比较
属性解析器将跳转到 postfwd 规则集中的下一个规则。

如果规则匹配,则有两个选项:

* 规则返回后缀动作(不知道,拒绝,...)解析器停止规则处理并
将动作返回给后缀。 不会评估其他规则。

* 规则返回 postfwd 动作 (跳(), 笔记(), ...) 解析器评估给定的动作
并继续下一个规则(除了 跳() or 放弃() 行动 - 请参阅
“操作”部分了解更多信息)。 什么都不会发送到 postfix。

如果没有匹配的规则并且到达规则集的末尾 postfwd 将返回不知道
除非在详细模式下,否则不记录任何内容。 您可以简单地放置最后一个 `catch-allAX
改变这种行为的规则:

... ...
id=默认值; 行动=不知道

将记录任何通过规则集而未命中先前规则的请求。

积分
之路 通过 守护 模式

使用 postfwd 的常用方法是将它作为守护进程启动,在指定的 tcp 端口上侦听。
由于 postfwd 将在单个实例中运行(多路复用模式),它将充分利用
在这种情况下,它是内部缓存。 使用以下参数启动 postfwd:

postfwd -d -f /etc/postfwd.cf -i 127.0.0.1 -p 10040 -u 没人 -g 没人 -S

为了高效缓存,您应该检查是否可以使用选项 --cache-rdomain-only,
--cache-no-sender 和 --cache-no-size。

现在检查您的系统日志(默认工具“邮件”)中的一行:

9 月 23 日 00:24:5158 邮件 postfwd[XNUMX]:postfwd n.nn 准备好输入

并使用`netstat -an|grep 10040`来检查类似的东西

tcp 0 0 127.0.0.1:10040 0.0.0.0:* 听

如果一切正常,打开你的 postfix main.cf 并插入以下内容

127.0.0.1:10040_time_limit = 3600 <--- 积分
smtpd_recipient_restrictions = permit_mynetworks <--- 推荐
reject_unauth_destination <--- 推荐
check_policy_service inet:127.0.0.1:10040 <--- 集成

使用 `postfix reload` 重新加载您的配置并查看您的日志。 在它工作你
应该在您的邮件日志中看到如下所示的行:

9 月 23 日 01:24:5158 邮件 postfwd[22]:rule=9,id=ML_POSTFIX,client=english-breakfast.cloud168.100.1.7.net[XNUMX],sender=[电子邮件保护], 收件人=[电子邮件保护],helo=english-breakfast.cloud9.net,proto=ESMTP,state=RCPT,action=不知道

如果要检查大小或 rcpt_count 项目,则必须将 postfwd 集成到
smtp_data_restrictions 或 smtpd_end_of_data_restrictions。 当然你也可以指定一个
限制类并在您的访问表中使用它。 首先创建一个文件
/etc/postfix/policy 包含:

域 1.local postfwdcheck
域 2.local postfwdcheck
...

然后 postmap 该文件(`postmap hash:/etc/postfix/policy`),打开你的 main.cf 并输入

# 限制类
smtpd_restriction_classes = postfwdcheck, ... <--- 整合
postfwdcheck = check_policy_service inet:127.0.0.1:10040 <--- 集成

127.0.0.1:10040_time_limit = 3600 <--- 积分
smtpd_recipient_restrictions = permit_mynetworks, <--- 推荐
reject_unauth_destination, <--- 推荐
... <--- 可选
check_recipient_access hash:/etc/postfix/policy, <--- 集成
... <--- 可选

重新加载 postfix 并查看您的日志。

之路 通过 希内特

您可能有多种原因通过 tcp 包装器包使用 postfwd,例如
xinetd(见http://www.xinetd.org/>)。 我不会在这里讨论这个。 如果你打算这样做,
只需将以下行添加到您的 / etc /服务 文件:

# postfwd 端口
转发后 10040/tcp

然后创建一个文件'/etc/xinetd.d/postfwd':

{
接口 = 127.0.0.1
socket_type =流
协议= TCP
等待=否
用户 = 没有人
服务器 = /usr/local/bin/postfwd
server_args = -f /etc/postfwd.cf
禁用=否
}

并重新启动 xinetd 守护进程(通常 SIGHUP 应该没问题)。 如果你遇到
您可能想要检查系统日志中的 xinetd 错误,例如“socket already
正在使用”。

与 postfix 的集成类似于 之路 通过 守护 模式 以上部分。
重新加载 postfix 并查看您的日志以查看是否一切正常。

测试
首先,您必须创建一个规则集(请参阅配置部分)。 检查它

postfwd -f /etc/postfwd.cf -C

有一个随 postfwd 分发的策略请求示例,称为“request.sample”。
只需更改它以满足您的要求和使用

postfwd -f /etc/postfwd.cf

你应该得到这样的答案

动作=

对于网络测试,我使用 netcat:

数控 127.0.0.1 10040

向 postfwd 发送请求。 如果您什么也没收到,请确保 postfwd 正在运行
并监听指定的网络设置。

性能
其中一些建议可能与您的环境不匹配。 请检查您的要求
并仔细测试新选项!

- 使用缓存选项
- 使用正确的匹配运算符 ==、<=、>=
- 在正则表达式中使用 ^ 和/或 $
- 使用项目列表(比单一规则更快)
- 对重复的项目列表使用 set() 操作
- 使用跳跃和速率限制
- 对带有空 note() 动作的 rbl/rhsbls 使用预查找规则

SEE ALSO
看到http://www.postfix.org/SMTPD_POLICY_README.html> 描述 Postfix 如何
策略服务器工作。

使用 onworks.net 服务在线使用 postfwd1


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。