通过使用 Port Access 映射表中的共享库 conn_throttle.so,可以限制特定 IP 地址连接到 MTA 的频繁程度。限制特定 IP 地址的连接对于防止拒绝服务攻击中使用的过多连接可能会有用。
conn_throttle.so 是在 PORT_ACCESS 映射表中使用的共享库,它可限制特定 IP 地址过于频繁地连接到 MTA。所有配置选项都被指定为连接限制共享库的参数,如下所示:
$[msg_svr_base/lib/conn_throttle.so, throttle,IP-address ,max-rate]
IP-address 是远程系统的点分十进制地址。max-rate 是将对此 IP 地址强制实施的最大速率(连接次数/分钟)。
对于处罚性例程,可以使用例程名称 throttle_p 代替 throttle。如果某些连接在过去的连接次数太多,则 throttle_p 将在以后拒绝这些连接。如果最大速率为 100,并且在过去的一分钟里尝试的连接次数为 250,则不仅远程站点将在该分钟内最初 100 次连接之后被阻止,在接下的分钟内它们还会被阻止。换句话说,系统将在每分钟之后从尝试连接的总数中减去最大速率,只要连接的总数大于最大速率,就将阻止远程系统。
如果指定的 IP 地址没有超过最大每分钟连接速率,共享库调用将失败。
如果超过了该速率,调用将成功,但不会返回任何内容。这可以在 $C/$E 组合中来完成,如以下示例所示:
PORT_ACCESS TCP|*|25|*|* \ $C$[msg_svr_base/lib/conn_throttle.so,throttle,$1,10] \ $N421$ Connection$ not$ accepted$ at$ this$ time$E
其中,
$C 将继续执行从下一个表格条目开始的映射进程,并将此条目的输出字符串用作映射进程的新输入字符串。
$[msg_svr_base/lib/conn_throttle.so,throttle,$1,10] 是库调用, 其中 throttle 为库例程,$1 为服务器 IP 地址,而 10 为每分钟连接次数的阀值。
$N421$ Connection$ not$ accepted$ at$ this$ time 将拒绝访问并返回 421 SMTP 代码(瞬态负完成)以及消息 "Connection not accepted at this time"。
$E 将立即终止映射进程。它使用此条目的输出字符串作为映射进程的最终结果。