1.需求分析

随着公司业务量的增长,有些人可能就会动些小心思搞你一下,爬虫或者恶意访问你,如何限制这些用户访问呢,今天做下总结,大体有三种方案:代码层面;http服务器(以nginx为例);服务器网络层面

2.代码层面:

就是编写代码统计单位时间内,用户访问的总次数,把访问比较频繁的挑出来,拒绝服务,比如代码中用redis,key是访问用户的ip地址,value是单位时间内访问次数,超过阈值,就给用户提示访问过于频繁,拒绝访问。但这种缺点很明显,就是有很多的代码开发量,对原有业务代码侵入性太强,所有实用价值我个人觉得不是太高。

详细了解可以参考这篇博文:

https://blog.csdn.net/qq_26545305/article/details/88219889

3.Nginx

这种方法的思路是,找到访问频繁的ip地址,然后将其加入禁止访问名单。

3.1查找服务器所有访问者ip方法:

awk '{print $1}' nginx_access.log |sort |uniq -c|sort -n

nginx.access.log 为nginx访问日志文件所在路径

会到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,如下面结果,
若 66.249.79.84 不为蜘蛛则需要屏蔽:

     89 106.75.133.16790 118.123.114.5791 101.78.0.21092 116.113.124.5992 119.90.24.7392 124.119.87.204119 173.242.117.1454320 66.249.79.84

3.2 屏蔽IP的方法:

在nginx的安装目录下面,新建屏蔽ip文件,命名为guolv_ip.conf,以后新增加屏蔽ip只需编辑这个文件即可。
加入如下内容并保存:

deny 66.249.79.84 ;

在nginx的配置文件nginx.conf中加入如下配置,可以放到http, server, location, limit_except语句块,需要注意相对路径,本例当中nginx.conf,guolv_ip.conf在同一个目录中。

include guolv_ip.conf;

保存nginx.conf文件,然后测试现在的nginx配置文件是否是合法的:

nginx -t

如果配置没有问题,就会输出:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

如果配置有问题就需要检查下哪儿有语法问题,如果没有问题,需要执行下面命令,重载 nginx 配置文件:

service nginx  reload

3.3 注意:

屏蔽ip的配置文件既可以屏蔽单个ip,也可以屏蔽ip段,或者只允许某个ip或者某个ip段访问。

//屏蔽单个ip访问deny IP; //允许单个ip访问allow IP; //屏蔽所有ip访问deny all; //允许所有ip访问allow all; //屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令deny 123.0.0.0/8//屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令deny 124.45.0.0/16//屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令deny 123.45.6.0/24//如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
//那需要你在guolv_ip.conf中这样写allow 1.1.1.1;
allow 1.1.1.2;
deny all; 

单独网站屏蔽IP的方法,把include guolv_ip.conf; 放到网址对应的在server{}语句块,
所有网站屏蔽IP的方法,把include guolv_ip.conf; 放到http {}语句块。

可以看到这种方式,已经比写代码实现方便了很多,对业务层面无侵入性,但是还有问题,就是不够智能,必须有人手动指定某些ip可以访问或者禁止访问才行,有没有更好的方式呢,大杀器——ipsets

4.ipset

ipset是iptables的扩展,iptables可以直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会严重下降,iptables是O(N)的性能。而ipset就像一个集合,把需要封闭的ip地址写入这个集合中,ipset 是O(1)的性能,可以有效解决iptables直接封禁大量IP的性能问题。下面介绍使用:

4.1 安装

如果是RedHat/CentOS,首先用yum(Ubuntu/Debian用将yum换为apt-get既可 )安装ipset。

yum install ipset -y

4.2 创建封禁策略

ipset创建基于ip hash的集合名称,例如blacklist,timeout 3600 表示封禁3600s;  iptables开启封禁80,443策略。

ipset create blacklist hash:ip timeout 3600
iptables -A INPUT -p tcp -m set --match-set blacklist src -m multiport --dports 443,80 -j DROP

当然,也可以封禁黑名单IP的所有请求。

iptables -I INPUT -p tcp -m set --match-set blacklist src -m multiport -j DROP

4.3 定义脚本自动筛选

基于自定义访问频率阈值或者请求敏感关键字来创建自动筛选恶意IP的脚本/data/iptables_ipset_deny.sh。

FILES:nginx的access.log文件

sensitive: 敏感关键字

threshold: 一分钟内请求频率阈值

#!/bin/bash
FILES="/data/nginx/logs/access.log"
sensitive="sensitive_word"
threshold=1000ip_file="/tmp/ip_file"
sensitive_file="/tmp/sensitive_file"
DATE=`date -d '1 minutes ago' +%Y:%H:%M`grep ${DATE} ${FILES} | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 1 > ${ip_file}
grep ${DATE} ${FILES} | grep -i ${sensitive} | awk '{print $1}' | sort -n | uniq > ${sensitive_file}ip_file_number=`awk '{print $1}' ${ip_file}`
ip_file_ip=`awk '{print $2}' ${ip_file}`if [[ $ip_file_number -gt $threshold ]];thenipset add blacklist ${ip_file_ip} timeout 3600
fiif [ -s ${sensitive_file} ];thenfor sensitive_ip in `cat ${sensitive_file}`doipset add blacklist ${sensitive_ip}done
fi
  1. 用crontab定时启动脚本。
