1、在nginx.conf里的http{}里加上如下代码:

        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m; 

2、在需要限制并发数和下载带宽的网站配置server{}里加上如下代码: 

limit_conn perserver 300; 并发限制
    limit_conn perip 25;单IP限制
    limit_rate 512k;流量限制


浏览器标识拦截

          if ($http_user_agent ~ "Apache\-HttpClient") { 
                return 444;
            }

为空

    if ($http_user_agent = '') { 
         return 444;
        }

http_user_info标识 

访问日志示意
220.181.108.10 - - [20/Jun/2022:12:26:03 +0800] "GET / HTTP/1.1" 302 5 "http://www.baidu.com" "Mozilla/5.0 (compatible; Windows NT 10.0

if ($http_referer  ~ "baidu")
{
    return 444;
}

链接拦截

if ($request_uri ~ "gid=\d{9,12}")
{
    return 444;
}

说明:\d{9,12}是正则表达式,表示9到12个数字,例如gid=1234567890就符号要求。

测试链接:
1. www.xxx.com/index.php?gid=1234567890&pid=111  匹配
2. www.xxx.com/gid=123  不匹配




并且  匹配

    set $allowphp '';
      if ( $request_uri ~ "i=11") {
           set $allowphp p;
      }
      if ( $request_uri ~ "reading_award") {
          set $allowphp "${allowphp}c";
      }
      if ( $allowphp = pc) {
          set $allowss false;
      }

      if ($allowss = false) {
      return 404;
      }

近段时间经常看到一些菠菜网站利用百度搜索逻辑来进行各种推广,比如

http://www.baidu.com/s?wd=hello1234561234.xyz.com

既浪费网站流量,又影响数据统计,所以得利用nginx进行屏蔽处理,首先建立一个block_referer.conf的文件,内容如下

map $http_referer $block_ref_urls {
    default 0;
    ~(?i)(^.*xyz.com.*$) 1;
}

屏蔽referer中带有xyz.com域名的请求,这个正则表达式根据自己的需要编写,然后在nginx.conf文件结束前include这个文件,之后便可以在vhost下自己的网站配置conf文件添加

if ($block_ref_urls) {return 403;}

当然狠一点的话直接return 444,效果更好,block_referer.conf里面可以创建多个map,这样不同的网站可以用不同的规则。


#请求这些敏感词时跳转下载10g文件

if ($request_uri ~* 
"(\.gz)|(%27)|(\.tar)|(admin)|(\.zip)|(\.sql)|(\.asp)|(\.rar)|(function)|($_GET)|(eval)|(\?php)|(config)|(%22)|(\.bak)|(")|(\\')") 
{
return 301 http://lg-dene.fdcservers.net/10GBtest.zip;
}

 屏蔽附件目录使用php

location ~* ^/(attachment|static/upload)/.*\.(php|php5)$ {deny all;}

在查看nginx日志时,经常发现一种攻击方式,
不用GET,也没用POST,而是用了一个16进制伪码:\0x01作为请求method.
其目标是使伺服器溢出,并导致了大量400 bad request包外流。

所以应付此类攻击最好的方式就是直接掐断连接。

配置方式

下面代码放进http{ }段内
map $request_method $ban_method{
    default 1;
    GET 0;
    POST 0;
}
下面代码放进server{}段内
if ( $ban_method = 1 ) {
    return 444;
}

apache版本:2.2
1.修改conf\httpd.conf文件,去掉下面内容前的#号,目的是打开重写标签

LoadModule rewrite_module modules/mod_rewrite.so

2.在conf\httpd.conf文件标签中加入

RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/superUser)
RewriteRule ^(.*)$ www.baidu.com [L,R=302]

第一行表示打开重写开关
第二行为正则表达式的内容,RewriteCond标签相当于if,REQUEST_URI是请求链接,^(/superUser)表示包含"/superUser",
第三行意思是满足上面的要求,就发生链接重写,重写后的地址为"www.baidu.com

Linux apache

在.htaccess加入

    <IfModule mod_rewrite.c>
    RewriteEngine On
    #Block spider
    RewriteCond %{HTTP_USER_AGENT} "Webdup|AcoonBot|AhrefsBot|Ezooms|DataForSeoBot|Googlebot|SemrushBot|Baiduspider|YisouSpider|WangIDSpider|WBSearchBot|Wotbox|xbfMozilla|Yottaa|YandexBot|Jorgee|SWEBot|spbot|TurnitinBot-Agent|mail.RU|curl|perl|Python|Wget|Xenu|ZmEu" [NC]
    RewriteRule !(^robots\.txt$) - [F]
    </IfModule>


