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. HTMLTestRunner测试报告中点击 view 按钮没反应

    背景 HTMLTestRunner 生成测试报告后,发现点击  view 这个按钮一直没有反应 通过 F12 开发人员工具检查,发现是 jQuery 文件没有加载出来 解决方法 我采用的解决方法是直接 ...

  2. 我为什么选择Wiki.js记笔记?

    很长一段时间里,我都被困扰着,感觉陷入了笔记的泥潭,而积累的如此多的笔记也没有形成我自己的知识体系. 之前的记笔记方式 笔记的来源 微信公众号 技术博客 纸质书籍 官网文档 PDF 自己的零散想法 网 ...

  3. HarmonyOS NEXT调优工具Smart Perf Host高效使用指南

      在软件开发的过程中,很多开发者都经常会遇到一些性能问题,比如应用启动慢.点击滑动卡顿.应用后台被杀等,想要解决这些问题势必需要收集大量系统数据.而在收集数据的过程中,开发者则需要在各种工具和命令之 ...

  4. MySQL集群入门(PXC)

    目标: 1.掌握PXC集群MySQL方案的原理: 2.掌握PXC集群的强一致性: 3.掌握PXC集群的高可用方案:硬件要求: 1.Win10x64企业版/linux/MacOS: 2.Docker虚拟 ...

  5. apache 服务器配置常用知识点合集

    前言 因为当年周围同学都在学php,最为简单的就是学php 好就业啊,写个一些php,最后放弃了,apache也看了两眼吧.下面是我使用有记录的,没有记录的我后面会补上. 正文 域名配置 1.取消 N ...

  6. tomcat 服务版本内存设置

    1. 安装服务,如需指定java路径,需要在service.bat 中修改, 如下图 其中 pa代表当前目录 2. 安装服务, service.bat install 服务名,如下图示例 3. 内存设 ...

  7. web常见的攻击方式有哪些?如何防御?

    一.是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要 ...

  8. C++ 类方法解析:内外定义、参数、访问控制与静态方法详解

    C++ 类方法 类方法,也称为成员函数,是属于类的函数.它们用于操作或查询类数据,并封装在类定义中.类方法可以分为两种类型: 类内定义方法: 直接在类定义内部声明和定义方法. 类外定义方法: 在类定义 ...

  9. javascript现代编程系列教程之X——javascript人工智能

    JavaScript 在人工智能(AI)领域的应用主要体现在以下几个方面: 浏览器端的机器学习:TensorFlow.js 是一个在浏览器中运行的 JavaScript 机器学习库,它允许开发者训练和 ...

  10. 力扣367(java&python)-有效的完全平方数(简单)

    题目: 给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false . 进阶:不要 使用任何内置的库函数,如  sqrt . 示例 1: 输入: ...