質問
特権ポート 1024 未満を、firewalld で非特権ポート 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:
これは、ファイアウォール ルールで表示されると予想されたものです。
結果
これは、ゲートウェイ上のアップストリーム メール サーバーに Telnet すると得られる結果です...
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+ にポート転送するにはどうすればよいでしょうか。どこかに答えがあれば、教えてください。まだ見つけられていません。
答え1
ファイアウォールの設定は正しいようです。テストに使用したマシンはポート 25 への送信接続を許可されていますか? 別のマシンから試してください。