1. frp內(nèi)網(wǎng)穿透工具

        聯(lián)合創(chuàng)作 · 2023-09-29 08:02

        內(nèi)網(wǎng)穿透,也即 NAT 穿透,進(jìn)行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數(shù)據(jù)包不被 NAT 設(shè)備屏蔽而正確路由到內(nèi)網(wǎng)主機(jī)。下面就相互通信的主機(jī)在網(wǎng)絡(luò)中與 NAT 設(shè)備的相對位置介紹內(nèi)網(wǎng)穿透方法。目前較為成熟穩(wěn)定的是花生殼和神卓互聯(lián),花生殼的技術(shù)是PHtunnel,神卓互聯(lián)使用的是WanGooe tunnel,和nginx架構(gòu)一樣都是采用C語言編寫,性能上是比較優(yōu)異的,適合很多嵌入式的設(shè)備搭載使用,而frp采用的是Go語言。

        UDP 內(nèi)網(wǎng)穿透的實質(zhì)是利用路由器上的NAT 系統(tǒng)。NAT 是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術(shù),它被廣泛應(yīng)用于各種類型 Internet 接入方式和各種類型的網(wǎng)絡(luò)中。NAT可以完成重用地址,并且對于內(nèi)部的網(wǎng)絡(luò)結(jié)構(gòu)可以實現(xiàn)對外隱蔽。

        網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)機(jī)制的問題在于,NAT設(shè)備自動屏蔽了非內(nèi)網(wǎng)主機(jī)主動發(fā)起的連接,也就是說,從外網(wǎng)發(fā)往內(nèi)網(wǎng)的數(shù)據(jù)包將被NAT設(shè)備丟棄,這使得位于不同NAT設(shè)備之后的主機(jī)之間無法直接交換信息。這一方面保護(hù)了內(nèi)網(wǎng)主機(jī)免于來自外部網(wǎng)絡(luò)的攻擊,另一方面也為P2P通信帶來了一定困難。Internet上的NAT設(shè)備大多是地址限制圓錐形NAT或端口限制圓錐形 NAT,外部主機(jī)要與內(nèi)網(wǎng)主機(jī)相互通信,必須由內(nèi)網(wǎng)主機(jī)主動發(fā)起連接,使 NAT設(shè)備產(chǎn)生一個映射條目,這就有必要研究一下內(nèi)網(wǎng)穿透技術(shù)。

         

        使用示例

        根據(jù)對應(yīng)的操作系統(tǒng)及架構(gòu),從 Release 頁面下載最新版本的程序。

        frpsfrps.ini 放到具有公網(wǎng) IP 的機(jī)器上。

        frpcfrpc.ini 放到處于內(nèi)網(wǎng)環(huán)境的機(jī)器上。

        通過訪問公司內(nèi)網(wǎng)機(jī)器

        1. 修改 frps.ini 文件,這里使用了最簡化的配置:
        # frps.ini
        [common]
        bind_port = 1000
        
        1. 啟動 frps:

        ./frps -c ./frps.ini

        1. 修改 frpc.ini 文件,假設(shè) frps 所在服務(wù)器的公網(wǎng) IP 為 x.x.x.x;
        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 1000
        
        [ssh]
        type = tcp
        local_ip = 127.0.0.1
        local_port = 22
        remote_port = 6000
        
        1. 啟動 frpc:

        ./frpc -c ./frpc.ini

        1. 通過 ssh 訪問內(nèi)網(wǎng)機(jī)器,假設(shè)用戶名為 test:

        ssh -oPort=6000 [email protected]

         

        # frps.ini
        [common]
        bind_port = 1000
        vhost_http_port = 8080
        
        1. 啟動 frps;

        ./frps -c ./frps.ini

        1. 修改 frpc.ini 文件,假設(shè) frps 所在的服務(wù)器的 IP 為 x.x.x.x,local_port 為本地機(jī)器上 web 服務(wù)對應(yīng)的端口, 綁定自定義域名 www.yourdomain.com:
        # frpc.ini
        [common]
        server_addr = x.x.x.x
        server_port = 1000
        
        [web]
        type = http
        local_port = 80
        custom_domains = www.yourdomain.com
        
        1. 啟動 frpc:

        ./frpc -c ./frpc.ini

        1. www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果服務(wù)器已經(jīng)有對應(yīng)的域名,也可以將 CNAME 記錄解析到服務(wù)器原先的域名。

        2. 通過瀏覽器訪問 http://www.yourdomain.com:8080 即可訪問到處于內(nèi)網(wǎng)機(jī)器上的 web 服務(wù)。

        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 7000
        
        [test_static_file]
        type = tcp
        remote_port = 6000
        plugin = static_file
        # 要對外暴露的文件目錄
        plugin_local_path = /tmp/file
        # 訪問 url 中會被去除的前綴,保留的內(nèi)容即為要訪問的文件路徑
        plugin_strip_prefix = static
        plugin_http_user = abc
        plugin_http_passwd = abc
        
        1. 通過瀏覽器訪問 http://x.x.x.x:6000/static/ 來查看位于 /tmp/file 目錄下的文件,會要求輸入已設(shè)置好的用戶名和密碼。

        為本地 HTTP 服務(wù)啟用 HTTPS

        通過 https2http 插件可以讓本地 HTTP 服務(wù)轉(zhuǎn)換成 HTTPS 服務(wù)對外提供。

        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 6000
        
        [test_htts2http]
        type = https
        custom_domains = test.yourdomain.com
        
        plugin = https2http
        plugin_local_addr = 127.0.0.1:80
        
        # HTTPS 證書相關(guān)的配置
        plugin_crt_path = ./server.crt
        plugin_key_path = ./server.key
        plugin_host_header_rewrite = 127.0.0.1
        
        1. 通過瀏覽器訪問 https://test.yourdomain.com 即可。

         

        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 6000
        
        [secret_ssh]
        type = stcp
        # 只有 sk 一致的用戶才能訪問到此服務(wù)
        sk = abcdefg
        local_ip = 127.0.0.1
        local_port = 22
        
        1. 在要訪問這個服務(wù)的機(jī)器上啟動另外一個 frpc,配置如下:
        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 6000
        
        [secret_ssh_visitor]
        type = stcp
        # stcp 的訪問者
        role = visitor
        # 要訪問的 stcp 代理的名字
        server_name = secret_ssh
        sk = abcdefg
        # 綁定本地端口用于訪問 ssh 服務(wù)
        bind_addr = 127.0.0.1
        bind_port = 6000
        
        1. 通過 ssh 訪問內(nèi)網(wǎng)機(jī)器,假設(shè)用戶名為 test:

        ssh -oPort=6000 [email protected]

         

        網(wǎng)絡(luò)安全的屏障

        一個防火墻(作為阻塞點、控制點)能極大地提高一個內(nèi)部網(wǎng)絡(luò)的安全性,并通過過濾不安全的服務(wù)而降低風(fēng)險。由于只有經(jīng)過精心選擇的應(yīng)用協(xié)議才能通過防火墻,所以網(wǎng)絡(luò)環(huán)境變得更安全。如防火墻可以禁止諸如眾所周知的不安全的NFS協(xié)議進(jìn)出受保護(hù)網(wǎng)絡(luò),這樣外部的攻擊者就不可能利用這些脆弱的協(xié)議來攻擊內(nèi)部網(wǎng)絡(luò)。防火墻同時可以保護(hù)網(wǎng)絡(luò)免受基于路由的攻擊,如IP選項中的源路由攻擊和ICMP重定向中的重定向路徑。防火墻應(yīng)該可以拒絕所有以上類型攻擊的報文并通知防火墻管理員。

         

        強(qiáng)化網(wǎng)絡(luò)安全策略

        通過以防火墻為中心的安全方案配置,能將所有安全軟件(如口令加密、身份認(rèn)證、審計等)配置在防火墻上。與將網(wǎng)絡(luò)安全問題分散到各個主機(jī)上相比,防火墻的集中安全管理更經(jīng)濟(jì)。例如在網(wǎng)絡(luò)訪問時,一次一密口令系統(tǒng)和其它的身份認(rèn)證系統(tǒng)完全可以不必分散在各個主機(jī)上,而集中在防火墻一身上。
         
        # frps.ini
        [common]
        server_addr = x.x.x.x
        server_port = 6000
        
        [secret_ssh_visitor]
        type = stcp
        # stcp 的訪問者
        role = visitor
        # 要訪問的 stcp 代理的名字
        server_name = secret_ssh
        sk = abcdefg
        # 綁定本地端口用于訪問 ssh 服務(wù)
        bind_addr = 127.0.0.1
        bind_port = 6000
        

         

        監(jiān)控審計

        如果所有的訪問都經(jīng)過防火墻,那么,防火墻就能記錄下這些訪問并作出日志記錄,同時也能提供網(wǎng)絡(luò)使用情況的統(tǒng)計數(shù)據(jù)。當(dāng)發(fā)生可疑動作時,防火墻能進(jìn)行適當(dāng)?shù)?a target="_blank">報警,并提供網(wǎng)絡(luò)是否受到監(jiān)測和攻擊的詳細(xì)信息。另外,收集一個網(wǎng)絡(luò)的使用和誤用情況也是非常重要的。首先的理由是可以清楚防火墻是否能夠抵擋攻擊者的探測和攻擊,并且清楚防火墻的控制是否充足。而網(wǎng)絡(luò)使用統(tǒng)計對網(wǎng)絡(luò)需求分析和威脅分析等而言也是非常重要的。
         

        防止內(nèi)部信息的外泄

        通過利用防火墻對內(nèi)部網(wǎng)絡(luò)的劃分,可實現(xiàn)內(nèi)部網(wǎng)重點網(wǎng)段的隔離,從而限制了局部重點或敏感網(wǎng)絡(luò)安全問題對全局網(wǎng)絡(luò)造成的影響。再者,隱私是內(nèi)部網(wǎng)絡(luò)非常關(guān)心的問題,一個內(nèi)部網(wǎng)絡(luò)中不引人注意的細(xì)節(jié)可能包含了有關(guān)安全的線索而引起外部攻擊者的興趣,甚至因此而暴漏了內(nèi)部網(wǎng)絡(luò)的某些安全漏洞。使用防火墻就可以隱蔽那些透漏內(nèi)部細(xì)節(jié)如Finger,DNS等服務(wù)。Finger顯示了主機(jī)的所有用戶的注冊名、真名,最后登錄時間和使用shell類型等。但是Finger顯示的信息非常容易被攻擊者所獲悉。攻擊者可以知道一個系統(tǒng)使用的頻繁程度,這個系統(tǒng)是否有用戶正在連線上網(wǎng),這個系統(tǒng)是否在被攻擊時引起注意等等。防火墻可以同樣阻塞有關(guān)內(nèi)部網(wǎng)絡(luò)中的DNS信息,這樣一臺主機(jī)域名和IP地址就不會被外界所了解。除了安全作用,防火墻還支持具有Internet服務(wù)性的企業(yè)內(nèi)部網(wǎng)絡(luò)技術(shù)體系VPN(虛擬專用網(wǎng))。

        點對點內(nèi)網(wǎng)穿透

        frp 提供了一種新的代理類型 xtcp 用于應(yīng)對在希望傳輸大量數(shù)據(jù)且流量不經(jīng)過服務(wù)器的場景。

        使用方式同 stcp 類似,需要在兩邊都部署上 frpc 用于建立直接的連接。

        目前處于開發(fā)的初級階段,并不能穿透所有類型的 NAT 設(shè)備,所以穿透成功率較低。穿透失敗時可以嘗試 stcp 的方式。

        1. frps 除正常配置外需要額外配置一個 udp 端口用于支持該類型的客戶端:
        bind_udp_port = 7001
        
        1. 啟動 frpc,轉(zhuǎn)發(fā)內(nèi)網(wǎng)的 ssh 服務(wù),配置如下,不需要指定遠(yuǎn)程端口:
        # frpc.ini
        [common]
        server_addr = x.x.x.x
        server_port = 7000
        
        [p2p_ssh]
        type = xtcp
        # 只有 sk 一致的用戶才能訪問到此服務(wù)
        sk = abcdefg
        local_ip = 127.0.0.1
        local_port = 22
        
        1. 在要訪問這個服務(wù)的機(jī)器上啟動另外一個 frpc,配置如下:
        1、記錄計算機(jī)網(wǎng)絡(luò)之中的數(shù)據(jù)信息
        數(shù)據(jù)信息對于計算機(jī)網(wǎng)絡(luò)建設(shè)工作有著積極的促進(jìn)作用,同時其對于計算機(jī)網(wǎng)絡(luò)安全也有著一定程度上的影響。通過防火墻技術(shù)能夠收集計算機(jī)網(wǎng)絡(luò)在運行的過程當(dāng)中的數(shù)據(jù)傳輸、信息訪問等多方面的內(nèi)容,同時對收集的信息進(jìn)行分類分組,借此找出其中存在安全隱患的數(shù)據(jù)信息,采取針對性的措施進(jìn)行解決,有效防止這些數(shù)據(jù)信息影響到計算機(jī)網(wǎng)絡(luò)的安全。除此之外,工作人員在對防火墻之中記錄的數(shù)據(jù)信息進(jìn)行總結(jié)之后,能夠明確不同類型的異常數(shù)據(jù)信息的特點,借此能夠有效提高計算機(jī)網(wǎng)絡(luò)風(fēng)險防控工作的效率和質(zhì)量。 
        2、防止工作人員訪問存在安全隱患的網(wǎng)站
        計算機(jī)網(wǎng)絡(luò)安全問題之中有相當(dāng)一部分是由工作人員進(jìn)入了存在安全隱患的網(wǎng)站所導(dǎo)致的。通過應(yīng)用防火墻技術(shù)能夠?qū)ぷ魅藛T的操作進(jìn)行實時監(jiān)控,一旦發(fā)現(xiàn)工作人員即將進(jìn)入存在安全隱患的網(wǎng)站,防火墻就會立刻發(fā)出警報,借此有效防止工作人員誤入存在安全隱患的網(wǎng)站,有效提高訪問工作的安全性。 [4] 
        3、控制不安全服務(wù)
        計算機(jī)網(wǎng)絡(luò)在運行的過程當(dāng)中會出現(xiàn)許多不安全服務(wù),這些不安全服務(wù)會嚴(yán)重影響到計算機(jī)網(wǎng)絡(luò)的安全。通過應(yīng)用防火墻技術(shù)能夠有效降低工作人員的實際操作風(fēng)險,其能夠?qū)⒉话踩?wù)有效攔截下來,有效防止非法攻擊對計算機(jī)網(wǎng)絡(luò)安全造成影響。此外,通過防火墻技術(shù)還能夠?qū)崿F(xiàn)對計算機(jī)網(wǎng)絡(luò)之中的各項工作進(jìn)行實施監(jiān)控,借此使得計算機(jī)用戶的各項工作能夠在一個安全可靠的環(huán)境之下進(jìn)行,有效防止因為計算機(jī)網(wǎng)絡(luò)問題給用戶帶來經(jīng)濟(jì)損失。 
        # frpc.ini
        [common]
        server_addr = x.x.x.x
        server_port = 7000
        
        [p2p_ssh_visitor]
        type = xtcp
        # xtcp 的訪問者
        role = visitor
        # 要訪問的 xtcp 代理的名字
        server_name = p2p_ssh
        sk = abcdefg
        # 綁定本地端口用于訪問 ssh 服務(wù)
        bind_addr = 127.0.0.1
        bind_port = 6000
        
        1. 通過 ssh 訪問內(nèi)網(wǎng)機(jī)器,假設(shè)用戶名為 test:

        ssh -oPort=6000 [email protected]

        功能說明

        配置文件

        由于 frp 目前支持的功能和配置項較多,未在文檔中列出的功能可以從完整的示例配置文件中發(fā)現(xiàn)。

        frps 完整配置文件

        frpc 完整配置文件

         

        export FRP_SERVER_ADDR="x.x.x.x"
        export FRP_SSH_REMOTE_PORT="6000"
        ./frpc -c ./frpc.ini
        

        frpc 會自動使用環(huán)境變量渲染配置文件模版,所有環(huán)境變量需要以 .Envs 為前綴。

        數(shù)據(jù)必經(jīng)之地

        內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)之間的所有網(wǎng)絡(luò)數(shù)據(jù)流都必須經(jīng)過防火墻。這是防火墻所處網(wǎng)絡(luò)位置特性,同時也是一個前提。因為只有當(dāng)防火墻是內(nèi)、外部網(wǎng)絡(luò)之間通信的通道,才可以全面、有效地保護(hù)企業(yè)網(wǎng)部網(wǎng)絡(luò)不受侵害。根據(jù)美國國家安全局制定的《信息保障技術(shù)框架》,防火墻適用于用戶網(wǎng)絡(luò)系統(tǒng)的邊界,屬于用戶網(wǎng)絡(luò)邊界的安全保護(hù)設(shè)備。所謂網(wǎng)絡(luò)邊界即是采用不同安全策略的兩個網(wǎng)絡(luò)連接處,比如用戶網(wǎng)絡(luò)和互聯(lián)網(wǎng)之間連接、和其它業(yè)務(wù)往來單位的網(wǎng)絡(luò)連接、用戶內(nèi)部網(wǎng)絡(luò)不同部門之間的連接等。防火墻的目的就是在網(wǎng)絡(luò)連接之間建立一個安全控制點,通過允許、拒絕或重新定向經(jīng)過防火墻的數(shù)據(jù)流,實現(xiàn)對進(jìn)、出內(nèi)部網(wǎng)絡(luò)的服務(wù)和訪問的審計和控制。
        典型的防火墻體系網(wǎng)絡(luò)結(jié)構(gòu)一端連接企事業(yè)單位內(nèi)部的局域網(wǎng),而另一端則連接著互聯(lián)網(wǎng)。所有的內(nèi)、外部網(wǎng)絡(luò)之間的通信都要經(jīng)過防火墻,只有符合安全策略的數(shù)據(jù)流才能通過防火墻。
         

        網(wǎng)絡(luò)流量的合法性

        防火墻最基本的功能是確保網(wǎng)絡(luò)流量的合法性,并在此前提下將網(wǎng)絡(luò)的流量快速的從一條鏈路轉(zhuǎn)發(fā)到另外的鏈路上去。從最早的防火墻模型開始談起,原始的防火墻是一臺“雙穴主機(jī)”,即具備兩個網(wǎng)絡(luò)接口,同時擁有兩個網(wǎng)絡(luò)層地址。防火墻將網(wǎng)絡(luò)上的流量通過相應(yīng)的網(wǎng)絡(luò)接口接收上來,按照OSI協(xié)議棧的七層結(jié)構(gòu)順序上傳,在適當(dāng)?shù)膮f(xié)議層進(jìn)行訪問規(guī)則和安全審查,然后將符合通過條件的報文從相應(yīng)的網(wǎng)絡(luò)接口送出,而對于那些不符合通過條件的報文則予以阻斷。因此,從這個角度上來說,防火墻是一個類似于橋接路由器的、多端口的(網(wǎng)絡(luò)接口>=2)轉(zhuǎn)發(fā)設(shè)備,它跨接于多個分離的物理網(wǎng)段之間,并在報文轉(zhuǎn)發(fā)過程之中完成對報文的審查工作。
         

        抗攻擊免疫力

        防火墻自身應(yīng)具有非常強(qiáng)的抗攻擊免疫力:這是防火墻之所以能擔(dān)當(dāng)企業(yè)內(nèi)部網(wǎng)絡(luò)安全防護(hù)重任的先決條件。防火墻處于網(wǎng)絡(luò)邊緣,它就像一個邊界衛(wèi)士一樣,每時每刻都要面對黑客的入侵,這樣就要求防火墻自身要具有非常強(qiáng)的抗擊入侵本領(lǐng)。它之所以具有這么強(qiáng)的本領(lǐng)防火墻操作系統(tǒng)本身是關(guān)鍵,只有自身具有完整信任關(guān)系的操作系統(tǒng)才可以談?wù)撓到y(tǒng)的安全性。其次就是防火墻自身具有非常低的服務(wù)功能,除了專門的防火墻嵌入系統(tǒng)外,再沒有其它應(yīng)用程序在防火墻上運行。當(dāng)然這些安全性也只能說是相對的。國內(nèi)的防火墻幾乎被國外的品牌占據(jù)了一半的市場,國外品牌的優(yōu)勢主要是在技術(shù)和知名度上比國內(nèi)產(chǎn)品高。而國內(nèi)防火墻廠商對國內(nèi)用戶了解更加透徹,價格上也更具有優(yōu)勢。防火墻產(chǎn)品中,國外主流廠商為思科(Cisco)、CheckPoint、NetScreen等,國內(nèi)主流廠商為東軟、天融信、聯(lián)想、方正等,它們都提供不同級別的防火墻產(chǎn)品。

        frp 支持根據(jù)請求的 URL 路徑路由轉(zhuǎn)發(fā)到不同的后端服務(wù)。

        通過配置文件中的 locations 字段指定一個或多個 proxy 能夠匹配的 URL 前綴(目前僅支持最大前綴匹配,之后會考慮正則匹配)。例如指定 locations = /news,則所有 URL 以 /news 開頭的請求都會被轉(zhuǎn)發(fā)到這個服務(wù)。

        # frpc.ini
        [web01]
        type = http
        local_port = 80
        custom_domains = web.yourdomain.com
        locations = /
        
        [web02]
        type = http
        local_port = 81
        custom_domains = web.yourdomain.com
        locations = /news,/about
        

        按照上述的示例配置后,web.yourdomain.com 這個域名下所有以 /news 以及 /about 作為前綴的 URL 請求都會被轉(zhuǎn)發(fā)到 web02,其余的請求會被轉(zhuǎn)發(fā)到 web01。

        通過代理連接 frp

        在只能通過代理訪問外網(wǎng)的環(huán)境內(nèi),frpc 支持通過 HTTP PROXY 和 frps 進(jìn)行通信。

        可以通過設(shè)置 HTTP_PROXY 系統(tǒng)環(huán)境變量或者通過在 frpc 的配置文件中設(shè)置 http_proxy 參數(shù)來使用此功能。

        僅在 protocol = tcp 時生效。

        # frpc.ini
        [common]
        server_addr = x.x.x.x
        server_port = 7000
        http_proxy = http://user:[email protected]:8080
        

        端口映射

        在 frpc 的配置文件中可以指定映射多個端口,目前只支持 tcp 和 udp 的類型。

        這一功能通過 range: 段落標(biāo)記來實現(xiàn),客戶端會解析這個標(biāo)記中的配置,將其拆分成多個 proxy,每一個 proxy 以數(shù)字為后綴命名。

        例如要映射本地 6000-6005, 6007 這6個端口,主要配置如下:

        # frpc.ini
        [range:test_tcp]
        type = tcp
        local_ip = 127.0.0.1
        local_port = 6000-6006,6007
        remote_port = 6000-6006,6007
        

        實際連接成功后會創(chuàng)建 8 個 proxy,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7。

        插件

        默認(rèn)情況下,frpc 只會轉(zhuǎn)發(fā)請求到本地 tcp 或 udp 端口。

        插件模式是為了在客戶端提供更加豐富的功能,目前內(nèi)置的插件有 unix_domain_socket、http_proxy、socks5、static_file。具體使用方式請查看使用示例。

        通過 plugin 指定需要使用的插件,插件的配置參數(shù)都以 plugin_ 開頭。使用插件后 local_iplocal_port 不再需要配置。

        瀏覽 73
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報
          
          

            1. 妞干网这里只有精品 | 特黄特色网站 | 色哟哟精品 | 伊人操操| 高潮孕妇videosexfreexxxx |