存档

2013年11月 的存档

windows 2008 ipsec命令行下配置IP筛选器

2013年11月28日 没有评论

昨天公司某款游戏受到部分ip使用类WPE工具批量发包攻击,通过篡改指令刷经验,金币等非法操作。在研发未修正bug前,我们这边先通过限制来源ip(尽管这个做法用处不大,还是可以防住那些小团体)和在防火墙上调整包频率来降低损失。gmtools中拉取了通过发包获得各类不正当资源的ip列表。然后针对这些ip进行处理。

IPSec 是一种开放标准的框架结构,它通过使用加密安全服务来确保 IP 网络上保密安全的通信。Windows 的 IPSec 执行基于由 Internet 工程任务组 (IETF) IPSec 工作组开发的标准。
IPsec 可建立从源 IP 地址到目标 IP 地址的信任和安全。只有那些必须了解通信是安全的计算机才是发送和接收的计算机。每台计算机都假定进行通信的媒介不安全,因此在各自的终端上处理安全性。
IPSec 策略用于配置 IPSec 安全服务。支持TCP、UDP、ICMP、EGP等大多数通信协议,可为现有网络中的通信提供各种级别的保护。可以根据计算机、域、站点的安全需要来配置策略。

配置一个IPSec策略需要经过如下几步:

1)创建策略。
2)创建过滤器。
3)创建过滤动作。
4)创建规则(封装策略)。
5)启用和关闭策略。

如果通过图形界面来添加的话,工作量比较大,特别是阻止来源ip访问那里得频繁添加多次。可以在命令行用 netsh ipsec命令

1、创建策略:

(这一步相当于iptables中建立一张独立的表,用来放规则,很多时候我们都直接写在原来的表上)

第一步:点开始运行-输入mmc,打开控制台,然后控制台中添加删除管理单元,添加IP安全策略管理,然后选本地计算机。默认没有规则,这里可以新建一个策略。


命令:

netsh ipsec static add policy name=black-wan-ip description=本机的ip安全策略

 

图形界面下查看命令结果:

 

2、创建过滤器:
这一步相当于iptables中:“iptables -A INPUT -s 50.115.38.143 ” 这么一段规则,我这里是禁止所有协议,当然你可以自定义很多协议和端口)

图形界面步骤:打开刚刚新建的那个策略—添加一条IP安全规则—-选此规则不指定隧道—选所有网络连接——–下面选IP筛选器列表—–添加新的筛选器(源,目标等)—勾选镜像—-源地址选一个特定的ip地址或子网——目标地址选我的ip地址——选协议——选择刚刚添加好IP筛选器—然后新添加个筛选器操作(阻止/允许)
命令:

netsh ipsec static add filter filterlist=blacklist srcaddr=50.115.38.143 srcport=0 dstaddr=me dstport=0 protocol=any mirrored=yes desc=禁止50.115.38.143

注:
filterlist  过滤器名称
srcaddr,dstaddr  源/目的IP地址 (me表示本机IP,any表示任意IP)
srcport,dstport   源/目的端口 (0表示任意端口)
protocol 协议   (ANY | ICMP | TCP | UDP | RAW | <integer>)
mirrored=yes 双向

图形界面下查看命令结果:

 

3、创建筛选器操作:
(这一步骤相当于iptables中:“-j DROP” 和上面结合起来就是一条完整的规则了)
命令:

netsh ipsec static add filteraction name=阻止 action=block

注:这个命令就是创建堵塞数据包动作,并命名为阻止
图形界面下查看命令结果:

 

4、创建规则(封装策略):
这里就是把前面建立的规则与操作连结起来

命令:

netsh ipsec static add rule name=deny-more-ip-access policy=black-wan-ip filterlist=blacklist filteraction=阻止 desc=阻止部分主机所有通信

图形界面下查看命令结果:

5、启用和关闭策略:

netsh ipsec static set policy name= black-wan-ip assign=y

 

由于封的ip比较多,可以将封的ip写在一个bat脚本里面,然后统一执行下。

分类: windows 标签:

svn update报413 Request Entity Too Large

2013年11月21日 没有评论

 

参照:http://httpd.apache.org/docs/2.2/mod/core.html#limitxmlrequestbody