echo "* * * * * bash /data/iptables_ipset_deny.sh" >> /etc/crontab

可以参考:https://github.com/firehol/blocklist-ipsets

封禁恶意IP访问在我司实践总结相关推荐

  1. Nginx封禁恶意IP

    网络攻击时有发生, TCP洪水攻击.注入攻击.DOS等 比较难防的有DDOS等 数据安全,防止对手爬虫恶意爬取,封禁IP 一般就是封禁ip linux server的层面封IP:iptables ng ...

  2. 关于iptables封禁国外IP方法

    0.背景说明 个人买的腾讯云或者阿里云的机器,部署了一些应用服务,"黑客"可能会恶意进行攻击,有的是使用国内IP,有的是模拟国外的IP. 本文主要针对封禁国外IP的方法. 1.安装 ...

  3. Nginx自动封禁可疑Ip

    文章目录 一.Nginx封禁ip 1.简介 2.nignx 禁止IP访问 2.1 方法一 2.2 方法二 3.关于 deny 的使用 二.脚本自动封禁Ip 1.流程介绍 2.脚本实战 2.1 核心脚本 ...

  4. cs1.6服务器ip地址文件,cs1.6服务器端封禁的IP在那个文件夹里?

    CS1.6自架服务器封禁IP小弟我自己架了一个校园局域网服务器,有些玩家我不想让他进来,封IP,输入指令addip 0 ***.***.***.**以后,该IP玩家被ban,禁止进入服务器,查询lis ...

  5. 【代理脚本】只有无尽的跳转,没有封禁的IP

    脚本简介: 在做渗透测试的过程中,最让人头疼的无非就是ip被封了.因为学习需要简单的写了一个快代理的高匿代理ip的爬虫.该脚本涉及了python爬虫的诸多知识点的运用.简单的实现爬取ip并对ip进行有 ...

  6. iptables+ipset自动封闭和解封频繁访问web服务的恶意IP

    iptables直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会严重下降,iptables是O(N)的性能.而ipset就像一个集合,把需要封闭的ip地址写入这个集 ...

  7. 服务器被攻击怎么封禁IP

    如果您的服务器被入侵了,最好的做法是立即断开网络连接,以防止攻击者进一步损害您的系统.然后,您应该检查您的服务器,看看是否有任何指示受到入侵的迹象.如果您发现了任何可疑的活动,您应该立即联系您的网络管 ...

  8. Nginx自动封禁IP

    个人网站总被攻击?那就写个自动封禁IP的脚本吧. 思路 AWK统计access.log,记录每分钟访问超过100次的ip,然后配合nginx进行封禁. 编写shell脚本. 定时任务跑脚本. 好,思路 ...

  9. Ngnix IP封禁以及实现自动封禁IP

    1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4; 3.在ngnix的HTTP的配置中添加如下内容 include b ...

最新文章

  1. [linux内核][linux中断]——软中断机制
  2. 菜菜sklearn——XGBoost(3)
  3. eclipse查看jar包中class的中文注释乱码问题的解决
  4. javascript 自定义Map
  5. 人工智障学习笔记——深度学习(3)递归神经网络
  6. 【java】java 并发编程 CyclicBarrier 源码分析
  7. 微课|玩转Python轻松过二级:第3章课后习题解答1
  8. Ubuntu 10.10安装Vmware Tools
  9. UltraEdit(UE)如何设置去掉.bak备份文件?
  10. slice 和splice 的区别 js
  11. mysql awr 上海用户组_AWR-mysql教程-PHP中文网
  12. 中文文本标注工具调研以及BRAT安装使用
  13. 三星平板电脑安linux,三星平板电脑怎样刷机_三星平板t805c怎么刷机_三星平板怎么刷机...
  14. 【微信小程序怎么开店铺】微信小程序店铺怎么制作?
  15. 计算机台式内存条,台式电脑怎么装内存条_台式电脑加装内存条方法-win7之家
  16. OOP,Object Oriented Programming 面向对象的三大特性 五大基本原则
  17. 建设工程管理系统(二)
  18. 如何设置开机启动程序
  19. php增加横排文字的间距,html段落内文字设置字间距间隔
  20. TCPIP卷一(2):二层封装之–PPP与FR

热门文章

  1. linux 安装谷歌浏览器--Google chrome
  2. 子元素自动撑开父元素空间
  3. word报错“您的组织策略阻止我们为您完成此操作”的解决方法
  4. 神仙打架看不懂?用人话解读NIPS神经网络攻防赛清华三连冠团队模型算法
  5. Linux搭建下载器
  6. Field baseMapper in xxxxx required a bean of type 'xxxxxx' that could not be found 问题
  7. 页面提交处理时候显示“正在处理,请稍后……”,防止二次提交功能。
  8. 城市太美、生活步调太悠闲
  9. 加密与解密 入侵检测 扫描与抓包
  10. python绘制三维矢量图_开源图形库 c语言-图形图像库 集合