最近自己的frp转发的一些内网远程连接,老是被莫名其妙的人进行暴力破解,而且破解的IP大都是国外的。于是想写个程序实时监听frp的日志文件,分析ip,根据ip的所在地以及链接的频率直接把它加到防火墙黑名单中。
要实现这个功能,首先就是要能实时监听日志文件,类似于实现Linux中tail -f
效果的功能。本来想自己写的,后面搜了一下github上有人已经写好了tail库,功能已经很强大了,只要拿来适当传入传数用用就可以了。
package main
import (
"fmt"
"time"
"github.com/hpcloud/tail"
)
func main() {
fileName := "./log/frps.log" // 被监听的文件,即frp日志文件
config := tail.Config{
ReOpen: true, // 重新打开
Follow: true, // 是否跟随
Location: &tail.SeekInfo{Offset: 0, Whence: 2}, // 从文件的哪个地方开始读
MustExist: false, // 文件不存在不报错
Poll: true, // 监听新行,使用tail -f,这个参数非常重要
}
tails, err := tail.TailFile(fileName, config)
if err != nil {
fmt.Println("tail file failed, err:", err)
return
}
var line *tail.Line
var ok bool
for {
line, ok = <-tails.Lines
if !ok {
fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
time.Sleep(time.Second)
continue
}
fmt.Println(line.Text)
}
}
以上程序执行就想当于tail -f ./log/frps.log
。每次新增每行的数据都在line.Text
中的,之后就可以用这个日志数据来分析判定哪些IP是攻击者,加到防火墙中去了。