[本站原创开源工具frpbanip]自动封禁frps日志中的非法ip,防止爆破ssh、远程桌面,frps log ip ban

zsanjin 发布于 2024-08-05 141 次阅读


AI 摘要

这篇文章的标题是《自动草稿》。文章内容描述了使用猫娘的可爱妖娆的口吻,并以文言文的形式进行简短的摘要。

frpbanip开源地址:https://github.com/zsanjin-p/frps-log-ip-ban

Github-Card

 

直接用frp的时候,不像二开的natfrp,没有二次密码验证,所以端口经常会被扫,windows远程桌面经常会被爆破,等你要用远程桌面就常常出现安全策略导致无法使用的情况:Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多,请稍后片刻再重试,或与系统管理员或技术支持联系”

为了让这些赶走从小失去家庭孤儿,我弄了一个小工具,能够在设置的时间如5分钟内检测指定连接的多个穿透服务名称如rdp114,yc514等的ip超出设置的阈值如5次,如果不是白名单的ip则封禁ip,并记录封禁日期,过了指定的期限后会放出来,再连再杀,好玩🤣🤣🤣

为了方便理解实现原理,以目前frp_0.59.0的版本为例,看看frps的日志格式
*注意,本工具也是按这个版本生成的日志格式而设计
*要在frps.toml的配置文件中将frps的日志形式改为实时记录进log文件形式,而不是窗口打印,注意配置文件写正确,否则无法启动frps,即:

log.to = "./frps.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false

 

更改配置重启frps服务,即可在当前目录下看到frps.log这个文件,内容格式为:

2024-08-05 12:24:17.093 [I] [proxy/proxy.go:204] [c13337871d15e65] [yc3] get a user connection [116.95.38.61:49987]
2024-08-05 12:24:17.001 [I] [proxy/proxy.go:204] [ccf111125b59b504] [rdp6] get a user connection [175.6.138.64:49302]
2024-08-05 12:24:17.167 [I] [proxy/proxy.go:204] [04555c03b008b28] [www.zsanjin.de] get a user connection [127.0.0.1:63751]

即,如果在最近5分钟内连接[yc3](这是我设置的windows远程桌面穿透名字)的ip[116.95.38.61:49987],116.95.38.61超过3次,则将这个ip和今天日期记录为黑名单到指定位置,白名单内ip不受影响,并且执行指定的脚本、二进制文件等与这个黑名单联动执行封禁ip。

 

*注意目前有一种难以防范的情况:比如设置了5分钟检查一次日志,你的远程桌面设置为10分钟内密码错误5次则锁定10分钟,然而在某个5分钟内连续有大量的ip在爆破,而本检测封禁脚本并未到检测时间,这时候你使用远程桌面时会发现被锁,不过根据你远程桌面的设置,10分钟后即可使用,同时那些爆破的ip也被封禁了。这种情况比较少见,除非你泄露了ip被轮了,可以通过缩短检测封禁时间和缩短远程桌面锁定时间来解决问题。

 

 

具体使用方式:

首先从开源地址下载,或者复制内容,开源地址:https://github.com/zsanjin-p/frps-log-ip-ban

项目中有以下文件:
.env 环境变量文件
banip.ps1 Windows下使用的防火墙脚本一键封禁黑名单中的ip
banip.py 适用于Linux下使用ufw来管理防火墙的脚本一键封禁黑名单中的ip
frpbanip.py 主要程序来监控frps的日志,获取异常ip并整成黑名单

1、关于封禁ip的脚本banip.py&banip.ps1

根据你的系统使用的防火墙来确定你将使用的封禁ip的脚本,Windows用防火墙,选择banip.ps1,如果你用的是linux,并且使用宝塔面板,则选择banip.py,因为宝塔用的是ufw来管理防火墙,这个banip.py仅适用于使用ufw。

其中脚本需要修改的内容为:

黑名单文件所在的位置(必改,大概在第10行左右,ps1脚本默认为C:\\Users\\Administrator\\Desktop\\banip\\frplog\\banip.txt),封禁天数(默认倒推30天,可以不改)

2、关于监控frps日志文件的脚本frpbanip.py

首先需要修改.env文件修改环境变量值,主要修改你想在哪个文件夹下生成banip.txt这个黑名单文件,一般设置在脚本工作目录下,以及调用的防火墙封禁脚本位置:

# frps日志文件路径
LOG_FILE_PATH=C:\\Users\\Administrator\\Desktop\\frp\\frps.log

# 目标连接名称标记内容,逗号分隔
TARGET_NAMES=yuancheng,rdp8101

# IP白名单,逗号分隔
WHITELIST=1.1.1.1,2.3.2.3

# 要写入被禁IP的文件路径
BAN_FILE_PATH=C:\\Users\\Administrator\\Desktop\\banip\\frplog\\banip.txt

# 当检测到被禁IP时要执行的脚本或程序路径
EXECUTE_PATH=C:\\Users\\Administrator\\Desktop\\banip\\frplog\\banip.ps1

# 检查日志文件的时间间隔(分钟)
CHECK_INTERVAL=5

# 触发禁用IP的次数阈值
THRESHOLD_COUNT=5

3、开机启动

linux用户可以用systemd命令:

创建一个 Systemd 服务文件:

sudo nano /etc/systemd/system/frpbanip.service

编辑服务文件,注意修改你的python路径和工作目录路径:

[Unit]
Description=FRP Log Ban IP Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /root/firewall/banipufw/frplogbanip.py  #注意看看你的python路径和脚本路径
WorkingDirectory=/root/firewall/banipufw #注意看看脚本路径
Restart=always
User=root

[Install]
WantedBy=multi-user.target

重新加载 Systemd 配置:

sudo systemctl daemon-reload

启动并启用服务:

sudo systemctl start frpbanip
sudo systemctl enable frpbanip

 

windows设置开机启动:

创建一个批处理文件 (.bat)

@echo off
cd C:\Users\Administrator\Desktop\banip\frplog
C:\Path\To\Python\python.exe frpbanip.py   注意这里改为你的python解释器路径,并删除本行的中文

创建任务计划,将这个bat脚本设置为开机启动即可

 

现在就可以把那些孤儿拒之门外,远程桌面不会被爆破,某些服务的安全也有了保障。

喜欢这个项目可以帮忙点个star⭐

 

 

感谢请我吃辣条
感谢请我吃泡面
感谢请我喝奶茶