单端口 端口转发

同端口 端口转发

iptables -t nat -A PREROUTING -p tcp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口]
iptables -t nat -A PREROUTING -p udp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器主网卡绑定IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器主网卡绑定IP]

不同端口 端口转发

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000 -j SNAT --to-source 2.2.2.2

多端口 端口转发

同端口 端口转发

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:30000 -j SNAT --to-source 2.2.2.2

不同端口 端口转发

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000:40000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000:40000 -j SNAT --to-source 2.2.2.2

查看NAT规则

iptables -t nat -vnL POSTROUTING
iptables -t nat -vnL PREROUTING

删除NAT规则

iptables -t nat -D POSTROUTING 1
iptables -t nat -D PREROUTING 1

不同端口转发到特定端口

iptables -t nat -A PREROUTING -p udp --dport 12000:40000 -j REDIRECT --to-port 81

允許或阻止特定連接

來自單個IP位址的連接

此示例演示如何阻止來自IP位址10.10.10.10.10的所有連接。

iptables -A INPUT -s 10.10.10.10 -j DROP

來自一系列IP位址的連接

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

與特定埠的連接

此示例演示如何阻止來自 10.10.10.10 的 SSH 連接。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

您可以將「ssh」 替換為任何協定或連接埠號。代碼的一部分告訴iptables協定使用哪種連接。如果您要阻止使用UDP而不是TCP的協議,那麼將是必要的。-p tcp-p udp

此示例演示如何阻止來自任何IP位址的SSH連接。

iptables -A INPUT -p tcp –dport ssh -j DROP

連接狀態

這就是連接狀態的用武之地,它為您提供了允許雙向通信但只允許建立單向連接所需的功能。請看一下此示例,其中允許從 10.10.10.10 的 SSH 連接,但不允許從 10.10.10.10 連接到 SSH 連接。但是,只要已經建立了會話,就允許系統通過 SSH 發送回資訊,這使得這兩個主機之間的 SSH 通信成為可能。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

保存更改

對iptables規則所做的更改將在下次重新啟動iptables服務時報廢,除非您執行命令來保存更改。此指令可能因發行版而異:

Ubuntu:

sudo /sbin/iptables-save

紅帽 / CentOS:

/sbin/service iptables save
## OR
/etc/init.d/iptables save

其他命令

列出目前的 iptables 規則:

iptables -L

添加該選項將為您提供數據包和位元組資訊,添加將以數位方式列出所有內容。換句話說,主機名、協定和網路都列為數位。-v-n

要清除所有當前配置的規則,您可以發出刷新命令。

iptables -F