在Linux中使用iptables設置端口轉發(fā)的步驟
iptables的作用
iptables可以根據(jù)預先定義的規(guī)則過濾網(wǎng)絡數(shù)據(jù)包,允許或者拒絕它們通過系統(tǒng)。這樣可以防止未經(jīng)授權的訪問和網(wǎng)絡攻擊。
iptables可以實現(xiàn)網(wǎng)絡地址轉換,將內(nèi)部網(wǎng)絡IP地址映射到外部網(wǎng)絡IP地址,或者將外部網(wǎng)絡IP地址映射到內(nèi)部網(wǎng)絡IP地址。這在實現(xiàn)端口轉發(fā)、IP偽裝等功能時非常有用。
iptables可以將進入系統(tǒng)的數(shù)據(jù)包重定向到另一個地址和端口,從而實現(xiàn)端口轉發(fā),這在構建服務器、實現(xiàn)內(nèi)部網(wǎng)絡服務對外訪問等場景中非常常見。
iptables允許對數(shù)據(jù)包進行一些修改操作,如更改目標地址、端口等,以滿足特定的需求。

iptables的工作原理
iptables通過管理系統(tǒng)內(nèi)核中的網(wǎng)絡數(shù)據(jù)包過濾規(guī)則來實現(xiàn)其功能。當一個數(shù)據(jù)包到達Linux系統(tǒng)時,內(nèi)核會將其傳遞給iptables進行處理。iptables根據(jù)預先定義的規(guī)則集來判斷如何處理這個數(shù)據(jù)包,可以允許其通過、丟棄、重定向等。
iptables規(guī)則是有序的,按照規(guī)則集中的順序逐條進行匹配。一旦找到與數(shù)據(jù)包匹配的規(guī)則,iptables將按照這條規(guī)則定義的操作來處理數(shù)據(jù)包,并停止對規(guī)則集的后續(xù)匹配。如果數(shù)據(jù)包與規(guī)則集中的任何規(guī)則都不匹配,則根據(jù)默認策略來處理數(shù)據(jù)包,通常是允許或者拒絕。
iptables基礎概念和術語
1. 鏈(Chain)
在iptables中,鏈是一系列規(guī)則的集合,用于指示如何處理進入系統(tǒng)的數(shù)據(jù)包。每個數(shù)據(jù)包在到達系統(tǒng)時都會按照預定義的鏈進行處理,根據(jù)鏈中的規(guī)則來確定其后續(xù)的操作。常見的鏈包括:
- INPUT:用于處理進入系統(tǒng)的數(shù)據(jù)包。
- OUTPUT:用于處理從系統(tǒng)發(fā)出的數(shù)據(jù)包。
- FORWARD:用于處理經(jīng)過系統(tǒng)的數(shù)據(jù)包(不是直接進入或者發(fā)出系統(tǒng)的)。
2. 規(guī)則(Rule)
規(guī)則是iptables中的基本構建單元,用于定義對數(shù)據(jù)包的處理方式。每條規(guī)則包括匹配條件和動作兩部分。當一個數(shù)據(jù)包到達時,iptables會按照規(guī)則集中的順序逐條匹配規(guī)則,一旦找到匹配的規(guī)則,就會執(zhí)行規(guī)則中定義的動作。
3. 表(Table)
表是一組相關規(guī)則的集合,用于組織和管理iptables規(guī)則。每個表都包含一組預定義的鏈,用于特定類型的數(shù)據(jù)包處理。常見的表包括:
- filter表:用于數(shù)據(jù)包過濾。
- nat表:用于網(wǎng)絡地址轉換。
- mangle表:用于數(shù)據(jù)包修改。
- raw表:用于原始數(shù)據(jù)包處理。
4. 匹配條件(Match)
匹配條件用于定義規(guī)則中數(shù)據(jù)包匹配的條件??梢愿鶕?jù)源地址、目標地址、協(xié)議、端口等多種條件來匹配數(shù)據(jù)包。如果數(shù)據(jù)包滿足規(guī)則中定義的所有匹配條件,那么這條規(guī)則就會被執(zhí)行。
5. 動作(Target)
動作定義了當規(guī)則匹配成功時要執(zhí)行的操作。常見的動作包括:
- ACCEPT:允許數(shù)據(jù)包通過。
- DROP:丟棄數(shù)據(jù)包。
- REJECT:拒絕數(shù)據(jù)包,并發(fā)送拒絕消息給發(fā)送者。
- REDIRECT:重定向數(shù)據(jù)包到另一個地址和端口。
6. 表和鏈的關系
表包含鏈,而鏈包含規(guī)則。當一個數(shù)據(jù)包到達系統(tǒng)時,iptables首先根據(jù)表選擇要使用的鏈,然后在該鏈中逐條匹配規(guī)則,直到找到匹配的規(guī)則或者到達鏈的末尾。
端口轉發(fā)的原理
端口轉發(fā)是一種網(wǎng)絡轉發(fā)技術,它允許將來自一個端口的數(shù)據(jù)包轉發(fā)到另一個端口。在Linux中,使用iptables可以實現(xiàn)端口轉發(fā),通過修改數(shù)據(jù)包的目標地址和端口來實現(xiàn)數(shù)據(jù)包的轉發(fā)。
端口轉發(fā)的原理可以簡單概括為以下幾個步驟:
- 當一個數(shù)據(jù)包到達系統(tǒng)時,內(nèi)核會根據(jù)預定義的iptables規(guī)則集來處理該數(shù)據(jù)包。
- iptables規(guī)則集中可以包含一些規(guī)則用于端口轉發(fā),這些規(guī)則定義了哪些數(shù)據(jù)包需要進行轉發(fā)以及轉發(fā)到哪個地址和端口。
- 如果一個數(shù)據(jù)包匹配了端口轉發(fā)規(guī)則,iptables會修改數(shù)據(jù)包的目標地址和端口,然后將數(shù)據(jù)包轉發(fā)到指定的地址和端口。
- 目標地址和端口可以是系統(tǒng)本身上運行的服務,也可以是系統(tǒng)外部的其他設備或服務。
端口轉發(fā)的應用場景
端口轉發(fā)在實際應用中有很多場景,包括但不限于:
- 將來自外部網(wǎng)絡的數(shù)據(jù)包轉發(fā)到內(nèi)部網(wǎng)絡的服務器,以實現(xiàn)內(nèi)部網(wǎng)絡服務對外訪問。
- 將某一端口上的流量轉發(fā)到另一個內(nèi)部或外部設備上,以實現(xiàn)負載均衡或故障轉移。
- 將某一端口上的數(shù)據(jù)包轉發(fā)到不同的目標地址和端口,以實現(xiàn)靈活的網(wǎng)絡配置和管理。
在配置端口轉發(fā)時,需要考慮安全性因素,避免被惡意用戶利用進行攻擊或者非法訪問。可以通過限制端口轉發(fā)的源地址、目標地址、端口等條件來增強安全性,同時定期審查和更新iptables規(guī)則集也是必要的。
使用iptables進行端口轉發(fā)的步驟
啟用IPv4轉發(fā)
在進行端口轉發(fā)之前,首先需要確保系統(tǒng)上啟用了IPv4數(shù)據(jù)包轉發(fā)功能??梢酝ㄟ^修改/etc/sysctl.conf文件來啟用IPv4轉發(fā),將以下行取消注釋(如果存在),或者手動添加:
net.ipv4.ip_forward=1
然后執(zhí)行以下命令使配置生效:
sudo sysctl -p
添加端口轉發(fā)規(guī)則
使用iptables添加端口轉發(fā)規(guī)則。例如,如果要將外部網(wǎng)絡的TCP流量轉發(fā)到內(nèi)部服務器的特定端口,可以使用以下命令:
sudo iptables -t nat -A PREROUTING -p tcp --dport [外部端口] -j DNAT --to-destination [內(nèi)部服務器IP]:[內(nèi)部端口]
這條規(guī)則將外部端口的TCP流量轉發(fā)到內(nèi)部服務器的指定端口。
允許轉發(fā)的流量通過防火墻
如果系統(tǒng)上啟用了防火墻,需要確保允許轉發(fā)的流量通過防火墻。可以使用以下命令添加允許轉發(fā)的規(guī)則:
sudo iptables -A FORWARD -i [進入網(wǎng)卡] -o [出去網(wǎng)卡] -p [協(xié)議] --dport [內(nèi)部端口] -j ACCEPT
這條規(guī)則允許來自指定進入網(wǎng)卡、出去網(wǎng)卡、協(xié)議和端口的流量通過防火墻。
保存和應用規(guī)則
一旦添加了端口轉發(fā)規(guī)則,務必保存規(guī)則以確保系統(tǒng)重啟后規(guī)則不會丟失??梢允褂靡韵旅畋4嬉?guī)則:
sudo iptables-save > /etc/iptables/rules.v4
并且在系統(tǒng)啟動時加載規(guī)則:
sudo iptables-restore < /etc/iptables/rules.v4
將外部HTTP流量轉發(fā)到內(nèi)部Web服務器
假設內(nèi)部有一臺Web服務器運行在內(nèi)部網(wǎng)絡上,IP地址為192.168.1.100,監(jiān)聽HTTP的80端口?,F(xiàn)在我們想要將來自外部網(wǎng)絡的HTTP流量(端口80)轉發(fā)到這臺服務器上。
我們可以使用以下iptables規(guī)則來實現(xiàn):
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
將外部SSH流量轉發(fā)到內(nèi)部服務器的另一個SSH端口
假設內(nèi)部有一臺SSH服務器運行在內(nèi)部網(wǎng)絡上,IP地址為192.168.1.101,監(jiān)聽SSH的22端口?,F(xiàn)在我們想要將來自外部網(wǎng)絡的SSH流量(端口22)轉發(fā)到這臺服務器上的另一個端口,比如2222端口。
我們可以使用以下iptables規(guī)則來實現(xiàn):
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.101:2222
設置端口映射
假設我們有一臺內(nèi)部服務器同時運行著Web服務(端口80)和FTP服務(端口21)?,F(xiàn)在我們想要將外部網(wǎng)絡的HTTP流量轉發(fā)到Web服務器,而FTP流量轉發(fā)到FTP服務器。
我們可以使用以下iptables規(guī)則來實現(xiàn):
# HTTP流量轉發(fā)到Web服務器 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 # FTP流量轉發(fā)到FTP服務器 sudo iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.1.102:21
在配置完以上規(guī)則后,可以從外部網(wǎng)絡嘗試訪問相應的服務端口,以驗證轉發(fā)是否生效。例如,使用瀏覽器訪問Web服務器的IP地址或者使用SSH客戶端連接SSH服務器的IP地址和端口。
以上就是在Linux中使用iptables設置端口轉發(fā)的步驟的詳細內(nèi)容,更多關于Linux iptables端口轉發(fā)的資料請關注腳本之家其它相關文章!
相關文章
Linux下rsync遠程數(shù)據(jù)同步命令的詳細介紹
rsync是一款開源的、快速的、多功能的、可實現(xiàn)全量及增量的本地或遠程數(shù)據(jù)同步備份的優(yōu)秀工具。rsync軟件適用于unix/linux/windows等多種操作系統(tǒng)平臺。下面這篇文章主要介紹了Linux下rsync命令的相關資料,需要的朋友可以參考借鑒。2017-02-02
ubuntu19系統(tǒng)及以下版本安裝android studio的教程
這篇文章主要介紹了ubuntu19系統(tǒng)及以下版本安裝android studio的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
Apache下通過shell腳本提交網(wǎng)站404死鏈的方法
這篇文章主要介紹了Apache下通過shell腳本提交網(wǎng)站404死鏈,需要的朋友可以參考下2017-09-09

