Port-Forwarding

如何使用 firewalld 將特權子 1024 埠轉發到非特權 1024+ 埠?

  • September 2, 2021

問題

如何使用 firewalld 將特權子 1024 埠轉發到非特權 1024+ 埠?

原因

我們為什麼要這樣做?我們希望能夠切換網關上的非特權 1050 埠並使用不同的上游郵件伺服器。例如,要測試不同的垃圾郵件解決方案,請使用埠 1051 將郵件發送到具有不同垃圾郵件過濾解決方案的不同郵件伺服器。

郵件伺服器在啟動時會自動連接到網關。自動連接只能發生在 1024+ 的非特權埠上。

佈局和設置

佈局

+--------+         +---------------------+         +----------------+
|  WAN   |         |                1050 | <-      |                |
| Client |         |       Gateway       |    \    |   Mail Server  |
|        |  <--->  | 25                  |      -> | 25             |
+--------+         +---------------------+         +----------------+

設置防火牆

清除防火牆,打開埠,設置埠轉發,添加幾個服務。

root@gateway:~# firewall-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=25/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=25:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}

驗證防火牆

確認防火牆設置…

root@gateway:~# firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: etho0
 sources: 
 services: dhcpv6-client http https smtp ssh
 ports: 25/tcp
 protocols: 
 masquerade: no
 forward-ports: port=25:proto=tcp:toport=1050:toaddr=
 source-ports: 
 icmp-blocks: 
 rich rules: 

這是我們期望在防火牆規則中看到的。

結果

這是我們在網關上遠端登錄上游郵件伺服器時得到的…

root@gateway:~# telnet localhost 1050
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 debian10email.debian10email ESMTP Postfix (Debian/GNU)

這是我們從遠端客戶端機器上得到的……

client@client123:~$ telnet gateway.example.org 25
Trying <IP_of_gateway>...
Connected to gateway.example.org.
Escape character is '^]'.

我們期望也能看到這220 debian10email.debian10email ESMTP Postfix (Debian/GNU)條線,但沒有。

完整性檢查…

考試

只是為了確認正確編寫了埠轉發規則,我們…

  • 在防火牆上打開埠 1025。
  • 埠轉發 1025 到 1050
  • 然後檢查我們在遠端客戶端上看到的內容。

調整防火牆

清除防火牆,打開埠,設置埠轉發,以及一些服務。

root@gateway:~# firewall-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=1025/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=1025:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}

驗證防火牆

root@gateway:~# firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: etho0
 sources: 
 services: dhcpv6-client http https smtp ssh
 ports: 1025/tcp
 protocols: 
 masquerade: no
 forward-ports: port=1025:proto=tcp:toport=1050:toaddr=
 source-ports: 
 icmp-blocks: 
 rich rules: 

結果

client@client123:~$ telnet gateway.example.org 1025
Trying <IP_of_gateway>...
Connected to gateway.example.org.
Escape character is '^]'.
220 debian10email.debian10email ESMTP Postfix (Debian/GNU)

我們有預期的220 debian10email.debian10email ESMTP Postfix (Debian/GNU)線路,所以防火牆按預期進行埠轉發。

結論

特權埠和非特權埠之間的轉發不同於非特權埠之間的轉發。

我們如何在 Debian 10 Buster 上使用 firewalld 將特權子 1024 埠轉發到非特權 1024+ 埠?如果某處有答案,請指出。我們一直沒能找到它。

您的 firewalld 配置看起來正確。您測試的機器是否允許與埠 25 建立傳出連接?從其他機器嘗試。

引用自:https://serverfault.com/questions/1076450