LimitXMLRequestBody Directive

Description: Limits the size of an XML-based request body
Syntax: LimitXMLRequestBody bytes
Default: LimitXMLRequestBody 1000000
Context: server config, virtual host, directory, .htaccess
Override: All
Status: Core
Module: core

Limit (in bytes) on maximum size of an XML-based request body. A value of 0 will disable any checking.

Example:

LimitXMLRequestBody 0

LimitRequestBody Directive

Description: Restricts the total size of the HTTP request body sent from the client
Syntax: LimitRequestBody bytes
Default: LimitRequestBody 0
Context: server config, virtual host, directory, .htaccess
Override: All
Status: Core
Module: core

This directive specifies the number of bytes from 0 (meaning unlimited) to 2147483647 (2GB) that are allowed in a request body.

The LimitRequestBody directive allows the user to set a limit on the allowed size of an HTTP request message body within the context in which the directive is given (server, per-directory, per-file or per-location). If the client request exceeds that limit, the server will return an error response instead of servicing the request. The size of a normal request message body will vary greatly depending on the nature of the resource and the methods allowed on that resource. CGI scripts typically use the message body for retrieving form information. Implementations of the PUT method will require a value at least as large as any representation that the server wishes to accept for that resource.

This directive gives the server administrator greater control over abnormal client request behavior, which may be useful for avoiding some forms of denial-of-service attacks.

If, for example, you are permitting file upload to a particular location, and wish to limit the size of the uploaded file to 100K, you might use the following directive:

LimitRequestBody 102400

Note: not applicable to proxy requests.

[转]Nginx Location 指令基础

2013年11月14日 没有评论

Nginx Location 指令基础

 

Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令比较简单,但却是配置 Nginx 过程中不得不去了解的。 

Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。

一、基本语法

 

〖=〗 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。
〖~ 〗 表示区分大小写匹配
〖~*〗 表示不区分大小写匹配
〖^~ 〗 表示只匹配字符串,不查询正则表达式。
〖@〗 指定一个命名的location,一般只用于内部重定向请求。

二、匹配过程

首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果,如果字符串和正则都匹配,那么正则优先级较高。

三、配置实例

 

四、全局变量

 附录1

$request_uri$uri区别

This variable is equal to the *original* request URI as received from the client including the args. It cannot be modified. Look at $uri for the post-rewrite/altered URI. Does not include host name. Example: “/foo/bar.php?arg=baz” 
这个变量等于从客户端发送来的原生请求URI,包括参数。它不可以进行修改。$uri变量反映的是重写后/改变的URI。不包括主机名。例如:”/foo/bar.php?arg=baz”
This variable is the current request URI, without any arguments (see $args for those). This variable will reflect any modifications done so far by internal redirects or the index module. Note this may be different from $request_uri, as $request_uri is what was originally sent by the browser before any such modifications. Does not include the protocol or host name. Example: /foo/bar.html 
这个变量指当前的请求URI,不包括任何参数(见$args)。这个变量反映任何内部重定向或index模块所做的修改。注意,这和$request_uri不同,因$request_uri是浏览器发起的不做任何修改的原生URI。不包括协议及主机名。例如:”/foo/bar.html”
$document_uri
The same as $uri. 
同$uri.

 附录2

#允许客户端请求的最大的单个文件字节数
client_max_body_size 10m; 

#缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;

#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 600;

#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队等候处理
proxy_read_timeout 600;

#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 600;

#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 8k;

#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers 4 32k;

#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;

#proxy缓存临时文件的大小
proxy_temp_file_write_size 64k;

 

 

 

分类: nginx 标签: ,

[转]Windows系统下的TCP参数优化

2013年11月8日 没有评论

转自:http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000697.html

通常会采用修改注册表的方式改进Windows的系统参数。下面将为大家介绍Windows系统下的TCP参数优化方式,适用于Windows 2003、Windows XP、Windows 7以及Server版。对于具体的系统环境与性能需求,优化方式会有所差异,效果也不尽相同,仅是个人的建议。所有的优化操作都通过修改注册表实现,需要使用regedit命令进入注册表并创建或修改参数,修改完成后需要重启系统,以使之生效。以下使用的参数值均为10进制。

