封禁恶意IP访问在我司实践总结
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
- 用crontab定时启动脚本。
echo "* * * * * bash /data/iptables_ipset_deny.sh" >> /etc/crontab
可以参考:https://github.com/firehol/blocklist-ipsets
封禁恶意IP访问在我司实践总结相关推荐
- Nginx封禁恶意IP
网络攻击时有发生, TCP洪水攻击.注入攻击.DOS等 比较难防的有DDOS等 数据安全,防止对手爬虫恶意爬取,封禁IP 一般就是封禁ip linux server的层面封IP:iptables ng ...
- 关于iptables封禁国外IP方法
0.背景说明 个人买的腾讯云或者阿里云的机器,部署了一些应用服务,"黑客"可能会恶意进行攻击,有的是使用国内IP,有的是模拟国外的IP. 本文主要针对封禁国外IP的方法. 1.安装 ...
- Nginx自动封禁可疑Ip
文章目录 一.Nginx封禁ip 1.简介 2.nignx 禁止IP访问 2.1 方法一 2.2 方法二 3.关于 deny 的使用 二.脚本自动封禁Ip 1.流程介绍 2.脚本实战 2.1 核心脚本 ...
- cs1.6服务器ip地址文件,cs1.6服务器端封禁的IP在那个文件夹里?
CS1.6自架服务器封禁IP小弟我自己架了一个校园局域网服务器,有些玩家我不想让他进来,封IP,输入指令addip 0 ***.***.***.**以后,该IP玩家被ban,禁止进入服务器,查询lis ...
- 【代理脚本】只有无尽的跳转,没有封禁的IP
脚本简介: 在做渗透测试的过程中,最让人头疼的无非就是ip被封了.因为学习需要简单的写了一个快代理的高匿代理ip的爬虫.该脚本涉及了python爬虫的诸多知识点的运用.简单的实现爬取ip并对ip进行有 ...
- iptables+ipset自动封闭和解封频繁访问web服务的恶意IP
iptables直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会严重下降,iptables是O(N)的性能.而ipset就像一个集合,把需要封闭的ip地址写入这个集 ...
- 服务器被攻击怎么封禁IP
如果您的服务器被入侵了,最好的做法是立即断开网络连接,以防止攻击者进一步损害您的系统.然后,您应该检查您的服务器,看看是否有任何指示受到入侵的迹象.如果您发现了任何可疑的活动,您应该立即联系您的网络管 ...
- Nginx自动封禁IP
个人网站总被攻击?那就写个自动封禁IP的脚本吧. 思路 AWK统计access.log,记录每分钟访问超过100次的ip,然后配合nginx进行封禁. 编写shell脚本. 定时任务跑脚本. 好,思路 ...
- Ngnix IP封禁以及实现自动封禁IP
1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4; 3.在ngnix的HTTP的配置中添加如下内容 include b ...
最新文章
- [linux内核][linux中断]——软中断机制
- 菜菜sklearn——XGBoost(3)
- eclipse查看jar包中class的中文注释乱码问题的解决
- javascript 自定义Map
- 人工智障学习笔记——深度学习(3)递归神经网络
- 【java】java 并发编程 CyclicBarrier 源码分析
- 微课|玩转Python轻松过二级:第3章课后习题解答1
- Ubuntu 10.10安装Vmware Tools
- UltraEdit(UE)如何设置去掉.bak备份文件?
- slice 和splice 的区别 js
- mysql awr 上海用户组_AWR-mysql教程-PHP中文网
- 中文文本标注工具调研以及BRAT安装使用
- 三星平板电脑安linux,三星平板电脑怎样刷机_三星平板t805c怎么刷机_三星平板怎么刷机...
- 【微信小程序怎么开店铺】微信小程序店铺怎么制作?
- 计算机台式内存条,台式电脑怎么装内存条_台式电脑加装内存条方法-win7之家
- OOP,Object Oriented Programming 面向对象的三大特性 五大基本原则
- 建设工程管理系统(二)
- 如何设置开机启动程序
- php增加横排文字的间距,html段落内文字设置字间距间隔
- TCPIP卷一(2):二层封装之–PPP与FR
热门文章
- linux 安装谷歌浏览器--Google chrome
- 子元素自动撑开父元素空间
- word报错“您的组织策略阻止我们为您完成此操作”的解决方法
- 神仙打架看不懂?用人话解读NIPS神经网络攻防赛清华三连冠团队模型算法
- Linux搭建下载器
- Field baseMapper in xxxxx required a bean of type 'xxxxxx' that could not be found 问题
- 页面提交处理时候显示“正在处理,请稍后……”,防止二次提交功能。
- 城市太美、生活步调太悠闲
- 加密与解密 入侵检测 扫描与抓包
- python绘制三维矢量图_开源图形库 c语言-图形图像库 集合