端口转发映射详解、代理反向代理深入认知
端口轉發&&端口映射
端口轉發和端口映射都是為了解決內網主機的端口無法在外部直接訪問而衍生出來的技術,通過中間服務器進行中轉,將內部的端口映射到公網IP上或者將內部端口轉發到外部服務器,供用戶或者自己來使用
端口轉發
概念:端口轉發(Port forwarding),有時被叫做隧道,是安全殼(SSH) 為網絡安全通信使用的一種方法。
其他網域其他網域例子:在一個特定網域中,是沒有辦法直接訪問其他網域的。但是我們可以通過路由器的NAT方式訪問q。假如我們內網現在有100臺主機,那么我們現在都是通過路由器的這一個公網IP和q通信的。那么,當互聯網上的消息發送回來時,就要我們的ip地址和路由器的端口進行綁定,在路由器中就會有一個內網ip和路由器端口對應的一張表。當路由器的10000端口收到消息時,就知道把消息發送給他,而當20000端口收到消息時,就知道把消息發送給你。這就是端口轉發,其轉發一個端口收到的流量,給另一個主機。
比如我們拿到一臺內網服務器A的權限,通過掃描發現了同內網的另一臺服務器B且開了80端口,我們該如何使用瀏覽器訪問它呢?分析如下
從上圖中可以看到,我們已經與A建立了通道,我們可以在A上上傳任意文件,執行任意的系統命令,我們如何能夠訪問B的80端口?假設A是在公網上,有公網IP,我們可以訪問它的任意端口。
1、直接在A上執行curl命令訪問B的80端口(但不方便測試B的80端口的漏洞和使用)
curl命令是一個利用URL規則工作的文件傳輸工具,支持文件的上傳和下載。curl支持包括HTTP、HTTPS、ftp等眾多協議,還支持POST、cookies等協議,小巧好用。
2、在A上開啟一個 socks 5代理,我們使用瀏覽器設置好代理,將我們的瀏覽器代理到目標內網,然后訪問B的80端口。
3、在A上執行端口轉發,將B的80端口轉發到A的8080,然后我們直接用瀏覽器訪問A的8080端口即可,這個原理就是端口轉發。
總結一下,端口轉發就是將一個端口,這個端口可以本機的端口也可以是本機可以訪問到的任意主機的端口都可以轉發到任意一臺可以訪問到的IP上,通常這個IP是公網IP,方便我們使用。
端口映射
概念:端口映射就是將內網中的主機的一個端口映射到其他網域主機的一個端口,提供相應的服務。當用戶訪問其他網域IP的這個端口時,服務器自動將請求映射到對應局域網內部的機器上。
其他網域例子:我們在內網中有一臺Web服務器,但是其他網域中的用戶是沒有辦法直接訪問該服務器。所以在路由器上設置一個端口映射,只要q用戶訪問路由器ip的80端口,那么路由器會把自動把流量轉到內網Web服務器的80端口上。并且,在路由器上還存在一個Session,當內網服務器返回數據給路由器時,路由器能準確的將消息發送給外網請求用戶的主機。在這過程中,路由器充當了一個反向代理的作用,他保護了內網中主機的安全。
端口映射就是映射端口,就是將一個內網端口映射到公網上的某個端口,我們來看一個實例,我自己的電腦是在內網中,沒有公網IP,但是我想提供一個端口供其他人使用,怎么辦呢?我們來看一個圖:
A和B在不同的內網,各自有自己的內網IP,但是互相無法直接訪問,這時就需要一個中間服務器,要A和B都可以訪問然后作為中轉服務器,實現上面的目標,這個中間服務器需要有一個公網IP,如圖:
上圖的C就是有公網IP的中間服務器,我們可以將A的80端口映射到C的80端口,這時,B就可以訪問C的80端口,也就相當于訪問A的80端口了,這里其實核心原理也是端口轉發,只不過是將本機的端口轉發到遠程的某個端口。
有的路由器也有端口映射與端口轉發功能。端口映射與端口轉發實現的功能類似,但又不完全一樣。端口映射是將外網域的一個端口完全映射給內網一個地址的指定端口,而端口轉發是將發往外網的一個端口的通信完全轉發給內網一個地址的指定端口
端口轉發和端口映射區別:
端口轉發:轉發的重點在“轉”上面。送快遞的過來,把所有快遞都交給門口保安,保安再根據每件快遞上的收件人來分發。
端口映射:就是在大門口給每個人裝個柜子,送快遞的直接按收件人名字,把快遞放到對應的柜子里面。(外網訪問本地服務器)
代理和反向代理
概念:代理也被叫做網絡代理,是一種比較特殊的網絡服務,允許一個終端(通常指客戶端)通過這個服務與另一個終端(通常指服務器端)進行非直接的連接。例如:一些網關、路由器等網絡設備都具備網絡代理的功能。代理服務有利于保障網絡終端的隱私或者安全,可以在一定程度上阻止網絡攻擊(因為通過代理,可以隱藏真正的服務器端/客戶端)
代理服務器
左邊和右邊的電腦在通訊時候,需要經過中間的電腦中轉,而中間的那部電腦就是代理服務器。
代理請求過程
客戶端首先根據代理服務器所使用的代理協議,與代理服務器創建連接,接著按照協議請求對目標服務器創建連接、或者獲得目標服務器的指定資源(如:文件)。
代理協議
此處的協議指的是網絡傳輸協議。
主要是兩種:
- Socks
- HTTP
網絡傳輸協議在本篇就不做過多介紹。
正向代理
通常我們說的代理,都是指的正向代理。
代理服務器可以由客戶端提供,也可以由服務器端提供。當客戶端主動使用代理服務器時,此時的代理叫正向代理。比如:一些網絡代理工具(加速器/VPN…)
場景:我需要訪問一個服務器C,但是由于某些原因我無法訪問到它,可是我就是控制不住自己,這個時候,服務器B告訴我,來吧,你想要什么,我來幫你傳話,于是,我把自己的請求給了B,B接收到之后,幫我轉給了C,(因為B和C之間的線路是暢通的),C把返回結果給了B,B非常友好地把結果又還給了我,我覺得太好用了簡直,于是我周圍的小伙伴都開始將請求發給B,通過B的轉發,來獲取C的信息,這個時候對于服務器C,C只知道是B發了請求過來,不知道我們這群小伙伴的存在,所以這就是代理。
正向代理完整流程
正向代理時,由客戶端發送對某一個目標服務器的請求,代理服務器在中間將請求轉發給該目標服務器,目標服務器將結果返回給代理服務器,代理服務器再將結果返回給客戶端。使用正向代理時,客戶端是需要配置代理服務的地址、端口、賬號密碼(如有)等才可使用的。
通過上圖可以看到,客戶端并沒有直接與服務器相連。正向代理隱藏了真實的客戶端地址。可以很好地保護客戶端的安全性。
正向代理的適用場景
- 訪問被禁止的資源(讓客戶端訪問原本不能訪問的服務器。可能是由于路由的原因,或者策略配置的原因,客戶端不能直接訪問某些服務器。為了訪問這些服務器,可通過代理服務器來訪問)
-
- 再比如客戶端IP被服務器封禁,可以繞過
- 也可以突破網站的區域限制
-
隱藏客戶端的地址(對于被請求的服務器而言,代理服務器代表了客戶端,所以在服務器或者網絡拓撲上,看不到原始客戶端)
-
進行客戶訪問控制
-
- 可以集中部署策略,控制客戶端的訪問行為(訪問認證等)
- 記錄用戶訪問記錄(上網行為管理)
- 內部資源的控制(公司、教育網等)
-
加速訪問資源
-
- 使用緩沖特性減少網絡使用率(代理服務器設置一個較大的緩沖區,當有外界的信息通過時,同時也將其保存到緩沖區中,當其他用戶再訪問相同的信息時, 則直接由緩沖區中取出信息,傳給用戶,以提高訪問速度。)
-
過濾內容(可以通過代理服務器統一過濾一些危險的指令/統一加密一些內容、防御代理服務器兩端的一些攻擊性行為)
反向代理
場景:我向B發送了一個請求,B對我的請求進行分析,發現我請求的是文章詳情,于是B將請求轉發給處理文章詳情的應用服務器C1,我又向B發了一個請求,B解析之后,發現請求的是我的聲望值等個人信息,于是B將請求轉發給專門處理個人信息的應用服務器C2,就這樣,我不在乎我要請求的數據是在C1,C2,還是C3上,我只需要發送請求到B就可以了,B會對我的請求進行解析,決定轉發請求給Cx來處理,并得到處理結果后返回給我。
概括一下就是,一個請求對于客戶端是透明的,我不知道我的請求具體由誰處理,我將請求都發給B,至于B發給Cx,隨便。
代理與反向代理在實際工程中應用很廣泛,反向代理是許多大公司業務處理過程中的經典方式,前端由一個nignx負責根據用戶的請求信息轉發請求給后端相應的應用服務器(這個過程中也可以加入負載均衡)。
**反向代理:**服務器根據客戶端的請求,從其關系的一組或多組后端服務器(如Web服務器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會得知代理服務器的IP地址,而不知道在代理服務器后面的服務器集群的存在。
反向代理整個流程:由客戶端發起對代理服務器的請求,代理服務器在中間將請求轉發給某一個服務器,服務器將結果返回給代理服務器,代理服務器再將結果返回給客戶端。
反向代理的適用場景
-
負載均衡
-
- 如果服務器集群中有負荷較高者,反向代理通過URL重寫,根據連線請求從負荷較低者獲取與所需相同的資源或備援。可以有效降低服務器壓力,增加服務器穩定性
-
提升服務器安全性
-
- 可以對客戶端隱藏服務器的IP地址
- 也可以作為應用層防火墻,為網站提供對基于Web的攻擊行為(例如DoS/DDoS)的防護,更容易排查惡意軟件等
-
**加密/SSL加速:**將SSL加密工作交由配備了SSL硬件加速器的反向代理來完成
-
提供緩存服務,加速客戶端訪問
-
- 對于靜態內容及短時間內有大量訪問請求的動態內容提供緩存服務
-
數據統一壓縮
-
- 節約帶寬
- 為網絡帶寬不好的網絡提供服務
-
統一的訪問權限控制
-
統一的訪問控制
-
突破互聯網的封鎖
-
- 突破谷歌訪問封鎖
-
- 也就是說,不需要客戶端進行代理,我們通過谷歌代理網站(該代理服務器可以訪問谷歌,而我們可以訪問該公開的代理服務器),也可以突破封鎖。
-
為在私有網絡下(如局域網)的服務器集群提供NAT穿透及外網發布服務
-
上傳下載減速控制
正向代理與反向代理的區別
當前面的內容理解后,對于正向代理和反向代理的區別就很好理解了。最核心的不同在于代理的對象不同。
- 正向代理是代理客戶端。
- 反向代理是代理服務器。
而根據這核心的區別,我們也可以記住:代理哪端便可以隱藏哪端。也就是說:
- 正向代理隱藏真實客戶端
- 反向代理隱藏真實服務端
反向代理為什么叫反向代理
從我們用戶的角度來看:
代理我們發出請求的客戶端被稱為正向代理。
而代理我們訪問的服務器,則被稱為反向代理。從代理結構的角度來看(代理服務器在兩種代理中的作用均為收發請求與響應):
客戶端與代理服務器屬于一個局域網(上圖),稱為正向代理。
服務器端與代理服務器屬于一個局域網時(上圖),稱為反向代理。
最后,請記住:
- 正向代理為客戶端服務。
- 反向代理為服務器端服務。
后記
這是很早前學習時綜合網上查閱的各類文章資料最后匯總的個人筆記,因為比較久遠所以難以備注參考文章鏈接
總結
以上是生活随笔為你收集整理的端口转发映射详解、代理反向代理深入认知的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: USB下载正常,但拷文件慢
- 下一篇: JavaScript 定时器