Sun Java System Messaging Server 6.3 管理指南

18.3.6 限制指定 IP 地址到 MTA 的连接

要限制特定 IP 地址可以连接到 MTA 的频率,请参见第 19 章,使用 MeterMaid 限制外来连接。限制特定 IP 地址的连接对于防止拒绝服务攻击中使用的过多连接很有用。以前,此功能是通过使用 Port Access 映射表中的共享库 conn_throttle.so 执行的。尚未计划对 conn_throttle.so 进行新的改进,MeterMaid 是一个更有效的替代选择。

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 将立即终止映射进程。它使用此条目的输出字符串作为映射进程的最终结果。