Port-Forwarding
如何使用 firewalld 將特權子 1024 埠轉發到非特權 1024+ 埠?
問題
如何使用 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 建立傳出連接?從其他機器嘗試。