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

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

yum install ipset -y

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

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

FILES:nginx的access.log文件

sensitive: 敏感关键字

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

#!/bin/bashFILES="/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

4. 用crontab定时启动脚本。

echo "* * * * * bash /data/iptables_ipset_deny.sh" >> /etc/crontab

iptables+ipset自动封闭和解封频繁访问web服务的恶意IP相关推荐

  1. 在ASP.NET AJAX 1.0框架中访问Web服务

    一. 简介     如今,微软最新推出的AJAX框架为ASP.NET AJAX 1.0(下载地址为[url]http://ajax.asp.net/downloads/default.aspx[/ur ...

  2. 使用 HttpLib 来访问 Web 服务

    介绍 C# 为开发者提供很多便利方法用来访问各种 Web 服务,但是编写异步的访问方式却是有点复杂.Windows 通讯框架是一个客户端/服务器通讯非常棒的工具.我精彩发现我自己必须写很多代码来使用已 ...

  3. 尝试从远程计算机访问Web服务不显示调用按钮

    当尝试从远程计算机访问 Web 服务时,不会显示"调用"按钮.并且会收到以下错误信息: The test form is only available for requests f ...

  4. 访问Web服务器时 使用的协议是,使用SOAP协议访问Web服务

    SOAP是简单对象访问协议,它可看成是HTTP与XML的结合,其中XML部分是作为HTTP报文的实体主体部分. SOAP:简单对象访问协议,是一种轻量的.简单的.基于 XML 的协议,它被设计成在 W ...

  5. JQuery中ajax方法访问web服务

      1 $.ajax({     2    3 02    type: "POST",     4    5 03    //注明 返回Json     6    7 04     ...

  6. 通过双向证书认证使用 gSOAP 访问 web services

    概述 本文通过一系列的实验步骤描述,向您展示如何使用 gSOAP 编写的客户端,通过双向证书认证,访问由 tomcat7 和 Axis2 搭建的 web 服务.全文循序渐进,分为几个阶段逐步展开,每个 ...

  7. Android访问WCF服务(使用json实现参数传递)

    经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] pub ...

  8. linux访问web地址命令(linux访问接口的命令)

    linux在命令符界面如何浏览网页 在命令符界面浏览网页可以使用lynx,links,w3m等的使用方式都很类似,以w3m为例:安装w3m浏览器:sudoapt-getinstallw3m:使用w3m ...

  9. IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)

    ########################## ## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口) #################### ...

最新文章

  1. OpenGL概念辨析: 窗口,视口,裁剪区域
  2. 活在未来,需要知道了解过去
  3. CocoaPods公有库的创建
  4. snpeff注释变异(variants)
  5. String、StringBuffer、StringBuilder介绍
  6. Java黑皮书课后题第4章:*4.7(顶点坐标)假设一个正五边形的中心位于(0,0),其中一个点位于0点位置。编写程序,提示用户输入正五边形外接圆的半径,显示p1到p5的5个坐标,保留两位小数
  7. Unity3D 访问Access数据库
  8. python图形界面编程库_Python支持哪些图形界面的第三方库
  9. 【Python】下载所有 XKCD 漫画
  10. (五)流比特币价格的AI预测和异常检测
  11. cocos2d-x史上最著名的诗
  12. LeetCode 1026. 节点与其祖先之间的最大差值
  13. Android7.1+查看audio policy使用.conf/.xml(二十七)
  14. 如何将交换功能写成函数?
  15. mysql多表in查询_MySQL多表查询
  16. matlab erf erfi,中国樱桃AP2/ERF转录因子在花芽休眠解除过程的表达与作用研究
  17. 木马病毒 与后门技术
  18. 观后感 --《当幸福来敲门》和《赢在中国》
  19. java 模板模式_java设计模式之模板方法模式详解
  20. 我们是如何设计出,让玩家们有“上瘾症”的抽卡系统的

热门文章

  1. android 多屏幕 设计翻译,android设计4(翻译).pdf
  2. linux登陆域_Ubuntu 13.04 登录Windows域
  3. AI+隐私计算如何在未来掀起商业浪潮?|算力隐私专栏
  4. python人工智能项目实例-python人工智能项目实战,PDF+源码
  5. a连接带id转送不了数据_数据库表连接的简单解释
  6. 马云退休当老师:盘点IT大佬们退休后的现状
  7. 用等步长分割法(Equal Interval Search Method)求函数最大值的Python程序
  8. 建筑施工图的主要内容及计算机绘图技巧论文,建筑制图论文题目大全 建筑制图论文题目怎样取...
  9. 办理上海居住证资料__网址
  10. Macrorit Partition Expert v5.7.0 硬盘分区管理软件单文件中文版