iptables防封_iptables屏蔽ip

iptables防封_iptables屏蔽ipiptables封掉少量ip处理是没什么问题的,但是当有大量ip攻击的时候性能就跟不上了,iptables是O(N)的性能。而ipset就像一个集合,把需要封闭的ip地址放入这个集合中,ipset是O(1)的性能,用的hash方式所以特别快。ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加的入ipset的ip也生效。一、软件及安装  1…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

iptables封掉少量ip处理是没什么问题的,但是当有大量ip攻击的时候性能就跟不上了,iptables是O(N)的性能。而ipset就像一个集合,把需要封闭的ip地址放入这个集合中,ipset 是O(1)的性能,用的hash方式所以特别快。ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加的入ipset的ip也生效

一、软件及安装

    1、iptables(一般linux都已经安装好的)

    关于 iptables,要知道这两点:

  • ptables 包含几个表,每个表由链组成。默认的是 filter 表,最常用的也是 filter 表,另一个比较常用的是 nat 表。一般封 IP 就是在 filter 表的 INPUT 链添加规则。
  • 在进行规则匹配时,是从规则列表中从头到尾一条一条进行匹配。

    2、ipset:

ubuntu:apt-get install ipset
centos:yum install ipset

简单的流程

可以用这几条命令概括使用 ipset 和 iptables 进行 IP 封禁的流程

ipset create peter hash:ip  
iptables -I INPUT -m set --match-set peter src -j DROP  
ipset add peter 4.5.6.7  
ipset add peter 1.2.3.4  
ipset add peter ...  
ipset list peter # 查看 peter 集合的内容  

另外几条常用命令

ipset del peter x.x.x.x    # 从 peter 集合中删除内容  
ipset list peter           # 查看 peter 集合内容  
ipset list                # 查看所有集合的内容  
ipset flush peter          # 清空 yoda 集合  
ipset flush               # 清空所有集合  
ipset destroy peter        # 销毁 peter 集合  
ipset destroy             # 销毁所有集合  
ipset save peter           # 输出 peter 集合内容到标准输出  
ipset save                # 输出所有集合内容到标准输出  
ipset restore             # 根据输入内容恢复集合内容  

 

二、ipset的使用详解

    1、查看ip集的列表信息

    ipset list

    2、创建ip集

ipset create XXXX hash:ip,port hashsize 4096 maxelem 100000 timeout 3600
ipset add XXXX 3.4.5.6,3306 

            XXXX:ip集的名字

            hash:ip :为指定类型,还有其他好些类型,比如hash:net,hash:,net等,具体可以man ipset

            100000:为最大保存ip的数量 

            timeout: 为封闭ip的默认时间,这个参数可以不写,这样就永不解封,除非手动解封

             hashsize, maxelem 这两个参数分别指定了创建集合时初始的 hash 大小,和最大存储的条目数量。

             这样创建了名为 XXXX 的集合,初始 hash 大小是 4096,如果满了,这个 hash 会自动扩容为之前的两倍。最大能存储的数量是 100000 个。

             如果没有指定,hashsize 的默认值是 1024,maxelem 的默认值是 65536。

           port,hashsize,maxelem,timeout都是可选择参数,可以没有。

    3、增加ip地址到ip集

    ipset add xxxx 1.1.1.1

    增加网段

    ipset add xxxx 1.1.1.0/24

    4、删除指定的ip或网段

 

    5、保存ip集到文件

 ipset save xxxx>ipset_list.txt

    6、还原ip集

    ipset restore <ipset_list.txt

三、自动封禁和解封细节说明

存储类型

前面例子中的 vader 这个集合是以 hash 方式存储 IP 地址,也就是以 IP 地址为 hash 的键。除了 IP 地址,还可以是网络段,端口号(支持指定 TCP/UDP 协议),mac 地址,网络接口名称,或者上述各种类型的组合。

比如指定 hash:ip,port就是 IP 地址和端口号共同作为 hash 的键。查看 ipset 的帮助文档可以看到它支持的所有类型。

下面以两个例子说明。

hash:net

ipset create r2d2 hash:net  
ipset add r2d2 1.2.3.0/24  
ipset add r2d2 1.2.3.0/30 nomatch  
ipset add r2d2 6.7.8.9  
ipset test r2d2 1.2.3.2  

hash:net 指定了可以往 r2d2 这个集合里添加 IP 段或 IP 地址

第三条命令里的 nomatch 的作用简单来说是把 1.2.3.0/30 从 1.2.3.0/24 这一范围相对更大的段里“剥离”了出来,也就是说执行完 ipset add r2d2 1.2.3.0/24 只后1.2.3.0/24 这一段 IP 是属于 r2d2 集合的,执行了 ipset add r2d2 1.2.3.0/30 nomatch 之后,1.2.3.0/24 里 1.2.3.0/30 这部分,就不属于 r2d2 集合了。执行 ipset test r2d2 1.2.3.2 就会得到结果 1.2.3.2 is NOT in set r2d2.

hash:ip,port

ipset create c-3po hash:ip,port  
ipset add c-3po 3.4.5.6,80  
ipset add c-3po 5.6.7.8,udp:53  
ipset add c-3po 1.2.3.4,80-86  

第二条命令添加的是 IP 地址为 3.4.5.6,端口号是 80 的项。没有注明协议,默认就是 TCP,下面一条命令则是指明了是 UDP 的 53 端口。最后一条命令指明了一个 IP 地址和一个端口号范围,这也是合法的命令。

自动过期,解封

ipset 支持 timeout 参数,这就意味着,如果一个集合是作为黑名单使用,通过 timeout 参数,就可以到期自动从黑名单里删除内容。