1. TCPWindowSize

TCPWindowSize的值表示TCP的窗口大小。TCP Receive Window(TCP数据接收缓冲)定义了发送端在没有获得接收端的确认信息的状态下可以发送的最大字节数。此数值越大,返回的确认信息就越少,相应的在发送端和接收端之间的通信就越好。此数值较小时可以降低发送端在等待接收端返回确认信息时发生超时的可能性,但这将增加网络流量,降低有效吞吐率。TCP在发送端和接收端之间动态调整一个最大段长度MSS(Maximum Segment Size)的整数倍。MSS在连接开始建立时确定,由于TCP Receive Window被调整为MSS的整数倍,在数据传输中完全长度的TCP数据段的比例增加,故而提高了网络吞吐率。

缺省情况下,TCP将试图根据MSS来优化窗口大小,起始值为16KB,最大值为64KB。TCPWindowSize的最大值通常为65535字节(64KB),以太网最大段长度为1460字节,低于64KB的1460的最大整数倍为62420字节,因而可以在注册表中将TCPWindowSize设置为62420,作为高带宽网络中适用的性能优化值。具体操作如下:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为TCPWindowSize的REG_DWORD值,该值的范围是从0到65535,将该值设置为62420。

2TCP1323Opts

为了更高效地利用高带宽网络,可以使用比上述TCP窗口大得多的TCP窗口大小,此特性是Windows 2000和Windows Server 2003中的新特性,称为TCP Window Scaling,它将以前的65535字节(64KB)的限制提高到了1073741824字节(1GB)。在带宽与延迟的乘积值很高的连接上(例如卫星连接),可能需要将窗口的大小增加到64KB以上。使用TCP Window Scaling,系统可以允许确认信息间更大数据量的传输,增加了网络吞吐量及性能。发送端和接收端往返通信所需的时间被称为回环时间(RTT)。TCP Window Scaling仅在TCP连接的双方都开启时才真正有效。TCP有一个时间戳选项,通过更加频繁地计算来提高RTT值的估测值,此选项特别有助于估测更长距离的广域网上连接的RTT值,并更加精确地调整TCP重发超时时间。时间戳在TCP报头提供了两个区域,一个记录开始重发的时间,另一个记录接收到的时间。时间戳对于TCP Window Scaling,即确认信息收到前的大数据包传送特别有用,激活时间戳仅仅在每个数据包的头部增加12字节,对网络流量的影响微乎其微。数据完整性与数据吞吐率最大化哪个更为重要是个需要评估的问题。在某些环境中,例如视频流传输,需要更大的TCP窗口,这是最重要的,而数据完整性排在第二位。在这种环境中,TCP Window Scaling可以不打开时间戳。当发送端和接收端均激活TCP Window Scaling和时间戳时,此特性才有效。不过,若在发包时加入了时间戳,经过NAT之后,如果前面相同的端口被使用过,且时间戳大于这个连接发出的SYN中的时间戳,就会导致服务器忽略该SYN,表现为用户无法正常完成TCP的3次握手。初始时生成小的TCP窗口,之后窗口大小将按照内部算法增大。具体操作如下:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为TCP1323Opts的REG_DWORD值,该值的具体含义为:0(缺省值)表示禁用TCP Window Scaling和时间戳;1表示只启用TCP Window Scaling;2表示只启用时间戳;3表示同时启用TCP Window Scaling和时间戳。TCP1323Opts设置为激活TCP Window Scaling后,可以将上文中的注册表项TCPWindowSize的值增大,最大能达到1GB,为了达到最佳性能,这里的值最好设置成MSS的倍数,推荐值为256960字节。

3TCP 控制块表