“在nginx怎么拒绝这样的连接,实现并且
1 请求的目标是 / 请求的方法是 POST
2 $http_user_agent  是Mozilla/5.0”
我给出的方法如下:

set $flag 0;
if ($http_user_agent = Mozilla/5\.0\.) {
    set $flag "${flag}1";
}
location = / {
    set $flag "${flag}2";
}
if ($request_method = "POST") {
    set $flag "${flag}3";
}
if ($flag = "0123") {
    return 405;
}

简单说明下:由于nginx不支持直接的多重条件判断,所以要先设置一个临时变量,满足一个条件变量值做一次变更,flag先为0,满足UA为Mozilla/5.0时变为01,满足请求/时变为012,满足POST请求时变为0123
————————————————
版权声明:本文为CSDN博主「hrayha」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hrayha/article/details/64130104


cdn屏蔽

*Windows NT 5.1*|*SLCC*|*Baiduspider*|*360Spider*|*Google*|*Yahoo*|*YoudaoBot*|*Sosospider*|*Sogou*|*MSNBot*|*ia_archiver*|*Tomato*|*Windows 98*|*NET CLR*|*DigExt*|*research only*|*TencentTraveler*|*SV1*|*Android 5*|*Android 6*|*Android 4*|*Android 7*|*Android 8*|*Android 9*|*iPhone OS 10*|*iPhone OS 8*|*iPhone OS 9*|*iPhone OS 7*|*iPhone OS 11*

规则:*IE*|*^$*

结果说明:当请求来源于IE浏览器或请求头不携带User-Agent字段时,均不可访问所请求的资源。

nginx内屏蔽

Windows NT 5.1|SLCC|Baiduspider|360Spider|Google|Yahoo|YoudaoBot|Sosospider|Sogou|MSNBot|ia_archiver|Tomato|Windows 98|NET CLR|DigExt|research only|TencentTraveler|SV1|Android 5|Android 6|Android 4|Android 7|Android 8|Android 9|iPhone OS 10|iPhone OS 8|iPhone OS 9|iPhone OS 7|iPhone OS 11


宝塔cdn获取真实ip , 配置Nginx,添加代码到http内。 

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

自定义日志文件格式, 配置Nginx,添加代码到http内。 

第一步

log_format  zbloglog '$remote_addr [$time_local] $http_host "$request" $status "$http_referer" "$http_user_agent"';

 第二步

网站>>设置>>配置文件 把 access_log  /www/wwwlogs/xxxxx.com.log;

修改为 access_log  /www/wwwlogs/xxxxx.com.log zbloglog;


日志例子

127.0.0.1  [19/Oct/2022:21:33:37 +0800] "POST /index.php/channelApi/cloud/visit-collect HTTP/1.1"$request 200 $status  "https://servicewechat.com/wx2dsadaedf79f0/2/page-frame.html" $http_referer"Mozilla/5.0 (Linux; Android 12; V1986A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4317 MMWEBSDK/20220903 Mobile Safari/537.36 MMWEBID/2202 MicroMessenger/8.0.28.2240(0x28001C55) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android"$http_user_agent

log_format可用参数:  

参数说明示例
$remote_addr客户端地址219.227.111.255
$remote_user客户端用户名称
$time_local访问时间和时区18/Jul/2014:17:00:01 +0800
$request请求的URI和HTTP协议“GET /article-10000.html HTTP/1.1”
$http_host请求地址&#xff0c;即浏览器中你输入的地址&#xff08;IP或域名&#xff09;www.ha97.com;198.98.120.87
$statusHTTP请求状态200
$upstream_statusupstream状态200
$body_bytes_sent发送给客户端文件内容大小1547
$http_refererurl跳转来源https://www.google.com/
$http_user_agent用户终端浏览器等信息“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocolSSL协议版本TLSv1
$ssl_cipher交换数据中的算法RC4-SHA
$upstream_addr后台upstream的地址&#xff0c;即真正提供服务的主机地址10.36.10.80:80
$request_time整个请求的总时间0.165
$upstream_response_time请求过程中&#xff0c;upstream响应时间0.002


cat /www/wwwlogs/www.baidu.com.log |grep -v /web/index.php |grep -v 404 |grep .php > /root/www.baidu.com.log

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