起因
最近自己的frp服務(wù)器上,老是會(huì)被一些莫名其妙的人嘗試暴力破擊我的遠(yuǎn)程鏈接密碼,雖然16位大小寫數(shù)字加特殊字符的密碼很難破解,但看著也煩,還影響心情。于是打算自己寫一個(gè)小工具,分析破解的IP所在地和攻擊頻率,將它加到防火墻中去直接屏蔽。

步驟分析
1、監(jiān)聽日志
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]
只要實(shí)時(shí)監(jiān)聽日志文件,并從這個(gè)格式中提取出我們需要的 配置的TCP轉(zhuǎn)發(fā)名(ZNGW)和請(qǐng)求者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、根據(jù)配置規(guī)則決定是否限制
可以指定一張規(guī)則表,什么地方的ip可以訪問,什么地方的ip不能訪問,什么地方的ip訪問有頻率限制等
# 規(guī)則訪問
rules:
# 按數(shù)組順序來,匹配到了就按匹配的規(guī)則執(zhí)行,跳過此規(guī)則。
# 地區(qū)以 http://ip-api.com/json/?lang=zh-CN 查詢的結(jié)果為準(zhǔn)
# 端口: -1 所有端口
# time: 時(shí)間區(qū)間
# count: 訪問次數(shù),-1不限,0限制。其他為 time時(shí)間內(nèi)訪問count次,超出頻率就限制
- # 中國上海IP允許
port: -1
country: 中國
regionName: 上海
city: 上海
time: 1
count: -1
- # 中國地區(qū)IP跳過地域判斷
port: -1
country: 中國
regionName:
city:
time: 600
count: 3
- # 其他地區(qū)IP禁止
port: -1
country:
regionName:
city:
time: 1
count: 0
4、加入防火墻
linux有iptables和firewall二種防火墻,win中有Microsoft Defender,這些都是可以通過命令行來添加拒絕通過的規(guī)則的。
- 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
大致思路是這樣,然后抽空花了點(diǎn)時(shí)間,用Go寫了一個(gè)這樣的小工具。完整代碼:https://github.com/zngw/frptables
測(cè)試
目前已經(jīng)在frp服務(wù)器上運(yùn)行1天了,效果還是有的,可以明顯看日志文件鏈接數(shù)變少了,也添加了幾個(gè)明顯的攻擊者IP到防火墻中
