Python ipset iptables 实现蜜罐 自动封堵扫描者IP

蜜罐可以诱捕入侵者,但无法实时封堵入侵者,必须在事后通过日志进行手工封堵。

有没有什么办法可以实现自动封堵入侵者IP?

iptables 实际上是带这个功能的,它是基于 ipset 实现的。通过 iptables 规则可以自动添加 ipset ,然后对添加的 ipset 应用 DROP 规则即可实现自动封堵扫描者IP。

首先我们要构造一个简易版蜜罐,代码如下:

#!python3
from flask import Flask
from flask import request
import sys app = Flask(__name__) @app.route('/')
def ip():
ip = request.remote_addr
return ip if __name__ == "__main__":
app.run(host="0.0.0.0", port=sys.argv[1])

启动一个 screen 会话,运行简易版蜜罐,蜜罐端口为 12345

python3 ./honey_pot.py 12345

定义的蜜罐端口,如果存在“入侵者”扫描,则将对方列为黑名单进行封堵。

下一步是安装 ipset,ipset 是 iptables 的扩展,可以单独使用,也可以被 iptables 识别。

centos系统安装命令为:

yum install ipset

创建一个蜜罐的 set,命令:

ipset create honey-pot hash:ip

其中 honey-pot 是 set 名,名字可以自己取,后面会用到。

创建好空的 ipset ,下一步是添加 iptables 自动规则

iptables -I INPUT -p tcp --dport 12345 -j SET --add-set honey-pot src

以上命令的意思是,如果有人访问 12345 端口,则将访问者的地址加到 honey-pot 组里去。

我们在另一台机器中通过 curl 试一下规则是否生效:

curl 192.168.10.200:12345

在防御端查看 ipset 组是否生效

ipset list honey-pot

此时创建的 honey-pot 对象组中已经自动添加了一个对象,说明诱捕功能生效。此时只是将诱捕到的IP自动添加到对象组,并没有对诱捕IP实行封堵,下一步,我们对 honey-pot 对象组实行自动封堵。

iptables -I INPUT -p tcp -m set --match-set honey-pot src -j DROP

以上命令是对 honey-pot 对象组实行 DROP 动作。当入侵者不小心扫描到了蜜罐端口,对方IP就会自动写入 honey-pot 对象组,然后就自动被封了。

带 ipset 的 iptables 规则和普通规则一样,都可以使用 Iptable -D 进行删除管理,如果发现误封了友军,可以在 iptables 中设置白名单放行。我们通过 iptables -nL --line-number 查看生效的规则。

前三条规则为:

执行 iptables-save 可以查看规则写法

iptables -A INPUT -p tcp -m set --match-set honey-pot src -j DROPiptables -A 

INPUT -p tcp -m tcp --dport 12345 -j SET --add-set honey-pot srciptables -A 

INPUT -p tcp -m tcp --dport 12345 -j ACCEPT

除了基于 iptables 自动添加 IP 对象组,ipset 自身也是可以单独进行维护的。

ipset 常用操作

ipset list [SETNAME] ,命令列出对象组的相关信息,包含组内成员。如果不加 SETNAME 则显示所有对象组。

ipset create [SETNAME] hash:ip ,用来创建对象组。

ipset destroy [SETNAME] , 用来销毁对象组。

ipset flush [SETNAME],用来清空一个已有的对象组。

最后给出单独维护对象组的例子,从对象组中删除或添加一个IP对象

ipset del honey-pot 192.168.10.23
ipset add honey-pot 192.168.10.23

当出现误操作时,可以对 ipset 中的对象组进行单独维护,从对象组中添加或删除 IP 对象。

原文连接:https://mp.weixin.qq.com/s?__biz=Mzk0MTI4NTIzNQ==&mid=2247486436&idx=1&sn=9411aa569cac795886e2b6c3e47a376f&chksm=c2d581f8f5a208ee9e669f29638e6fd2dc3892f55cdaae2e41b7176dfc7cff49fb7928a26f84&exptype=unsubscribed_card_recommend_article_u2i_mainprocess_coarse_sort&expsessionid=0&scene=169&subscene=10000&sessionid=1651547786&clicktime=1651547794&enterid=1651547794&ascene=56&devicetype=android-29&version=28000033&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&session_us=gh_9b5e6ec6437c&exportkey=AztW11tLhnR9JwwwHI%2Bg0Qs%3D&pass_ticket=%2FTCNY%2FewXsrEKTcBuPsD6EbfkTTlrdlXEXR9l%2BANA%2BIO%2FB%2Ba4wVrCJmAFp%2BOBQm2&wx_header=3