对于每个TCP连接,控制变量保存在一个称为TCP控制块(TCB)的内存块中。TCB表的大小由注册表项MaxHashTableSize控制。在活动连接很多的系统中,设定一个较大的表可以降低系统定位TCB表的时间。在TCB表上分区可以降低对表的访问的争夺。增加分区的数量,TCP的性能会得到优化,特别是在多处理器的系统上。注册表项NumTcbTablePartitions控制分区的数量,默认是处理器个数的平方。TCB通常预置在内存中,以防止TCP反复连接和断开时,TCB反复重新定位浪费时间,这种缓冲的方式促进了内存管理,但同时也限制了同一时刻允许的TCP连接数量。注册表项MaxFreeTcbs决定了处于空闲等待状态的TCB重新可用之前的连接数量,在NT架构中常设置成高于默认值,以确保有足够的预置的TCB。从Windows 2000开始添加了一个新特性,降低超出预置TCB运行的可能性。如果处于等待状态的连接多于MaxFreeTWTcbs中的设置,所有等待时间超过60秒的连接将被强制关闭,以后再次启用。此特性合并到Windows 2000 Server和Windows Server 2003后,MaxFreeTcbs将不再用于优化性能。具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为MaxHashTableSize的REG_DWORD值,该值的范围是从1到65536,并且必须为2的N次方,缺省值为512,建议设为8192。然后在Parameters子键下创建或修改名为NumTcbTablePartitions的REG_DWORD值,该值的范围是从1到65536,并且必须为2的N次方,缺省值为处理器个数的平方,建议设为处理器核心数的4倍。

4TcpTimedWaitDelay

TcpTimedWaitDelay的值表示系统释放已关闭的TCP连接并复用其资源之前,必须等待的时间。这段时间间隔就是以前的Blog中提到的TIME_WAIT状态(2MSL,数据包最长生命周期的两倍状态)。如果系统显示大量连接处于TIME_WAIT状态,则会导致并发量与吞吐量的严重下降,通过减小该项的值,系统可以更快地释放已关闭的连接,从而为新连接提供更多的资源,特别是对于高并发短连接的Server具有积极的意义。

该项的缺省值是240,即等待4分钟后释放资源;系统支持的最小值为30,即等待时间为30秒。具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为TcpTimedWaitDelay的REG_DWORD值,该值的范围是从0到300,建议将该值设置为30。

5MaxUserPort

MaxUserPort的值表示当应用程序向系统请求可用的端口时,TCP/IP可分配的最大端口号。如果系统显示建立连接时出现异常,那么有可能是由于匿名(临时)端口数不够导致的,特别是当系统打开大量端口来与Web service、数据库或其他远程资源建立连接时。

该项的缺省值是十进制的5000,这也是系统允许的最小值。Windows默认为匿名(临时)端口保留的端口号范围是从1024到5000。为了获得更高的并发量,建议将该值至少设为32768以上,甚至设为理论最大值65534,特别是对于模拟高并发测试环境的Client具有积极的意义。具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为MaxUserPort的REG_DWORD值,该值的范围是从5000到65534,缺省值为5000,建议将该值设置为65534。

6. 动态储备

动态储备的值使系统能自动调整其配置,以接受大量突发的连接请求。如果同时接收到大量连接请求,超出了系统的处理能力,那么动态储备就会自动增大系统支持的暂挂连接的数量(即Client已请求而Server尚未处理的等待连接数,TCP连接的总数包括已连接数与等待连接数),从而可减少连接失败的数量。系统的处理能力和支持的暂挂连接的数量不足时,Client的连接请求将直接被拒绝。

缺省情况下,Windows 不启用动态储备,可以通过以下操作进行开启和设置:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters注册表子键,在Parameters子键下创建或修改下列名称的REG_DWORD值。

  • EnableDynamicBacklog,值为1,表示开启动态储备。
  • MinimumDynamicBacklog,值为128,表示支持的最小暂挂连接的数量为128。
  • MaximumDynamicBacklog,值为2048,表示支持的最大暂挂连接的数量为2048。对于高并发短连接的Server,建议最大值设为1024及以上。
  • DynamicBacklogGrowthDelta,值为128,表示支持的暂挂连接的数量的增量为128,即数量不足时自增长128,直到达到设定的最大值,如2048。

7KeepAliveTime

KeepAliveTime的值控制系统尝试验证空闲连接是否仍然完好的频率。如果该连接在一段时间内没有活动,那么系统会发送保持连接的信号,如果网络正常并且接收方是活动的,它就会响应。如果需要对丢失接收方的情况敏感,也就是说需要更快地发现是否丢失了接收方,请考虑减小该值。而如果长期不活动的空闲连接的出现次数较多,但丢失接收方的情况出现较少,那么可能需要增大该值以减少开销。

