Transmit

 

好多人问transmit的封禁策略,看了一下代码,讲解一下:

transmit.conf中有像这样的几个配置项,比如:

#连接阀值


CONN_CHECK_PERIOD_0 : 30


CONN_STAY_PERIOD_0 : 590


CONN_THRESHOLD_0 : 20




#IP阀值
IP_CHECK_PERIOD_0 : 30


IP_STAY_PERIOD_0 : 590


IP_THRESHOLD_0 : 64




IP_CHECK_PERIOD_1 : 600


IP_STAY_PERIOD_1 : 590


IP_THRESHOLD_1 : 300




#cookie阀值


COOKIE_CHECK_PERIOD_0 : 30


COOKIE_STAY_PERIOD_0 : 590


COOKIE_THRESHOLD_0 : 60


transmit支持3种类型的判断封禁,连接(CONN),IP,COOKIE其中CONN和IP都是以用户的IP包头中的IP来进行判断的。 COOKIE是HTTP包内的cookie的值来进行判断的。

一.CONN会在accept成功的时候(用户连接的时候)把用户的ip对应的计数器加1 --注意:KEEPALIVE的用户不会重复连接

二.IP会在

1.accept成功的时候

2.读取用户信息的HTTP包头的时候

把用户ip对应的累加器加1

三.COOKIE会在读取用户HTTP包头的时候把用户的cookie对应的计数器加1 --注意:只要cookie一样都会被累加


于是可以这么理解:

CONN计数器会为每一个ip分一个计数器,在有用户新建立连接的时候加一

IP计数器会为每一个ip分一个计数器,在有用户数据包到的时候加一

COOKIE计数器会为每一个COOKIE值分配一个计数器,在有相同的COOKIE值的时候加一


CHECK_PERIOD,STAY_PERIOD,THRESHOLD三者的意义

CHECK_PERIOD为检测的间隔,如果用户在这个时间内没有请求,就会清除用户的请 求记录。

STAY_PERIOD为当需要封禁用户时候,封禁的时间。

THRESHOLD为阈值,如果次数在CHECK_PERIOD时间内超过这个阈值,就把它放到 PRISON中。

每一种类型CONN,IP,COOKIE可以支持配置多个监测点(总共最多5个,不然会对效率产生影响)比如上面的例子IP配了两个。每一个IP来的时候,会分别对这两个阈值进行判断, 如果一个满足封禁要求,就把它放到PRISON中。

这样是为了: 有些用机器抓取我们的页面,一个短时间内不会超过阈值,但是很长时间内会有持续的较大量的连接,用户一般来说不可能有这样的行为。 这样我们第二个配置就可以生效。

个人认为第一个配置是为了防止攻击的(短时间内大量的请求),第二个是为了防止有机器抓取的(长时间内的较大量的请求)。


transmit可以配好多种apache,有如下的配置项:

#MAIN_APACHE


LOCAL_APACHE : localhost:8090




#BWS


BWS_DIR : /s? /sina? /index.php? /?


BWS_PAGE : / /index.php /index.html /index.htm


BWS : localhost:8200




#PP_APACHE


PP_APACHE_DIR : /sina.php? /cpro.php? /conads.php? /live.php?


PP_APACHE0 : tc-news-vi00.tc:8080


PP_APACHE1 : tc-news-vi01.tc:8080




#COOKIE_APACHE

 COOKIE_APACHE0:10.23.11.11 8080 cookiefile.1

 COOKIE_APACHE0:10.23.11.12 8080 cookiefile.2


COOKIE_APACHE0:10.23.11.13 8080 cookiefile.3


DISPATCH_SCALE : 0


#DISPATCH_APACHE


DISPATCH_APACHE : 10.23.12.32:8080


RECOVER_TIME : 30


其中LOCAL_APACHE是主apache

BWS是次要的apache,可以支持对请求路径和页面的分流(BWS_DIR,BWS_PAGE)

PP_APACHE是轮训的APACHE(也支持PP_DIR根据请求串分流)

COOKIE_APACHE是根据用户请求的COOKIE值分流的apache。COOKIE_APACHE配置的第三项要指定cookiefile,里面有一些cookie值,如果用户请求中的cookie匹配这个apache的cookiefile的某一项,那么就能落在这个apache上。

DISPATCH_APACHE是根据用户的IP分流的apache。

recover_time是一旦发现哪个apache挂了,在这段时间内不再会连接这个apache,

recover_time时间后会重试。

以下是一个请求(注意:不是一次连接,KEEPALIVE的每一次请求都会选择一个apache)进来选择apache的策略(逻辑较复杂):

如果配置了BWS_DIR或者是BWS_PAGE:用户的请求匹配到这个DIR或是PAGE,(比如用户请求www.sina.com/s?word=sina就匹配上面的配置):

如果配置了COOKIE_APACHE,并且用户请求的的COOKIE值匹配某一个cookie_apache的cookiefile中的值,就选择这个 cookie_apache.

如果没有配置COOKIE_APACHE或者没有匹配任何的cookie_file:

如果用户配置了DISPATCH_APACHE并且符合DISPATCH_SCALE的比例,就选择dispatch_apache.

既没有配置cookie_apache和dispache_apache就选择BWS。

如果用户指定的PP_DIR:用户的请求的DIR符合PP_APACHE_DIR的就被选择到了这个PP_APACHE,轮训选择PP_APACHE中的一个APACHE。

如果没有BWS_DIR,BWS_PAGE,PP_APACHE_DIR或者不匹配上面条件中的任何一个,就选择LOCAL_APACHE.


所以,基本的功能可以这样理解:

如果只需要连接一个APACHE,配置LOCAL_APACHE即可

如果需要根据用户的IP分流,可以指定BWS_DIR或者BWS_PAGE(配置本服务支持的所有的DIR或PAGE),DISPATCH_SCALE (默认为0),DISPATCH_APACHE,BWS

如果需要根据用户的COOKIE分流,可以指定BWS_DIR或者BWS_PAGE(配置本服务支 持的所有的DIR或PAGE),COOKIE_APACHEn (需要指定cookie file), BWS

如果需要轮训apache,可以指定PP_APACHE_DIR / (表示所有请求), 若干个PP_APACHEn,一个LOCAL_APACHE(万一前面的PP_APACHE都不行了,这个自动为备用)

如果既需要根据用户的DIR分流,可以配合BWS_DIR,BWS 和 PP_APACHE_DIR PP_APACHEn 和LOCAL_APACHE(如果都不匹配,选择这个apache)。


你可能感兴趣的:(Transmit)