请选择时期:
怀孕准备 怀孕 分娩 宝宝0-1岁 宝宝1-3岁 宝宝3-6岁

nginx(nginx/1.20.1)

来源: 最后更新:24-06-02 12:11:29

导读:nginx 防垃圾流量的perl清洗脚本 1、根据nginx的访问日志,根据匹配规则查出来源域名,按照来源域名的在一定时间内的访问量来确定屏蔽对象 将下面的脚本

1、根据nginx的访问日志,根据匹配规则查出来源域名,按照来源域名的在一定时间内的访问量来确定屏蔽对象

将下面的脚本放入到系统定时任务中,定时(2-5分钟,可根据具体情况做相应调整)执行。

确定一个判断不正常的流量的数量,凡是大于该数量的来源一律清洗。

当然这里有可能会有误判,所以在后面将正常的来源地址过滤掉。

cat purge_traffic.sh

#!/bin/bash

if [ -f /var/log/nginx/www-access.log ]; then

tail -10000 /var/log/nginx/www-access.log | grep -E 'cps_site|tracert.php?source' | awk -F'"' '{if ($4 ~ /http:/){print $4}}' | awk -F '/' '{print $3}' | grep -v -E '.xxx.cn|.baidu.com|google.com' | sort | uniq -c | sort -nr | head -60 > /tmp/cps_site.log

cat /tmp/cps_site.log | awk '{if( $1 > 100 ){print $2}}' > /tmp/purge_cps.log

fi

2、nginx中调用的perl脚本,当请求进来时,通过下面的脚本判断Referer地址是否来自上面生成的需要清理的域名。

perl判断脚本,当发现来源地址匹配时返回1

cat purgetraffic.pm

package purgeTraffic;

use nginx;

sub purge {

my $r = shift;

my $ua = $r->header_in("Referer");

if(! $ua ) { return 0; }

open(FILES, "/tmp/purge_cps.log") || return 0;

@cps_file=;

close(FILES);

foreach (@cps_file) {

my $eachcps = $_;

chomp $eachcps;

#$r->print($eachcps .'| ');

if ( $ua =~ m/$eachcps/ ) {

#return HTTP_NOT_ALLOWED;

return 1;

}

}

return 0;

}

1;

__END__

3、nginx.conf 中调用perl脚本,符合清洗规则的来源直接返回 404,

http {

...

perl_modules /etc/nginx;

perl_require purgetraffic.pm;

...

perl_set $purge purgeTraffic::purge;

server {

server_name www.xxx.cn;

if ($purge = 1) { return 404; } #屏蔽垃圾流量

...

}

}

重新加载nginx,完成自动流量清洗

还可以稍微修改一下perl脚本,增加一个白名单,减少误判的可能。

标签: 脚本  来源  流量  

免责声明:本文系转载,版权归原作者所有;旨在传递信息,其原创性以及文中陈述文字和内容未经本站证实。

本文地址:http://www.jxyuer.com/qiaomen/youxi/798419.html

声明: 本站文章均来自互联网,不代表本站观点 如有异议 请与本站联系 联系邮箱:jxyuer#foxmail.com (请把#替换成@)

关于我们 | 广告服务 | 网站合作 | 免责声明 | 联系我们| 网站地图

© 2022-2024 江西育儿网 all rights reserved. 沪ICP备2023005727号-3