Go frp内网穿透防暴力破解工具

起因

最近自己的frp服务器上,老是会被一些莫名其妙的人尝试暴力破击我的远程链接密码,虽然16位大小写数字加特殊字符的密码很难破解,但看着也烦,还影响心情。于是打算自己写一个小工具,分析破解的IP所在地和攻击频率,将它加到防火墙中去直接屏蔽。

步骤分析

1、监听日志

frp 0.36之后的版本是有tcp连接的日志的,格式为
2021/08/24 12:04:04 [I] [proxy.go:162] [70107e20979a59c9] [ZNGW] get a user connection [119.1.97.214:3807]

只要实时监听日志文件,并从这个格式中提取出我们需要的 配置的TCP转发名(ZNGW)和请求者IP(119.1.97.214) 就可以了

2、获取IP地理位置

可以通过获取ip位置的一些api接口获取,如http://ip-api.com/json/ip地址字串?lang=zh-CN

{
  status: "success",
  country: "中国",
  countryCode: "CN",
  region: "GZ",
  regionName: "贵州",
  city: "兴义",
  zip: "",
  lat: 25.0502,
  lon: 104.9877,
  timezone: "Asia/Shanghai",
  isp: "Chinanet",
  org: "Chinanet GZ",
  as: "AS4134 CHINANET-BACKBONE",
  query: "119.1.97.214"
}

3、根据配置规则决定是否限制

可以指定一张规则表,什么地方的ip可以访问,什么地方的ip不能访问,什么地方的ip访问有频率限制等

# 规则访问
rules:

  # 按数组顺序来,匹配到了就按匹配的规则执行,跳过此规则。
  # 地区以 http://ip-api.com/json/?lang=zh-CN 查询的结果为准
  # 端口: -1 所有端口
  # time: 时间区间
  # count: 访问次数,-1不限,0限制。其他为 time时间内访问count次,超出频率就限制

  - # 中国上海IP允许
    port: -1
    country: 中国
    regionName: 上海
    city: 上海
    time: 1
    count: -1

  - # 中国地区IP跳过地域判断
    port: -1
    country: 中国
    regionName:
    city:
    time: 600
    count: 3

  - # 其他地区IP禁止
    port: -1
    country:
    regionName:
    city:
    time: 1
    count: 0

4、加入防火墙

linux有iptables和firewall二种防火墙,win中有Microsoft Defender,这些都是可以通过命令行来添加拒绝通过的规则的。

  • iptables: iptables -I INPUT -s 119.1.97.214 -j DROP
  • firewall: firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="119.1.97.214" reject"
  • Microsoft Defender: netsh advfirewall firewall add rule name=119.1.97.214 dir=in action=block protocol=TCP remoteip=119.1.97.214

大致思路是这样,然后抽空花了点时间,用Go写了一个这样的小工具。完整代码:https://github.com/zngw/frptables

测试

目前已经在frp服务器上运行1天了,效果还是有的,可以明显看日志文件链接数变少了,也添加了几个明显的攻击者IP到防火墙中

0%