是否可以在之后运行脚本AUTH
?我看到了失败2ban读取日志来确定结果AUTH
。但是有没有办法在不读取日志的情况下执行脚本?
编辑:
该脚本只需要 SASL 用户名,并且应在 AUTH 成功时触发。理想情况下,脚本应在下载邮件之前执行。现在我有一个执行脚本的管道,但脚本是在下载邮件后执行的。
我正在将 dovecot 与 mysql 一起使用。
答案1
尝试使用 Postfix访问策略委托特征。
Postfix 将在对策略服务的请求中设置sasl_username
和其他sasl_*
属性,但前提是执行了 SASL 身份验证并且成功。
您可以设计一个 Postfix 策略服务(即实现上述链接下所述协议的“脚本”),该服务会检查 SASL 用户名,如果发现登录属于某个预定义集,则会回复action=reject We don't want to accept the complete message from this client
(拒绝邮件并附带一些解释性消息)。该服务还可以自由执行不相关的操作,例如写入数据库、发送短信等。然后,您可以调用它就在之前对该逻辑的调用permit_sasl_authenticated
应该已存在于您的某些块中。您还可以在脚本中smtpd_*_restrictions
实现整个逻辑并完全删除对该逻辑的调用。permit_sasl_authenticated
Postfix 将在 DATA 命令之前处理策略服务,例如在客户端有机会发送任何大块数据之前。
同一想法的另一种变体是精心设计smtpd_sender_login_maps
,以便对于选定客户端使用的信封发件人地址,它将返回一些不相关的 SASL 登录值,而这些客户端永远不会使用这些值进行身份验证。然后在 之前立即添加reject_authenticated_sender_login_mismatch
或。reject_known_sender_login_mismatch
permit_sasl_authenticated
然后 Postfix 将允许客户端成功进行身份验证,但在实际进行 SMTP 事务时,它将MAIL FROM:
根据 _maps 查询“信封发件人地址”(由客户端在 SMTP 命令中提供)并拒绝,因为客户端使用的登录名不会出现在该发件人地址的允许登录名返回列表中。同样,Postfix 将在客户端有机会发送大量数据之前拒绝事务。
这将使您无需编写脚本,但您也无法执行任意操作脚本。唯一的好处是它将把成功验证的用户记录到日志文件中。