ipset create peter hash:ip timeout 300  
ipset add peter 1.2.3.4  
ipset add peter 6.6.6.6 timeout 60  

上面第一条命令创建了名为 peter 的集合,后面多加了 timeout 参数,值为 300,往集合里添加条目的默认 timeout 时间就是 300。第三条命令在向集合添加 IP 时指定了一个不同于默认值的 timeout 值 60,那么这一条就会在 60 秒后自动删除。

隔几秒执行一次 ipset list peter 可以看到这个集合里条目的 timeout 一直在随着时间变化,标志着它们在多少秒之后会被删除。

如果要重新为某个条目指定 timeout 参数,要使用 -exit 这一选项。

ipset -exist add obiwan 1.2.3.4 timeout 100  

这样 1.2.3.4 这一条数据的 timeout 值就变成了 100,如果这里设置 300,那么它的 timeout,也就是存活时间又重新变成 300。

如果在创建集合是没有指定 timeout,那么之后添加条目也就不支持 timeout 参数,执行 add 会收到报错。想要默认条目不会过期(自动删除),又需要添加某些条目时加上 timeout 参数,可以在创建集合时指定 timeout 为 0。

ipset create luke hash:ip  
ipset add luke 5.5.5.5 timeout 100  
# 得到报错信息 kernel error received: Unknown error -1

 举例

    1、创建ip集

    ipset create XXXX hash:ip timeout 172800

    2、创建iptables条目

    iptables -A INPUT -p tcp -m set --match-set XXXX src -m multiport --dports 443,80 -j DROP

或者

 iptables -A INPUT -p tcp -m set --match-set XXXX src -m multiport -j DROP

 

    3、根据条件判断需要封闭的ip

    条件:在上一分钟的nginx的请求中,单一ip请求数超过1000及request_uri中包含passwd字符串的ip都直接封禁,1小时后自动解禁。脚本如下

#!/bin/bash
FILES="/data/nginx_log/xxxxx/access.log"
DATE=`date -d '1 minutes ago' +%Y:%H:%M`
grep ${DATE} ${FILES}|awk -F'|' '{print $3}'|sort -n|uniq -c |sort -nr|head -1>/tmp/ips
grep ${DATE} ${FILES}|grep -i passwd|awk -F'|' '{print $3}'|sort -n|uniq>/tmp/ippwd
NUM=`awk '{print $1}' /tmp/ips`
IP=`awk '{print $2}' /tmp/ips`
IP2=`cat /tmp/ippwd`
threshold=1000
if [[ $NUM -gt $threshold ]];then
/sbin/ipset -! add forbidip $IP timeout 3600
fi
if [ -s /tmp/ippwd ];then
for i in $IP2
do
/sbin/ipset -! add forbidip $i
done
fi

4、脚本自动运行

在crontab中添加此脚本的自动运行

*/1 * * * * bash /path/to/script.sh
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188968.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • date和localdatetime转换_localDate

    date和localdatetime转换_localDateLocalDateTime是jdk8的新增的类,还有LocalDate,LocalTime;我们可能用到类里面的一些方法,例如传入的时间和当前时间做比较,就需要将Date转为LocalDate或其他两个,Date转换为LocalDateDatedate=newDate();LocalDatelocalDate=date.toInstant().atZone(ZoneId.systemDefault()) //设置当前系统时区.toLocalDat

  • 计算机修改用户名密码,怎么修改电脑用户名呢_电脑的登录名和密码在哪里

    计算机修改用户名密码,怎么修改电脑用户名呢_电脑的登录名和密码在哪里曲谱自学网今天精心准备的是《怎么修改电脑用户名》,下面是详解!如何改计算机用户名(administrator)如何改计算机用户名(administrator)…如何改计算机用户名(administrator)1、按“win+R”打开运行,在运行输入框里面输入“gpedit.msc”,如下图所示:2、进去本地组策略编辑器之后,点击“计算机配置-windows设置-安全设置-本地策略-安全选项”,…

    2022年10月14日
  • MSM8953配置I2C及SPI

    MSM8953配置I2C及SPI此次完成的任务是要使能高通8953平台的i2c和spi,主要做的工作就是在设备树文件中添加节点信息。主要的工作在于对设备树文件的修改,主要修改了msm8953-pinctrl.dtsi和msm8953.dtsi两个文件。msm8953-pinctrl.dtsi是配置MSM8953芯片中的GPIO。在此文件中定义i2c使用哪个gpio。因为引脚复用功能的存在,所以要先配置i2c的引脚复用功能…

    2022年10月18日
  • 搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

    搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop转载自:https://www.imooc.com/article/17571网页可见区域高:document.body.clientHeight网页正文全文高:document.body.scrollHeight网页可见区域高(包括边线的高):document.body.offsetHeight网页被卷去的高:document.body.scrollTop屏幕分辨率高:window.screen…

  • 学习web前端,初学者应该用什么编程软件

    学习web前端,初学者应该用什么编程软件Web前端开发最常见的编程软件有以下几种: DreamWeaver是一款老牌前端开发工具,功能强大且组件丰富,作为前端开发的一款利器被广泛使用。DreamWeaver是一款可视化的前端开发工具,一边写代码一边就能看到效果,所以使用起来还是比较方便的。但是DreamWeaver的缺点就是比较耗费系统资源,这也许是IDE类产品的通病。 Hbuilder是最近几年被广泛使用的一款前端开发…

  • 一文读懂堆与栈的区别

    一文读懂堆与栈的区别堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:(1)程序内存布局场景下,堆与栈表示的是两种程序内存分区;(2)数据结构场景下,堆与栈表示两种常用的数据结构。1.程序内存分区——堆与栈栈由操作系统自动分配释放,用于存放函数的参数值、局部变量的值等,其操作方式类…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号