Python ipset iptables 实现蜜罐 自动封堵扫描者IP的更多相关文章

  1. ipset和iptables配合来自动封闭和解封有问题的IP

    iptables封掉少量ip处理是没什么问题的,但是当有大量ip攻击的时候性能就跟不上了,iptables是O(N)的性能.而ipset就像一个集合,把需要封闭的ip地址放入这个集合中,ipset 是 ...

  2. 在Python命令行和VIM中自动补全

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. VIM下的配置: wget https://github.com/rkulla/pydiction/arc ...

  3. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  4. python版恶俗古风自动生成器.py

    python版恶俗古风自动生成器.py """ python版恶俗古风自动生成器.py 模仿自: http://www.jianshu.com/p/f893291674c ...

  5. Iptables DDOS/CC 自动屏蔽脚本

    Iptables DDOS/CC 自动屏蔽脚本 May 20, 2013 最近不停地被 CC (DDOS的一种)频繁干扰,分享一个 iptables 屏蔽 DDOS 的脚本.让 crond 每分钟运行 ...

  6. python scapy的用法之ARP主机扫描和ARP欺骗

    python scapy的用法之ARP主机扫描和ARP欺骗 目录: 1.scapy介绍 2.安装scapy 3.scapy常用 4.ARP主机扫描 5.ARP欺骗 一.scapy介绍 scapy是一个 ...

  7. python多线程与多进程--存活主机ping扫描以及爬取股票价格

    python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本: #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)im ...

  8. python恶俗古风诗自动生成器

    # -*- coding:utf-8 -*- #模仿自: http://www.jianshu.com/p/f893291674ca#python恶俗古风诗自动生成器from random impor ...

  9. 对于pycharm和vscode下,从外部复制文本内容为python字符串内容是会自动加\u202a解决办法

    先来看下这个python3源代码,表面上看没有语法毛病,如果源代码字符串内容是手动复制过来的文本内容,在pycharm和vscode下始终提示: pywintypes.error: (2, 'Shel ...

  10. python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法

    python每个文件都需要顶部注释,那今天介绍一个方法,只需要设置一次,下次新建python文件后,注释自动出现在顶部的方法 只需要在file -----settings------file and ...

随机推荐

  1. Python scipy.ndimage.find_objects用法及代码示例

    用法 scipy.ndimage.find_objects(input, max_label=0) 在标记数组中查找对象. 参数: input: 整数数组 包含由不同标签定义的对象的数组.值为 0 的 ...

  2. Godot UI线程,Task异步和消息弹窗通知

    目录 前言 线程安全 全局消息IOC注入 消息窗口搭建 最简单的消息提示 简单使用 仿Element UI ElementUI 效果 简单的Label样式 如何快速加载多个相同节点 修改一下,IOC按 ...

  3. mysql 重新整理——索引优化explain简单介绍 [八]

    前言 做开发的我们晓得一个道理,就是说不是说你说这东西性能稳定就是性能稳定,你说发版本就发版本,这个是测试部门说了算的. 那么索引优化的关键也就是说一个我们来逐步调优,调优就要知道我们这条语句在mys ...

  4. singalr 可以连接但是无法发送消息

    前言 在一次测试singalr的过程中,发现一个问题,那就是连接成功了,但是发送消息没有响应. 原因及解决 如何可以连接但是发不了消息,net的锅,需要4.0以上,所以我们发布iis的时候也应该选择4 ...

  5. MMDeploy部署实战系列【第六章】:将编译好的MMdeploy导入到自己的项目中 (C++)

    MMDeploy部署实战系列[第六章]:将编译好的MMdeploy导入到自己的项目中 (C++) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给 ...

  6. javascript现代编程系列教程之二——IIFE

    IIFE(Immediately Invoked Function Expression,立即执行函数表达式)是一个在定义后立即执行的JavaScript函数.它具有以下特点: 是一个匿名函数:通常情 ...

  7. Django框架——路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request获取文件、FBV与CBV、CBV源码剖析、模版层

    路由分发 # Django支持每个应用都可以有自己独立的路由层.静态文件.模版层.基于该特性多人开发项目就可以完全解耦合,之后利用路由分发还可以整合到一起 多个应用都有很多路由与视图函数的对应关系 这 ...

  8. 【数学】向量点乘、叉乘的理论、应用及代码实现(C++)

    前言 我总结了一下向量点乘,叉乘的概念,以及他们的应用及相关C++代码的实现.blog 这类问题也是技术面试经常碰到的,一次研究透了会有收获. 1 向量 向量具有大小和方向. 共线向量:两个平行的向量 ...

  9. 力扣628(java)-三个数的最大乘积(简单)

    题目: 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入:nums = [1,2,3]输出:6示例 2: 输入:nums = [1,2,3,4]输出 ...

  10. 阿里云PolarDB开源数据库社区与 Tapdata 联合共建开放数据技术生态

    ​简介:近日,阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态. 近日,阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态.在此之 ...