Sun Java System Messaging Server 6 2005Q4 管理指南

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

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