天天看點

IPtables與端口轉發

IPtables端口轉發的設定:

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

然後使用iptables -t nat -L指令可以檢視到在nat的表中的PREROUTING鍊生成了DNAT轉發的規則。

IPtables與端口轉發

指令解釋:

-t:在後面添加對應的表。iptables一般的表有net、row、mangle、filter表,一般不加-t指令就是預設為filter表。

-A:表示追加寫,後面接規則鍊(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING )

-p:(protocol)通信使用到協定

-d:目标位址

--dport:目标端口,注意是兩個小斜杠

-j: 添加對應的動作,DNAT表示端口轉發的動作(此時需要對應nat表)

如果不加nat表的就會顯示如下的錯誤: iptables: No chain/target/match by that name

IPtables與端口轉發

在預設的filter表中是沒有對應DNAT的動作的。

加上nat表後,檢視是否設定成功:

IPtables與端口轉發
IPtables與端口轉發

端口轉發的功能:

端口轉發是用于外網通路内部區域網路是的安全保護措施,通過路由器将區域網路的内的某一個端口映射到外網上,可以使外網訪通過這個開放的端口通路到内網的某一主機或者伺服器,同時避免區域網路内的主機遭受到攻擊。

端口号的定義:

資料鍊路和IP中的位址,分别指的是MAC位址和IP位址。前者用來識别同一鍊路中不同的計算機,後者用來識别TCP/IP網絡中互聯的主機和路由器。在傳輸層中也類似的概念,那就是端口号。端口号用來識别同一台計算機中進行通信的不同應用程式。是以也可以叫它程式位址。在tcp/ip通信中,通常使用5個資訊來識别一個通信。分别就是“源IP位址”、“目标IP位址”、“協定号”、“源端口号”、“目标端口号”、“源端口号”。隻要其中某一項不同,則被認為是其他的通信。

端口号的确定:

在實際進行通信的時候,要事先确定端口号。确定端口号的方法分為兩種:标準既定的端口号、時序配置設定法

标準既定的端口号:

這種方法是靜态的方法。在HTTP、TELNET、FTP等廣為使用的應用協定中所使用的的端口号就是固定的。這些端口号也被稱為知名的端口号。知名端口号一般由0到1023的數字配置設定而成。應用程式應該避免使用知名的端口号進行既定目的之外的通信,以免産生沖突。除開這些端口,還有一些端口也被正式的注冊。這些端口号就分布在1024到49151的數字之間。

時序配置設定法:

這種方法是動态的配置設定法。此時,服務端有必要确定監聽端口号,但是接受服務的用戶端沒有必要确定端口号。

在這種方法下,用戶端應用程式可以完全不用自己設定端口号,而全權交給作業系統進行配置設定。作業系統可以為每個應用程式配置設定互不沖突的端口号。根據這種動态配置設定的端口号機制,即使是同一個用戶端程式發起的多個TCP連接配接,識别這些通信連接配接的5部分數字也不會全部相同。動态配置設定的端口号範圍在49152到65535之間。

端口号與協定:

端口号由其使用的傳輸層協定決定。是以,不同的傳輸協定可以使用相同的端口号。

資料到達IP層後,會首先檢查IP首部中的協定号,在傳給相應協定的子產品。如果是TCP則傳給TCP子產品、如果是UCP則傳給UCP子產品去做端口号的處理。即使是統一端口号,由于傳輸協定是各自獨立進行處理,是以互相之間不會受到影響。

此外,知名的端口與傳輸層的協定并無關系,隻要端口一緻都将配置設定同一種程式進行處理。例如,53号端口在TCP與UDP中都用于DNS服務,而80端口用于HTTP通信。從目前來看,由于HTTP通信必須使用TCP,是以UDP的80端口并未投入使用。