FRP指定訪問者:安全地暴露內網服務

以前的教程介紹的frp內網穿透都是用tcp模式,可是tcp模式是直接把端口映射到公網IP上,很容易被掃描爆破,仍是存在必定的風險。咱們可使用frp提供的stcp模式來避免公開暴露端口,要求訪問者運行一個frpc做爲身份認證和流量轉發,把訪問者的本地端口綁定到內網frpc服務上。再也不公開映射內網frpc端口。
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務安全

frps配置
做爲中間傳輸的服務器端的frps配置不變,參考以前的文章,若是想自定義其餘端口,注意兩端的frpc中的"server_addr"、"server_port"參數要一致。frps用到的端口要在防火牆或者寶塔那裏放行。服務器

frps.ini
[common]
bind_port = 7100
token=12310086Ntcp

dashboard_port = 7501
dashboard_user = admin
dashboard_pwd = admin123
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務日誌

客戶端
stcp模式的演示,咱們以windwos的遠程桌面爲例,再也不直接把內網的3389端口映射到公網IP的端口上,而是經過stcp模式指定驗明訪問者分身,要求訪問者也要運行一個frpc 做爲身份校驗和流量轉發,讓訪問者把訪問本地端口的請求轉發到內網機器上。server

frpc兩端分爲外部的"控制端"和處於內網中的"受控端"。教程

內網中的受控端
編輯 fcpc.ini文件。服務[secret_rdp]之類的服務名能夠自定義,見名知意便可。token

[common]
server_addr = 服務器ip
server_port = 7100
token=12310086Nip

[secret_rdp]
type = stcp
sk = 58iD9tfjPIHQ0dWO
local_ip = 127.0.0.1
local_port = 3389
frpc.exe -c frpc.ini
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務rem

外網的控制端
編輯 fcpc.ini文件,服務[secret_rdp_visitor]之類的服務名能夠自定義,見名知意便可。rpc

[common]
server_addr = 服務器ip
server_port = 7100
token=12310086N

[secret_rdp_visitor]
type = stcp
role = visitor
sk = 58iD9tfjPIHQ0dWO
server_name = secret_rdp
bind_addr = 127.0.0.1
bind_port = 30009
frpc.exe -c frpc.ini
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務

牽線成功
兩端都顯示鏈接成功了,frp的在線面板裏也看到stcp中多了"secret_rdp"一個鏈接記錄。
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務

控制端啓動鏈接成功時候也會看到frps出現鏈接成功的日誌。

FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務

鏈接
咱們在外網的控制端,打開遠程桌面,輸入 "127.0.0.1:30009",就彈出來鏈接成功的登陸界面了。
FRP指定訪問者:安全地暴露內網服務FRP指定訪問者:安全地暴露內網服務

原理
原理兩端的frpc啓用的stcp模式,就是要求frps把一端訪問本地端口的請求轉發到內網frpc上。一端必須運行訪客模式的frpc代表身份纔會被frps接納再轉發。

受控端
受控端中frpc讀取配置文件:

「[secret_rdp]」服務中,以stcp模式,把受控端本地的3389轉發到服務器的frps上。
"sk"是stcp服務的密鑰,兩端中的"sk"不匹配,不容許鏈接。
受控端stcp模式以服務名的形式匹配鏈接,不須要映射到公網IP的端口上,也再也不須要remote_port。
控制端
控制端中的配置:

[secret_rdp_visitor]服務中"role=visitor"是指定本機的服務爲"訪問者"的stcp模式。
"sk"密鑰。
控制端中的「server_name」是指定要鏈接的受控端中的服務名,服務名必須一致。
控制端中的"bind_addr"必須是"127.0.0.1"。
"bind_addr"、"bind_port"這兩個參數是指本地端口。指定本地frpc轉發要經過frps和受控端鏈接的本地端口。
流程
frps啓動,等着兩端frpc的stcp轉發配置。
受控端frpc啓動,讀取配置文件:服務名[secret_rdp]以stcp模式,將本地的3389端口轉發到frps上。
控制端frpc讀取配置文件和frps鏈接。
控制端frpc的配置指定"sk"密鑰和受控端的服務名,要frps把控制端本地30009端口和受控端的[secret_rdp]服務綁定上。
控制端訪問本地30009端口,請求被控制端的frpc轉發到frps上,frps再將請求轉發到受控端的[secret_rdp]服務上。
受控端[secret_rdp]服務裏也指明瞭受控端哪些端口來接收響應處理被轉發請求。
總結
流程就是frpc指定使用stcp訪問,要求校驗正確身份和服務名後再轉發請求,把訪問者的本地端口綁定到內網frpc服務上。再也不直接把受控端映射到公網端口上,也避免由於公開被掃描爆破的風險,安全的暴露內網服務。

表達水平有限,多讀幾遍上面的步驟,就是把訪問者的本地端口綁定到內網frpc服務上,這一套下來比較繞,若是沒看懂,照着教程操做一次,理解了就豁然開朗了。

同時也能夠着手實踐安全的暴露其餘的內網服務,好比MySQL:指定控制端訪問本地的33306端口的響應由內網的MySQL 3306響應。

相關文章
相關標籤/搜索