精华内容
下载资源
问答
  • nginx攻击的遭遇
    2021-12-03 09:59:59

    服务器是安装的1.14版本的nginx

     被攻击的现象是: 服务器内存被消耗完,有多少就消耗多少。 系统无法进入。 断开网络并重启后方可进入。 

    使用top命令查询,占用cup的进程是kswapd0, kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。  

    没有其他任何的可疑进程。

    云服务器有报错一些漏洞的咨询,正好有个高危漏洞是nginx的 。 就试着查询了一下nginx的漏洞信息, 确实是存在这个现象。 就把nginx升级到1.20.2版本。

    网站貌似是没有出现过  这个问题了,后续有待观察

    更多相关内容
  • Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用。 下面这篇文章主要给大家介绍了关于Nginx防御DDOS攻击的配置方法,需要的朋友可以参考下。
  • 本文主要介绍lua+Nginx下如何快速有效得防御CC攻击。至于如何安装Nginx就不详细介绍了,闲话少说,大家请看示例
  • 使用方法有两种,可以用 XShell ... 下面介绍GoAccess 在 CentOS 上的安装方法: 1. 需要安装 GeoIP, ncurses, glib2, 一句搞定 代码如下:#yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel2....
  • nginx怎么防御DDOS攻击

    2022-01-11 13:44:05
    防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动...对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是 Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御.

    转自:微点阅读 https://www.weidianyuedu.com/content/1017298565442.html

    防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就 是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是 Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。 ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module 可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。下面是配置方法:

    一. 限制每秒请求数

    ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:

    nginx.conf的http段内定义触发条件,可以有多个条件

    在location内定义达到触发条件时nginx所要执行的动作

    例如:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    http {undefined

    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求

    ...

    server {undefined

    ...

    location  ~ \.php$ {undefined

    limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应

    }

    }

    }

    参数说明:

    1

    2

    3

    4

    5

    6

    $binary_remote_addr  二进制远程地址

    zone=one:10m    定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话

    rate=10r/s;     限制频率为每秒10个请求

    burst=5         允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。

    nodelay         超过的请求不被延迟处理,设置后15个请求在1秒内处理。

    二.限制IP连接数

    ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    http {undefined

    limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件

    ...

    server {undefined

    ...

    location /download/ {undefined

    limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503

    }

    }

    }

    三.白名单设置

    http_limit_conn和http_limit_req模块限制了单ip单位时间内的并发和请求数,但是如果Nginx前面有lvs或者 haproxy之类的负载均衡或者反向代理,nginx获取的都是来自负载均衡的连接或请求,这时不应该限制负载均衡的连接和请求,就需要geo和map 模块设置白名单:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    geo $whiteiplist  {undefined

    default 1;

    10.11.15.161 0;

    }

    map $whiteiplist  $limit {undefined

    1 $binary_remote_addr;

    0 "";

    }

    limit_req_zone $limit zone=one:10m rate=10r/s;

    limit_conn_zone $limit zone=addr:10m;

    geo模块定义了一个默认值是1的变量whiteiplist,当在ip在白名单中,变量whiteiplist的值为0,反之为1

    如果在白名单中--> whiteiplist=0 --> $limit="" --> 不会存储到10m的会话状态(one或者addr)中 --> 不受限制

    反之,不在白名单中 --> whiteiplist=1 --> $limit=二进制远程地址 -->存储进10m的会话状态中 --> 受到限制

    四.测试

    使用ab命令来模拟CC攻击,http_limit_conn和http_limit_req模块要分开测试,同时注意 http_limit_conn模块只统计正在被处理的请求(这些请求的头信息已被完全读入)所在的连接。如果请求已经处理完,连接没有被关闭时,是不会 被统计的。这时用netstat看到连接数可以超过限定的数量,不会被阻止。

    1

    2

    ab -n 请求数 -c 并发 http://10.11.15.174/i.php

    如果被阻止前台会返回503,同时在nginx的error_log中会看到如下错误日志:

    被限制连接数:

    1

    2

    2015/01/28 14:20:26 [error] 4107#0: *65525 limiting connections by zone "addr", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

    被限制请求数:

    1

    2

    2015/01/28 14:18:59 [error] 4095#0: *65240 limiting requests, excess: 5.772 by zone "one", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

    五.其它一些防CC的方法

    1.Nginx模块 ModSecurity、http_guard、ngx_lua_waf

    ModSecurity 应用层WAF,功能强大,能防御的攻击多,配置复杂

    ngx_lua_waf 基于ngx_lua的web应用防火墙,使用简单,高性能和轻量级

    http_guard 基于openresty

    2.软件+Iptables

    fail2ban 通过分析日志来判断是否使用iptables拦截

    DDoS Deflate 通过netstat判断ip连接数,并使用iptables屏蔽

    开头说过抗DDOS是一个系统工程,通过优化系统和软件配置,只能防御小规模的CC攻击,对于大规模攻击、四层流量攻击、混合攻击来说,基本上系统和应用软件没挂,带宽就打满了。下面是我在工作中使用过的防御DDOS的方式:

    高防服务器和带流量清洗的ISP 通常是美韩的服务器,部分ISP骨干供应商有流量清洗服务,例如香港的PCCW。通常可以防御10G左右的小型攻击

    流量清洗服务 例如:akamai(prolexic),nexusguard 我们最大受到过80G流量的攻击,成功被清洗,但是费用非常贵

    CDN 例如:蓝讯 网宿 cloudflare 等,CDN针对DDOS的分布式特点,将流量引流分散,同时对网站又有加速作用,效果好,成本相对低。

    总结一下:发动攻击易,防御难。七层好防,四层难防;小型能防,大型烧钱

    展开全文
  • nginx预防常见攻击

    2019-12-06 16:56:54
    nginx防止DDOS攻击 概述 攻击手段 攻击方式 配置 限制请求率 限制连接的数量 关闭慢连接 设置 IP 黑名单 设置IP白名单 小站点解决方案 nginx防止CC攻击 概述 主动抑制方法 应用举例(Discuz!) 被...

    目录

    nginx防止DDOS攻击
        概述
        攻击手段
        攻击方式
        配置
            限制请求率
            限制连接的数量
            关闭慢连接
            设置 IP 黑名单
            设置IP白名单
            小站点解决方案
    nginx防止CC攻击
        概述
        主动抑制方法
            应用举例(Discuz!)
        被动防御方法
            拒绝IP地址
    预防爬虫攻击
        概述
        利用http_user_agent
        利用Robots.txt
            扩展了解
    

    nginx防止DDOS攻击
    概述

    信息安全的三要素:“保密性”、“完整性”和“可用性”中,DoS(Denial of Service),即拒绝服务攻击,针对的目标正是“可用性”。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。

    DDoS:Distributed Denial of Service,即分布式拒绝服务攻击。借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。

    比喻可以用一个比方来深入理解什么是DDOS。一群恶霸试图让对面那家有着竞争关系的商铺无法正常营业,他们会采取什么手段呢?恶霸们扮作普通客户一直拥挤在对手的商铺,赖着不走,真正的购物者却无法进入;或者总是和营业员有一搭没一搭的东扯西扯,让工作人员不能正常服务客户;也可以为商铺的经营者提供虚假信息,商铺的上上下下忙成一团之后却发现都是一场空,最终跑了真正的大客户,损失惨重。此外,恶霸们完成这些坏事有时凭单干难以完成,需要叫上很多人一起。嗯,网络安全领域中DoS和DDoS攻击就遵循着这些思路。

    DDoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了,目标对恶意攻击包的"消化能力"加强了不少。在此情况下,分布式的拒绝服务攻击手段(DDoS)就应运而生了。DDoS就是利用更多的“傀儡机”来发起进攻,以比从前更大的规模来进攻受害者,导致“可用性”坍塌、失效。
    攻击手段

    1、通过使网络过载来干扰甚至阻断正常的网络通讯。

    2、通过向服务器提交大量请求,使服务器超负荷。

    3、阻断某一用户访问服务器。

    4、阻断某服务与特定系统或个人的通讯。
    攻击方式

    SYN/ACK Flood攻击:
    可通杀各种系统的网络服务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务,由于源都是伪造的故追踪起来比较困难,缺点是实施起来有一定难度,需要高带宽的僵尸主机支持。
    TCP全连接攻击
    这种攻击是为了绕过常规防火墙的检查而设计的,一般情况下,常规防火墙对于正常的TCP连接是放过的,但是Web服务器能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至无法访问,TCP全连接攻击就是通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务,这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此此种DDOS攻击方式容易被追踪。
    针对一些动态页面攻击力度最大,就是需要和数据库进行交互的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,而对于客户端来说轻而易举,常见的现象就是网站慢如蜗牛,缺点是对付只有静态页面的网站效果会大打折扣,并且可能会暴露攻击主机地址
    

    配置
    限制请求率

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
    
    server {
        ...
        location /login.html {
            limit_req zone=one;
        ...
        }
    }
    //limit_req_zone:配置了一个名为one的共享内存
    //zone:用来存储$binary_remote_addr的请求状态
    //rate=30r/m:设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)
    //location 块中 /login.html 的limit_req指令引用了共享内存zone
    

    限制连接的数量

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    limit_conn_zone $binary_remote_addr zone=addr:10m;
     
    server {
        ...
        location /shopping/ {
            limit_conn addr 10;
            ...
        }
    }
    // 限制每一个 IP 对网站 /shopping 部分打开的连接数不超过 10 个.
    //limit_conn指令引用了共享内存zone,并将最大连接数设置为 10.
    

    关闭慢连接

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server {
        client_body_timeout 5s;
        client_header_timeout 5s;
        ...
    }
    //关闭那些一直保持打开同时写数据又特别频繁的连接
    //client_body_timeout和client_header_timeout指令控制请求体或者请求头的超时时间,配置将等待时间控制在 5s 之内:
    

    设置 IP 黑名单

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    location / {
        deny 111.212.23.1;
        deny 123.111.123.5;
        deny 123.113.123.7;
        ...
    }
    //如果能识别攻击者所使用的客户端 IP 地址,那么通过deny指令将其屏蔽,可以通过脚本和计划任务自动检测
    

    设置IP白名单

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    location / {
        allow 192.122.1.0/24;
        deny all;
        ...
    }
    //在互联网环境中不太容易实现,依据实际环境。
    

    小站点解决方案

    location /index/server/p/ {
    if (KaTeX parse error: Expected group after '^' at position 16: http_referer ~ ^̲){
    return 403;
    }
    if (KaTeX parse error: Expected '}', got 'EOF' at end of input: … rewrite ^/(.*) http://127.0.0.1/ redirect;

                #利用地址重写功能
                }
                if ($http_user_agent ~* (wget|curl|qdesk) ) {
                        return 403;
                }                
                #若浏览器类型属于这几类,返回错误页面
        }
    

    nginx防止CC攻击
    概述

    CC攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务

    CC不像DDoS可以用硬件防火墙来过滤攻击,CC攻击本身的请求就是正常的请求。
    我们都知道网站的页面有静态和动态之分,动态网页是需要与后台数据库进行交互的,比如一些论坛用户登录的时候需要去数据库查询你的等级、权限等等,当你留言的时候又需要查询权限、同步数据等等,这就消耗很多CPU资源,造成静态网页能打开,但是需要和数据库交互的动态网页打开慢或者无法打开的现象。这种攻击方式相对于前两种实现要相对复杂一些,但是防御起来要简单的多,提供服务的企业只要尽量少用动态网页并且让一些操作提供验证码就能抵御一般的CC攻击。

    这里能看出来DDoS和CC的区别,DDoS攻击打的是网站的服务器,而CC攻击是针对网站的页面攻击的,用术语来说就是,一个是WEB网络层拒绝服务攻击(DDoS),一个是WEB应用层拒绝服务攻击(CC)
    主动抑制方法

    为了让Nginx支持更多的并发连接数,根据实际情况对工作线程数和每个工作线程支持的最大连接数进行调整。例如设置“worker_processes 10”和“worker_connections 1024”,那这台服务器支持的最大连接数就是10×1024=10240。
    

    worker_processes 10;
    events {
    use epoll;
    worker_connections 10240;
    }

    Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule和NginxHttpLimitReqModule。NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。
    

    http {
    limit_zone my_zone $binary_remote_addr 10m;
    server {
    location /somedir/ {
    limit_conn my_zone 1;
    }
    }
    }
    #其中“limit_zone my_zone $binary_remote_addr 10m”的意思是定义一个名称为my_zone的存储区域、my_zone中的内容为远程IP地址、my_zone的大小为10M;“location /somedir/”的意思是针对somedir目录应用规则;“limit_conn my_zone 1”的意思是针对上面定义的my_zone记录区记录的IP地址在指定的目录中只能建立一个连接。

    NginxHttpLimitReqModule可以根据条件进行请求频率的控制。例如可以定义以下代码:
    

    http {
    limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s;

    server {

    location /somedir/ {
    limit_req_zone zone= my_req_zone burst=2;
    }
    #其中“limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s”的意思是定义一个名称为my_req_zone的存储区域,my_req_zone内容为远程IP地址,my_req_zone大小为10M,my_req_zone中的平均请求速率只能为1个每秒;“location /somedir/”的意思是针对somedir目录应用规则;“limit_req_zone zone= my_req_zone burst=2”的意思是针对上面定义的my_req_zone记录区记录的IP地址在请求指定的目录中的内容时最高2个每秒的突发请求速率。

    #当有连接触发上诉规则时,Nginx会报“503 Service Temporarily Unavailable”的错误,停止用户请求。返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已,相对来说还是很划算的。

    为了测试效果,我将以上代码放入Nginx的配置文件,并编写了一个PHP文件显示phpinfo;另外还写了一个html文件,其中嵌入了多个iframe调用php文件。当我打开这个html文件了,可以看到只有一个iframe中的php文件正常显示了,其他的iframe都显示503错误。

    应用举例(Discuz!)

    Discuz!是使用比较多的一个php论坛程序。以Discuz!7.0为例,程序目录下有比较多的可以直接访问的php文件,但其中最容易受到攻击的一般有index.php(首页)、forumdisplay.php(板块显示)、viewthread.php(帖子显示)。攻击者一般会对这些页面发起大量的请求,导致HTTP服务器连接数耗尽、mysql数据库停止响应,最终导致服务器崩溃。为了防止上述页面被攻击,我们可以设定以下的规则进行防御:

    http {
    limit_zone myzone_bbs $binary_remote_addr 10m;
    limit_req_zone KaTeX parse error: Expected '}', got 'EOF' at end of input: …viewthread).php {
    limit_conn myzone_bbs 3;
    limit_req zone=bbs burst=2 nodelay;
    root html;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
    include fastcgi_params;
    }
    }
    }
    //应用这条规则后,bbs目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。虽然这样的规则一般来说对正常的用户不会产生影响(极少有人在1秒内打开3个页面),但是为了防止影响那些手快的用户访问,可以在nginx中自定义503页面,503页面对用户进行提示,然后自动刷新。在Nginx中自定义503页面:

    error_page 503 /errpage/503.html;
    //503页面的源代码:

    [root@localhost ~]# vim /usr/local/nginx/html/503.html

    <html>
    < head>
    < title>页面即将载入....</title>
    < meta http-equiv=content-type c>
    < META NAME="ROBOTS" C>
    < /head>
    < body bgcolor="#FFFFFF">
    < table cellpadding="0" cellspacing="0" border="0" width="700" align="center" height="85%">
    <tr align="center" valign="middle">
    <td>
    <table cellpadding="10" cellspacing="0" border="0" width="80%" align="center" style="font-family: Verdana, Tahoma; color: #666666; font-size: 11px">
    <tr>
    <td valign="middle" align="center" bgcolor="#EBEBEB">
    <br /><b style="font-size: 16px">页面即将载入</b>
    <br /><br />你刷新页面的速度过快。请少安毋躁,页面即将载入...
    <br /><br />[<a href="javascript:window.location.reload();"><font color=#666666>立即重新载入</font></a>]
    <br /><br />
    </td>
    </tr>
    </table>
    </td>
    </tr>
    < /table>
    < /body>
    < /html>
    
    < SCRIPT language=javascript>
    function update()
    {
    window.location.reload();
    }
    setTimeout("update()",2000);
    < /script>
    

    被动防御方法

    虽然主动防御已经抵挡了大多数HTTP GET FLOOD攻击,但是道高一尺魔高一丈,攻击者会总会找到你薄弱的环节进行攻击。所以我们在这里也要介绍一下被动防御的一些方法。
    

    拒绝IP地址

    访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问。以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables阻止访问:
    

    [root@localhost ~]# vim /opt/deny_ng.sh
    #!/bin/sh
    status=netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1
    NUM=echo $status|awk '{print $1}'
    IP=echo $status|awk '{print $2}'
    result=echo "$NUM > 150" | bc
    if [ r e s u l t = 1 ] t h e n e c h o I P : result = 1 ] then echo IP: result=1]thenechoIP:IP is over $NUM, BAN IT!
    /sbin/iptables -I INPUT -s $IP -j DROP
    fi
    [root@localhost ~]# crontab -e
    * * * * * /bin/bash /opt/deny_ng.sh

    [root@localhost ~]# ab -n 1000 -c 100 http://www.xxx.com/bbs/index.php
    //进行ab工具的测试

    测试完成后,我们就可以看到系统中有IP被封的提示:
    

    #tail /var/spool/mail/root
    Content-Type: text/plain; charset=ANSI_X3.4-1968
    Auto-Submitted: auto-generated
    X-Cron-Env: <Shell=/bin/sh>
    X-Cron-Env: <HOME=/root>
    X-Cron-Env: <;PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=root>
    X-Cron-Env: <USER=root>

    IP:xx.xxx.xx.xx is over 1047, BAN IT!

    至此,又一次HTTP GET FLOOD防御成功。

    根据特征码屏蔽请求(对CC攻击效果较好)
    

    一般同一种CC攻击工具发起的攻击请求包总是相同的,而且和正常请求有所差异。当服务器遭遇CC攻击时,我们可以快速查看日志,分析其请求的特征,比如User-agent。下面的是某一次CC攻击时的User-agent,Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate几乎没有正常的浏览器会在User-agent中带上“must-revalidate”这样的关键字。所以我们可以以这个为特征进行过滤,将User-agent中带有“must-revalidate”的请求全部拒绝访问:

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    if ($http_user_agent ~ must-revalidate) {
    return 403;
    }

    预防爬虫攻击
    概述

    爬虫的比喻  如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的资源便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的猎物。

    爬虫的定义  向网站发起请求,获取资源后分析并提取有用的程序。爬虫攻击事件利用网络漏洞对网站进行攻击,最终造成网站瘫痪!
    利用http_user_agent

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    server {

    listen 80; 
    server_name www.localhost.com; 
    
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 
    { 
    return 403; 
    } 
    if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
    }
    //禁止非GET|HEAD|POST方式的抓取
    

    利用Robots.txt
    扩展了解

    robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

    当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

    Robots协议是国际互联网界通行的道德规范,基于以下原则建立:

    1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;

    2、网站有义务保护其使用者的个人信息和隐私不被侵犯。

    当然,如果搜索引擎不遵守约定的Robots协议,那么通过在网站下增加robots.txt也是不起作用的。(在正式环境中,可以适当允许搜索引擎抓取收录)

    robots.txt文件生成地址 http://tool.chinaz.com/robots/

    原博客地址:
    nginx预防常见攻击:https://www.cnblogs.com/joinbestgo/p/10766352.html

    展开全文
  • nginx网站攻击防护

    2018-10-26 16:36:00
    1.上上个月架构全部迁移上云以后,总的来说比较稳定,业务量也上来,可爱的坏人也来了,7X24小时不停恶意攻击我的网站,第一次收到报警是网站流入流量1分钟以内连续3次超过1000000bps,换算下1M/s秒,平时没那么大流量...

    1.上上个月架构全部迁移上云以后,总的来说比较稳定,业务量也上来,可爱的坏人也来了,7X24小时不停恶意攻击我的网站,第一次收到报警是网站流入流量1分钟以内连续3次超过1000000bps,换算下1M/s秒,平时没那么大流量的啊,当时刚好在朋友家玩,于赶紧开本本连vpn检查,发现全是访问同一个页面的请求,而且是正常访问http 200,应该是被恶意攻击了。

    发现问题
    发现问题第一反应,赶紧将请求地址截图发给开发们看看,问问这个具体是什么?
    最后得知是为短信验证码接口,据后来统计在被持续攻击的一个多小时中损失16000多条短信。

    http://s1.51cto.com/wyfs02/M00/86/0C/wKioL1ezzmTirjx1AANO6vFE_KI482.png

     解决问题:一期防攻击策略:
    发现问题当然要立马解决了,当时思路就是统计nginx日志,当单个ip在10秒钟内访问 /account/sendPhoneCode次数超过5次,就禁用这个ip,正常用户不可能有么大的访问量,于是就有了下面的防攻击shell脚本。

    这个脚本加在定时任务里每分钟执行一次,半夜0点自动重启动防火墙,释放IP,基本上防止了攻击,大概使用了半个月

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #!/bin/bash
    #write: lijing QQ 858080796
    #date:  20160528 v2.0
    #description:拦截非法IP
       
    #定义变量
    RETVAL=0
    Date=$( date '+%Y-%m-%d' )
    Time=$( date '+%Y:%H:%M' -d '-1 minute' )
    MON=$( date | awk -F " " '{print $2}' )
    TODAY=$( date | awk -F " " '{print $3}' )
    Log= "/data/logs/nginx/access.log "
    LINE= "70000"
       
    #关键字
    Key01= "sendPhoneCode"
       
    Status= /tmp/statuS_deny_ip
       
    /sbin/service iptables status > $Status
       
    #定义函数
    #禁止时间函数
    secure_deny_time(){
    Time01=$( date "+%H:%M:%S" -d " -10 second" )
    Time02=$( date "+%H:%M:%S" -d " -9  second" )
    Time03=$( date "+%H:%M:%S" -d " -8  second" )
    Time04=$( date "+%H:%M:%S" -d " -7  second" )
    Time05=$( date "+%H:%M:%S" -d " -6  second" )
    Time06=$( date "+%H:%M:%S" -d " -5  second" )
    Time07=$( date "+%H:%M:%S" -d " -4  second" )
    Time08=$( date "+%H:%M:%S" -d " -3  second" )
    Time09=$( date "+%H:%M:%S" -d " -2  second" )
    Time10=$( date "+%H:%M:%S" -d " -1  second" )
         echo  "$Time01  $Time02 $Time03 $Time04 $Time05 $Time06 $Time07 $Time08 $Time09 $Time10 "
    }
    #       禁止关键字函数
    secure_key(){
         tail -n $LINE $LOG | grep "$TODAY\/$MON" | grep - v ^$| grep $TIME| grep $1 | grep $2 | grep $3  | grep $4 | awk -F " " '{print $1}' | sort >> $Deny
         echo " grep " $TODAY\/$MON " $LOG |grep -v ^$|grep $TIME|grep $1 |grep $2 |grep $3  |grep $4 |awk '{print $1}' |sort"
             }
    #执行防火墙拦截函数
    secure_deny_ip()
    {
             cat $Deny
             echo ......................
             cat $Deny02
         for i in $IP; do
             NUM=$( cat $Deny02| grep $i| awk -F " " '{print $1}' )
            if [ -z $NUM ]; then
                 echo " "
             else
                 if [ $NUM - ge $Dot ]; then
                     for y in $i; do
                         grep $y $Status  > /dev/null 2>&1
                         RETVAL=$?
                                             [ $RETVAL != 0  ] && echo "/sbin/iptables -I INPUT -s $y  -j DROP"
    [ $RETVAL != 0  ] && /sbin/iptables -I INPUT -s $y  -j DROP
                                             [ $RETVAL != 0  ] && echo "$(date " +%H:%M:%S ") $y " >> /tmp/ $Date
                         #[ $RETVAL != 0  ] && /sbin/iptables -I INPUT -s $y -p  tcp  -j REJECT
                     done
                 fi
             fi
         done
    }
       
       
    NUMBER= "1 2 3 4 5 6"
    for  NUMBER in  $NUMBER   ; do
    sleep 10s
    #定义点击次数 Dot
    Dot=5
    Deny= /tmp/secure_deny_tmp_ $NUMBER
    Deny02= /tmp/secure_deny_ $NUMBER
    #第1次,检查当前时间以前10s.  如: 0-10秒
    echo "第$NUMBER 次,检查当前时间以前第$NUMBER 个10s.大于 $Dot 次攻击阻止"
    echo > $Deny
    for LOG in ` echo $Log` ; do
         secure_deny_time
         for TIME in $Time01  $Time02 $Time03 $Time04 $Time05 $Time06 $Time07 $Time08 $Time09 $Time10 ; do
             secure_key  $Key01
         done
            cat $Deny| sort | uniq -c > $Deny02        
        IP=$( cat $Deny02| awk -F " " '{print $2}' )
             secure_deny_ip
    done
    done
    exit

     二期防攻击策略:

    Shell脚本运行的半个月时间里,虽然防止了攻击,但是公司客服反馈有客户被误杀,最严重的是公司有次活动,10秒内发5个短信请求很正常啊,误杀了部分用户,被防火墙禁止IP不能访问任何服务于是得从nginx应用层找方法,不能用老套方法禁IP了,在网上在找几天的资料解决,几乎没有相同的案例,只能自己创造了。

    天道酬勤,终于有了两个思路:
    一是nginx结合lua来防攻击(在网上看得我云里雾里的,最后不会lua选择放弃这个方案)。
    二是利用ngx_http_referer_module(当时看了2天官网英文资料,http://nginx.org/en/docs/http/ngx_http_referer_module.html,这个页面的让我找到方法,尤其是nginx的if 语句)。

    对比攻击日志和正常日志发现,其$http-referer是不同的,如下图:
        正常访问:

    http://s2.51cto.com/wyfs02/M02/86/0C/wKioL1ezz-eDhzMVAACRSeF04-E267.png

    攻击访问:

    http://s2.51cto.com/wyfs02/M01/86/0C/wKioL1ezzx6gBIqmAANuq4j46Ls244.png

    最终解决思路:
            1、去掉了原来的 拦截ip策略,不载拦截ip。
            2、启用nignx的location 匹配/account 的$http-referer的过滤,当不是正常$http-referer,直接在再nginx处理。
    Nginx配置如下:

    1
    2
    3
    4
    5
    6
    7
    location ~ /account (/.*)  {
    if ($http_referer ~  "https://www.xxxxxxxx.net/account/sendPhoneCode" ) {
        #如果匹配就直接返回200,返回404,也行啊,自己定。给可爱的攻击者,不传给后端web
                     return 200;        }
         #不匹配,传给后端web
      proxy_pass  http: //web_group/account/ ;
    }

    整个防攻击到现在没有出现任何问题,效果杠杠的。后期会增加第三期,主要是我们NB的开发,从程序级解决,如增加各种验证啊。

    展开全文
  • 信息安全的三要素:保密性、完整性和可用性中DoS(Denial of Service)即拒绝服务攻击,针对的目标正是“可用性”。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务...
  • Nginx 配置过滤攻击

    2019-12-17 21:26:55
    include /opt/www/nginx/conf/dropsql; } cat /opt/www/nginx/conf/dropsql # Block common exploits set $block_common_exploits 0; #过滤alert if ($query_string ~ .*alert.*) { set $block...
  • 问号后面的请求参数,在nginx用$query_string表 示,不能在rewrite中匹配到,需要用if判断 例如,对于参数中带有单引号的’进行匹配然后定向到错误页面, /plus/list.php?tid=19&mid=1124' rewrite ^.*([;'<>])
  • 一,准备工作 1,登录进VPS控制面板,准备好随时重启VPS。 ...二,找出攻击者IP 1,在网站根目录建立文件ip.php,写入下面的内容。  <?php  $real_ip = getenv(‘HTTP_X_FORWARDED_FOR’
  • nginx 自动屏蔽攻击者ip

    千次阅读 2019-07-17 18:37:24
    nginx使用deny ip; 的方式拒绝提供服务。 因为日志没有做切割,所以使用tail -n 40000 的方式获取最近30分钟的日志,由于我们网站的日志量不是很大,我过滤的40000行的数据完全覆盖了最近30分钟的日志数据。需要注意...
  • 主要介绍了配置Nginx服务器防止Flood攻击的方法,包括PHP的应用请求限制等降低负载的措施,需要的朋友可以参考下
  • 最近,我分析了一下日志,发现有同一个ip不断地请求我的短信接口,然后就写一个脚本来自动分析日志对这些IP进行屏蔽,本文介绍如何利用nginx屏蔽ip来实现防止攻击,当然也可以通过iptable来实现。 首先,在nginx的...
  • 大家都知道服务器资源有限的,但是客户端来的请求是无限的(不排除恶意攻击), 为了保证大部分的请求能够正常响应,不得不放弃一些客户端来的请求,所以我们会采用Nginx的限流操作, 这种操作可以很大程度上缓解...
  • DDOS 是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。 一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢...
  • Nginx+Lua 攻击防范系统视频教程,该教程着重从给流量建立指纹,并结合浏览器特性来辅助识别(攻击工具发出的流量一般不具备浏览器特性), 结合对Nginx的嵌入式开发(Lua),灵活的处理攻击流量,对流量重定向到其他...
  • nginx目录遍历By Danny Robinson and Rotem Bar丹尼·鲁宾逊和Rotem Bar As a security team within a rapidly growing company, we encounter lots of different types of vulnerabilities. We have numerous in-...
  • #重启nginx service nginx restart #如出现这种错误提示,表明nginx.conf中的limit_conn_zone $binary_remote_addr zone=one:10m; #没有添加到正确的区域,最后添加在http字段的第一行。 the size 10485760 of ...
  • 在这里介绍一下使用Nginx作为代理过滤器来封堵一些这种攻击。 Apache DDoS攻击 攻击Apache或者任何其他的HTTP服务器并不需要大量流量。有些服务器可能1 Mbit流量就宕机了。正确页面上的正确请求会生成巨大的负载,...
  • 本文介绍如何利用nginx屏蔽ip来实现防止采集,当然也可以通过iptable来实现。 1.查找要屏蔽的ip 代码如下: awk ‘{print $1}’ nginx.access.log |sort |uniq -c|sort -n nginx.access.log 为日志文件, 会到如下...
  • nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数. HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发...
  • Nginx攻击安全配置

    千次阅读 2019-03-26 18:00:09
    网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置方法) 网站被攻击是一个永恒不变的话题,网站攻击的方式也是一个永恒不变的老套路。找几百个电脑(肉鸡),控制这些电脑同时访问你的网站,超过你...
  • nginx优化之--慢连接攻击应对 http://blog.sina.com.cn/s/blog_d22865190101gbae.html
  • 缓解历史攻击攻击DoS DoS涉及DDoS所有蛮力攻击零时差攻击社会工程Rainbow Tables密码破解工具密码列表字典攻击时间延迟任何托管服务提供商任何CMS或自定义网站无限尝试频率搜索攻击HTTP基本身份验证HTTP摘要身份...
  • ngx_lua_anticc是 Nginx 的 CC(ChallengeCollapsar) 攻击缓解工具。 CC 攻击(即 HTTP 请求泛洪)是一种第 7 层 DDoS 攻击。 ngx_lua_anticc 是 Nginx 基于的扩展。 有了它,您可以轻松地为您的 Web 服务器添加 CC ...
  • 这次我们来讲讲如何通过简单的配置文件来实现nginx防御攻击的效果。 其实很多时候,各种防攻击的思路我们都明白,比如限制IP啊,过滤攻击字符串啊,识别攻击指纹啦。可是要如何去实现它呢?用守护脚本吗?用PHP在外...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,080
精华内容 15,632
关键字:

nginx攻击

友情链接: USRP_GNU_RADIO_SDR_SCH.rar