首页 > 服务器 > 针对web server拒绝攻击的防御方法
2013
03-25

针对web server拒绝攻击的防御方法

       有硬件防火墙朋友不在此讨论范围

针对web server的攻击

 (1):CC攻击

CC攻击全称是Challenge Collapsar ,是一种拒绝服务攻击,大多以消耗服务器资源造成服务器处理请求缓存或者大量占用资源造成正常访问不可用为目的,受攻击的页面大多是需要大量查询数据库的页面或者是伪静态等需要消耗高CPU资源的页面;

多发生在使用虚拟主机的网站身上;

如discuz的 查看新帖 和 搜索页面

http://www.discuz.net/forum.php?mod=guide&view=new

http://www.discuz.net/search.php?mod=forum&searchid=1&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=.

通过正常的大量正常请求或者是使用代理方式请求这两个页面即可达到让webserver大量查询mysql造成CPU资源占用过高,数据库连接数过高从而达到让服务器拒绝服务的目的。

 

负载

负载

防御方法:

堵:CC类的攻击是很好防御的,只需要使用系统自带的防火墙拒绝大量请求的IP即可;

linux可使用以下两条命令来手动加入防火墙;

netstat -ntu | awk ‘{print $5}’ | egrep -o “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” | sort | uniq -c | sort -nr //列出连接到本机的IP地址。

iptables -I INPUT -s 177.139.169.40 -j DROP //将此IP地址加入iptables拒绝规则。

当然你也可以使用诸如ddos deflate之类的自动化脚本。

windows类的可以做安全策略来屏蔽IP地址,或者使用D盾之类的安全软件来进行自动化防御。

改:修改大量占用CPU资源的页面,如带宽资源、CPU资源、IO资源等,具体的优化请咨询程序作者或者是自行谷歌脑补。

 (2):DDOS攻击

当前主要有两种流行的DDOS攻击:

1:SYN/ACK Flood攻击

主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。少量的这种攻击会导致主机服务器无法访问,但却可以Ping的通,在服务器上用Netstat -na命令会观察到存在大量的SYN_RECEIVED状态,大量的这种攻击会导致Ping失败、TCP/IP栈失效,并会出现系统宕机。

防御方法:

linux;

netstat -ntu | awk ‘{print $5}’ | egrep -o “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” | sort | uniq -c | sort -nr //列出连接到本机的IP地址。

iptables -I INPUT -s 177.158.19.0/24 -j DROP //将此IP地址段加入iptables拒绝规则。

如果使用自动脚本也需要做修改脚本规则使用掩码来添加IP地址段屏蔽。

windows;

同CC类似

2:TCP全连接攻击:这种攻击是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙大多具备过滤DOS攻击的能力,但对于正常的TCP连接是放过的,但是很多网络服务程序(如:IIS、Apache等Web服务器)能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存、CPU、网络带宽等资源被耗尽而被拖跨,从而造成拒绝服务,这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪。

此方式针对web server来说消耗最大的就是内存资源,因为linux或windows的最大端口连接数是65535,1024以下为系统保留端口,链出数是超不过65535-1024个的『源IP+源随机Port+目的IP+目的 Port』。

针对服务器来说只提供web服务那么开放的端口只有一个,连入socket的分配是受制于内存分页和非页面缓冲池的,因为每个 TCP 连接都要占用非页面缓冲池内存,windows向每个进程分配相应的内存块区(也称为工作集),由此来控制内存。几乎在所有情况下,进程内的各个线程都使用从该工作集分配的内存。随着进程的增长,Windows 向它的工作集添加更多内存,以满足它的内存需求。所分配的大多数内存都是可分页的,这意味着该内存中的数据可以临时存储在硬盘上,然后在需要时再重新调用到 RAM 中。但是,某些线程(如 TCP/IP 连接)需要不可分页的内存,该内存必须为实时 RAM,而不是硬盘上的文件。随着连接数量的增加,以及对不可分页的内存需求量的增长,系统将耗尽所有可用内存,无法再分配任何内存。此时宕机就出现啦。

防御方法:可以采用回收资源池,重启服务或者采用多台服务器进行负载均衡的方式来防御(使用代理访问的必然都是同一个页面,也可以考虑根据web日志来屏蔽IP地址的做法。

PPS1PPS2

 

使用CDN来进行防御:现在有很多提供免费CDN服务的CDN商,比如加速乐安全宝360网站宝cloudflare等,使用他们可以很好的避免源站IP地址暴露,带宽不足等造成的网站宕机。