缺省情况下,如果空闲连接在7200000毫秒(2小时)内没有活动,系统就会发送保持连接的消息。 通常建议把该值设为1800000毫秒,从而丢失的连接会在30分钟内被检测到。具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为KeepAliveTime的REG_DWORD值,为该值设置适当的毫秒数。

8KeepAliveInterval

KeepAliveInterval的值表示未收到另一方对“保持连接”信号的响应时,系统重复发送“保持连接”信号的频率。在无任何响应的情况下,连续发送“保持连接”信号的次数超过TcpMaxDataRetransmissions(下文将介绍)的值时,将放弃该连接。如果网络环境较差,允许较长的响应时间,则考虑增大该值以减少开销;如果需要尽快验证是否已丢失接收方,则考虑减小该值或TcpMaxDataRetransmissions值。

缺省情况下,在未收到响应而重新发送“保持连接”的信号之前,系统会等待1000毫秒(1秒),可以根据具体需求修改,具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为KeepAliveInterval的REG_DWORD值,为该值设置适当的毫秒数。

9TcpMaxDataRetransmissions

TcpMaxDataRetransmissions的值表示TCP数据重发,系统在现有连接上对无应答的数据段进行重发的次数。如果网络环境很差,可能需要提高该值以保持有效的通信,确保接收方收到数据;如果网络环境很好,或者通常是由于丢失接收方而导致数据的丢失,那么可以减小该值以减少验证接收方是否丢失所花费的时间和开销。

缺省情况下,系统会重新发送未返回应答的数据段5次,可以根据具体需求修改,具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为TcpMaxDataRetransmissions的REG_DWORD值,该值的范围是从0到4294967295,缺省值为5,根据实际情况进行设置。

10TcpMaxConnectRetransmisstions

TcpMaxConnectRetransmisstions的值表示TCP连接重发,TCP退出前重发非确认连接请求(SYN)的次数。对于每次尝试,重发超时是成功重发的两倍。在Windows Server 2003中默认超时次数是2,默认超时时间为3秒(在注册表项TCPInitialRTT中)。速度较慢的WAN连接中超时时间可相应增加,不同环境中可能会有不同的最优化设置,需要在实际环境中测试确定。超时时间不要设置太大否则将不会发生网络连接超时时间。具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为TcpMaxConnectRetransmisstions的REG_DWORD值,该值的范围是从0到255,缺省值为2,根据实际情况进行设置。然后在Parameters子键下创建或修改名为TCPInitialRTT的REG_DWORD值,同样根据实际情况进行设置。

11TcpAckFrequency

TcpAckFrequency的值表示系统发送应答消息的频率。如果值为2,那么系统将在接收到2个分段之后发送应答,或是在接收到1个分段但在200毫秒内没有接收到任何其他分段的情况下发送应答;如果值为3,那么系统将在接收到3个分段之后发送应答,或是在接收到1个或2个分段但在200毫秒内没有接收到任何其他分段的情况下发送应答,以此类推。如果要通过消除应答延迟来缩短响应时间,那么建议将该值设为1。在此情况下,系统会立即发送对每个分段的应答;如果连接主要用于传输大量数据,而200毫秒的延迟并不重要,那么可以减小该值以降低应答的开销。

缺省情况下,系统将该值设为2,即每隔一个分段应答一次。该值的有效范围是0到255,其中0表示使用缺省值2,可以根据具体需求修改,具体操作:

浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\xx(xx由网络适配器决定)注册表子键,在xx子键下创建或修改名为TcpAckFrequency的REG_DWORD值,该值的范围是从1到13,缺省值为2,根据希望每发送几个分段返回一个应答而设置该值,建议百兆网络设为5,千兆网络设为13。

分类: windows 标签:

pip install python-ldap

2013年11月6日 没有评论

在centos 6 下安装python-ldap,报错:

因为一些函数是在OpenLDAP 2.4.x中加入的,而服务器上的版本为2.3.43。

解决办法:在ldap.h中加入4行

 

然后重新安装后正常
pip install python-ldap

分类: python 标签: