时间:2024-06-02人气:作者:佚名
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脚本,增加一个白名单,减少误判的可能。
打造万能Windows封装包 对于那些经常需要给朋友攒机或者重新安装操作系统的电脑高手来说,每次安装Windows系统所经历的漫长等待无异于一次折磨。虽然身边有
(48)人喜欢2024-10-07修改注册表加快Windows 7关机速度 关机更迅速,操作简单方便,何乐而不为呢! 在Windows7系统的“开始”菜单的搜索框中输入“regedit”打开注册
(51)人喜欢2024-10-07windows安装redis缓存使用图文教程 下载安装 通过https://github.com/mythz/redis-windows这里可以直接下载,然后解
(65)人喜欢2024-10-07windows关闭默认共享 一、运行–CMD–net share 会显示你的电脑的共享情况 二、如果有些没有关闭:net share c$ /d net sha
(44)人喜欢2024-10-07打造万能Windows封装包 对于那些经常需要给朋友攒机或者重新安装操作系统的电脑高手来说,每次安装Windows系统所经历的漫长等待无异于一次折磨。虽然身边有
(48)人喜欢2024-10-07修改注册表加快Windows 7关机速度 关机更迅速,操作简单方便,何乐而不为呢! 在Windows7系统的“开始”菜单的搜索框中输入“regedit”打开注册
(51)人喜欢2024-10-07windows安装redis缓存使用图文教程 下载安装 通过https://github.com/mythz/redis-windows这里可以直接下载,然后解
(65)人喜欢2024-10-07windows关闭默认共享 一、运行–CMD–net share 会显示你的电脑的共享情况 二、如果有些没有关闭:net share c$ /d net sha
(44)人喜欢2024-10-07