您的位置:首页 > 其它

5.2 anvil模块

2016-04-07 11:16 225 查看
postfix使用anvil模块来做统计。该模块是收发信过程中的基本模块。

postfix作为一种正规的服务器,会用慢启动算法逐步增加对对方服务器的发信请求,避免给对方服务器造成过大压力。但是恶意的服务器(垃圾邮件或ddos)显然不会这么“温柔”。所以postfix必须既做的了君子,又防的了小人。既要为别人考虑,也要保护自己。要有对客户行为做判断的机制。anvil模块可以用来统计客户的并发行为。

anvil模块采用4.4节中的multi_server.c做模板,所以可以对并发量做统计。anvil模块可以统计以下几种并发量:

CONNECTIONCOUNT/RATE

MESSAGERATE

RECIPIENTRATE

TLSSESSION NEGOTIATION RATE
AUTHRATE

anvil模块统计和smtp协议解析过程是并行的,统计值用来作为客户端是否“靠谱”的依据,由于smtpd.c采用single_server.c做执行模板,所以无论如何一个smtpd进程中对客户的服务是串行的。smtpd模块根据客户端并发连接数和连接频率来判断它是不是“友好”,来决定是否为其为其提供服务。

postfix设定了许多参数用来统计客户端行为,根据其行为判断客户端是否可能会是恶意客户端。本书涉及到的参数有:

smtpd_client_connection_count_limit:表示客户端并发连接数,默认值((DEF_PROC_LIMIT + 1) / 2),DEF_PROC_LIMIT默认为100。

smtpd_client_connection_rate_limit:客户端发信频率,默认值为0。

smtpd_client_message_rate_limit:anvil_rate_time_unit时间内客户端向服务器发送的请求数,默认值为0,允许客户端发送postfix承受范围内的所有请求。

smtpd_client_recipient_rate_limit:anvil_rate_time_unit时间内客户端向服务器发送的rcpt地址数。

anvil模块用anvil_remote_connect,anvil_remote_mail,anvil_remote_rcpt,anvil_remote_newtls,anvil_remote_disconnect,anvil_remote_newtls_stat,anvil_remote_lookup七个函数统计相关信息。

smtpd模块又利用/global/anvil_clnt.c中的anvil_clnt_connect、anvil_clnt_mail、anvil_clnt_rcpt这三个函数分别在smtpd_proto、解析Mail命令的mail_cmd函数、解析rcpt命令的rcpt_cmd函数中统计上述四个参数的实际值,看看是否超过参数的规定值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: