IIS防御小规模DDOS攻击实例(反向代理)

最近几天公司官网和业务系统的注册页面频繁遭遇DDOS攻击,导致IIS应用程序池CPU占用率100%,访问网站出现503错误。下面总结一下应对措施。

    一、启用IIS的CPU监视功能

对于低频率的DDOS可以采取这种方法。w3wp.exe是应用程序池的关联进程,当WEB访问量大时,w3wp.exe会占用大量的系统资源。在DDOS攻击下,很明显的现象就是w3wp.exe占用CPU达到100%,网站拒绝访问,这个时候远程登录服务器都很困难。针对这种情况,做如下优化:

1、为IIS中的每个网站设置单独的应用程序池。

2、为每个应用程序池设置CPU监视功能:当w3wp.exe的CPU超过50%或更高时,自动杀死w3wp.exe进程,监视频率为1分钟。只要有访问请求进来,w3wp.exe便会重新启动,不影响用户访问。

二、流量清洗

当黑客发现低层次的DDOS已经不起作用时,便会加大攻击力度。一开始我们官网的平均并发数只有几千,后来加大到了平均1万6千个并发,最高7万个并发,这样上面的CPU监视功能就没有效果了,因为w3wp.exe重启后,会在极短时间内CPU重新达到100%。

当时监控到的并发连接数:

CPU使用率和流量(带宽上限10M):

幸运的是官网域名刚好在阿里云上做好了备案,我们迁移到阿里云上后,利用云盾的DDOS防护功能便会清洗掉大部分异常流量,CPU立马正常,官网满血复活了。

这里贴一下云服务器的参数:

  配置: CPU2核、内存4GB
  镜像: Windows Server 2008 R2 标准版 SP1 64位中文版
  存储: 1块普通云盘(100GB)
  网络: 带宽10Mbps(经典网络)

参数配置不高,但是能抵御高强度的DDOS攻击,这得益于阿里强大的技术实力,偷偷做个广告,嘿嘿。

    三、Nginx反向代理

但是黑客还经常攻击我们业务系统的注册页面,这次就没有这么幸运了,因为业务系统是在我们实体机房,这就要靠我们自己了。

所以我们采取了前端Nginx反向代理、后端双IIS做负载均衡,利用Nginx强大的性能和HttpLimitReqModul模块限制某时间段内同一ip访问次数。Nginx的优化这里不提,下面只贴出相关配置:

首先在nginx.conf的http配置段里增加如下内容:

map $http_x_forwarded_for $clientRealIp {
  "" $remote_addr;
  ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
  }
  # 访问受限制后返回599
  limit_req_status 599;
  # 定义一个名为allips的limit_req_zone用来存储session,大小是100M内存,
  # 以$clientRealIp 为key,限制平均每秒的请求为100个,
  limit_req_zone $clientRealIp zone=allips:100m rate=100r/s; 

这里限制了同一IP每秒的请求数不超过100个,否则多余的请求会直接返回599错误。限制频率要根据实际情况进行配置,配置过低会影响正常的访问,出现页面显示不全等问题。

然后编辑/etc/nginx/conf.d/upstream.conf:

server {
 listen    1334;
 server_name _; 

 # 添加如下一行
 limit_req zone=allips burst=5 nodelay; 

 location / {
  # 反向代理
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://wskh_IIS;
 } 

 # 开启stub_status模块监控
 location /nginx_status{
  stub_status on;
  access_log off;
  allow 127.0.0.1;
  # 允许内网某IP查看nginx status
  allow 192.168.1.100;
  deny all;
 }
} 

# 后端web服务器
upstream wskh_IIS {
 server 192.168.1.39:1334;
 server 192.168.1.40:1334;
 ip_hash;
}

好了,简单配置完成。

下面贴一个统计Nginx访问日志access.log里IP请求频率的小脚本:

#!/bin/bash
#
# Filename:  count_req.sh
# Revision:  1.0
# Author:   Qicheng
# Website:   http://qicheng0211.blog.51cto.com
# Description: 统计Nginx日志里IP访问频率 

NGINXLOG="./access.log"
start_time=$(head -n1 "$NGINXLOG" | grep -o " \[.*\] ")
stop_time=$(tail -n1 "$NGINXLOG" | grep -o " \[.*\] ")
echo -e "start:\t\e[92m$start_time\033[0m"
echo -e "stop:\t\e[92m$stop_time\033[0m"
echo '所有的请求TOP50-->>'
# 所有的请求
cat "$NGINXLOG" | awk '{++S[$1]} END {for(a in S) print S[a],"\t", a}' | sort -rn -k1 | head -n 50
echo '--------------------------------------------------'
echo '成功的请求TOP50-->>'
# 成功的请求
grep ' 200 ' "$NGINXLOG" | awk '{++S[$1]} END {for(a in S) print S[a],"\t", a}' | sort -rn -k1 | head -n 50 

把脚本放到和access.log同一目录下执行即可。部分输出如下:

过滤出这些攻击源IP后,加到iptables里:

iptables -I INPUT -s {ip} -j DROP;

本文出自 “启程的Linux博客” 博客,谢绝转载!

(0)

相关推荐

  • 什么是JavaScript注入攻击?

    Javascript可以作为黑客攻击网站的一种工具,其中注入js(javascript)恶意脚本就是其中一种手段之一,那么下面,大家来学习一下如何预防js的注入攻击呢?以下有一个不错的陈述,跟大家分享: 什么是 JavaScript 注入攻击? 每当接受用户输入的内容并重新显示这些内容时,网站就很容易遭受 JavaScript 注入攻击.让我们研究一个容易遭受 JavaScript 注入攻击的具体应用程序.假设已经创建了一个客户反馈网站.客户可以访问网站并输入对产品的反馈信息.当客户提交反馈时,

  • 浅谈利用JavaScript进行的DDoS攻击原理与防御

    分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意网站.服务器劫持和中间人攻击发起DDoS攻击,并说明了如何使用HTTPS以及即将到来的名为"子资源一致性(Subresource Integrity,简称SRI)"的Web新技术保护网站免受攻击. 现代网站的大部分交互都来自于JavaScript.网站通过直接向HTML中添加JavaScr

  • 一次真实的DDoS攻击防御实战

    第一轮进攻: 时间:下午15点30左右 突然发现公司的web server无法访问,尝试远程登录,无法连接,呼叫idc重启服务器.启动后立即登录察看,发现攻击还在继续,并且apache所有230个进程全部处于工作状态.由于服务器较老,内存只有512m,于是系统开始用swap,系统进入停顿状态.于是杀掉所有httpd,稍后服务器恢复正常,load从140降回正常值. 开始抓包,发现流量很小,似乎攻击已经停止,尝试启动httpd,系统正常.察看httpd日志,发现来自五湖四海的IP在尝试login.

  • DDoS攻击的趋势与相关防御策略

    一.阻断服务(Denial of Service) 在探讨 DDoS 之前我们需要先对 DoS 有所了解,DoS泛指黑客试图妨碍正常使用者使用网络上的服务,例如剪断大楼的电话线路造成用户无法通话.而以网络来说,由于频宽.网络设备和服务器主机等处理的能力都有其限制,因此当黑客产生过量的网络封包使得设备处理不及,即可让正常的使用者无法正常使用该服务.例如黑客试图用大量封包攻击一般频宽相对小得多的拨接或 ADSL 使用者,则受害者就会发现他要连的网站连不上或是反应十分缓慢. DoS 攻击并非入侵主机也

  • 冲浪DDoS(拒绝服务)攻击的趋势与防御

    一.阻断服务(Denial of Service) 在探讨DDoS 之前我们需要先对 DoS 有所了解,DoS泛指黑客试图妨碍正常使用者使用网络上的服务,例如剪断大楼的电话线路造成用户无法通话.而以网络来说,由于频宽.网络设备和服务器主机等处理的能力都有其限制,因此当黑客产生过量的网络封包使得设备处理不及,即可让正常的使用者无法正常使用该服务.例如黑客试图用大量封包攻击一般频宽相对小得多的拨接或 ADSL 使用者,则受害者就会发现他要连的网站连不上或是反应十分缓慢. DoS 攻击并非入侵主机也不

  • 让浏览器崩溃的12行JS代码(DoS攻击分析及防御)

    Ajax与pjax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新-无刷新操作. 但是,ajax应用也会造成另外的问题,容易导致浏览器无法前进与后退,这是个很头疼的问题,开发人员必须增加工作量(比如通过一个隐藏的iframe,或者改变location.ha

  • 防御DDoS攻击实用指南 守住你的网站

    一.为何要DDoS? 随着Internet互联网络带宽的增加和多种DDoS黑客工具的不断发布,DDoS拒绝服务攻击的实施越来越轻易,DDoS攻击事件正在成上升趋势.出于商业竞争.打击报复和网络敲诈等多种因素,导致很多IDC托管机房.商业站点.游戏服务器.聊天网络等网络服务商长期以来一直被DDoS攻击所困扰,随之而来的是客户投诉.同虚拟主机用户受牵连.法律纠纷.商业损失等一系列问题,因此,解决DDoS攻击问题成为网络服务商必须考虑的头等大事. 二.什么是DDoS? DDoS是英文Distribut

  • 使用AngularJS中的SCE来防止XSS攻击的方法

    这篇文章展示了有关XSS(跨站脚本)的不同方案以及怎样使用AngularJS中SCE($sceProvider),sanitize service这些特性来正确处理XSS.如果我遗漏了什么重要的地方请直接评论/建议.同时,错别字请见谅. 以下几点内容将是我接下来要讲述的重点: 全部转码HTML 安全插入HTML的同时忽略类似"script"这样的标签.如果不加以注意,这将一样存在风险同时也会丑化页面,尤其是在有"img"标签的时候. 依赖并插入纯HTML:这也有风险

  • PHP中防止SQL注入攻击和XSS攻击的两个简单方法

    mysql_real_escape_string() 所以得SQL语句如果有类似这样的写法:"select * from cdr where src =".$userId; 都要改成 $userId=mysql_real_escape_string($userId) 所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写出htmlentities($name,ENT_NOQUOTES,GB2312) .

  • IIS防御小规模DDOS攻击实例(反向代理)

    最近几天公司官网和业务系统的注册页面频繁遭遇DDOS攻击,导致IIS应用程序池CPU占用率100%,访问网站出现503错误.下面总结一下应对措施.     一.启用IIS的CPU监视功能 对于低频率的DDOS可以采取这种方法.w3wp.exe是应用程序池的关联进程,当WEB访问量大时,w3wp.exe会占用大量的系统资源.在DDOS攻击下,很明显的现象就是w3wp.exe占用CPU达到100%,网站拒绝访问,这个时候远程登录服务器都很困难.针对这种情况,做如下优化: 1.为IIS中的每个网站设置

  • Python实现DDos攻击实例详解

    SYN 泛洪攻击 SYN泛洪攻击是一种比较常用的Dos方式之一.通过发送大量伪造的 TCP 连接请求,使被攻击主机资源耗尽(通常是 CPU 满负荷或内存不足)的攻击方式 我们都知道建立 TCP 连接需要三次握手.正常情况下客户端首先向服务器端发送SYN报文,随后服务端返回以SYN+ACK报文,最后客户端向服务端发送ACK报文完成三次握手 而SYN泛洪攻击则是客户端向服务器发送SYN报文之后就不再响应服务器回应的报文.由于服务器在处理 TCP 请求时,会在协议栈留一块缓冲区来存储握手的过程,当然如

  • IIS实现反向代理时Cookie域的设置方法

    反向代理 神马是反向代理?指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器.我们可以通过反向代理实现负载平衡.突破防火墙限制等一些非常实用的Web服务器功能,目前反向代理不管在私有云还是公有云的虚拟机上用的很多很多. 引用 IIS通过URL重写可以实现反向代理,通过简单的配置即可以将请求转发到其它内部站点. 此时被代理的所有站点的cookie的域(domai

  • springboot整合Nginx实现负载均衡反向代理的方法详解

    目录 一.百度百科 二.Nginx作为web服务器 三.Nginx处理请求逻辑图 四.Nginx的优点 五.Nginx应用场景 1.反向代理 2.负载均衡 3.动静分离 六.Nginx的常用命令 1.启动 2.从容停止 3.快速停止 4.强制停止 5.重启 6.重启Nginx服务 七.Nginx配置文件 八.Nginx 配置实例-反向代理实例 1.实现效果 2.准备工作 3.访问过程的分析 4.具体配置 5.最终测试 九.Nginx 的原理 1.mater 和 worker 2.worker 如

  • Nginx防御DDOS攻击的配置方法教程

    前言 Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用. 其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网站服务器中表现较好. 防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈.DDOS的 特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量.对于七层的应用攻击,我们还 是可以做一些配置

  • IIS中使用的ISAPI_Rewrite Full版本做反向代理详解

    反向代理是什么? 大家去过落伍者吧?大家可以通过IP查看落伍的IP是在韩国,大家可知道,其实落伍的数据还是在国内.如何做到这样的呢,这就叫反向代理,在韩国的服务器将http请求发送到国内服务器的某个http端口,再将回传的数据返回到韩国,发送至客户,这样就完成了网站实体在国内,看起来网站在国外. 这里说一下IIS做反向代理,实现这个功能ISAPI_Rewrite Full版本可以实现.下载ISAPI_Rewrite Full,安装. 在创建一个网站,这个网站可以用你想要的域名进行访问到,或者最直

  • Windows安装nginx1.10.1反向代理访问IIS网站

    首先去官网下载软件包,解压,路径最好不要有中文 Nginx配置的路径问题 由于在Windows下文件路径可以用"\", 也可以用"\\", 也可以用"/"作为路径做分隔符.但"\"最容易引发问题,所以要尽量避免使用. 不要添加PATH,否则会引发错误,config文件路径找不到 比如我解压在E盘 cmd命令定位到nginx.exe所在文件夹cd E:\WorkSoftWare\nginx-1.10.1 然后执行,首先保证ngi

  • Nginx实战之反向代理WebSocket的配置实例

    实现方案 采用目前比较成熟的WebSocket技术,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择.其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单.大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket. WebSocket集群 在实际的生产环境中,要求多个WebSocket服务器必须具有高性

  • C#实现可缓存网页到本地的反向代理工具实例

    本文实例讲述了C#实现可缓存网页到本地的反向代理工具.分享给大家供大家参考.具体实现方法如下: proxy.ashx 主文件: <%@ WebHandler Language="C#" Class="proxy" %> using System; using System.Web; using System.Net; using System.Text; using System.IO; using System.Collections.Generic;

随机推荐