特権ポート 1024 未満を、firewalld で非特権ポート 1024 以上にポート転送するにはどうすればよいでしょうか?

特権ポート 1024 未満を、firewalld で非特権ポート 1024 以上にポート転送するにはどうすればよいでしょうか?

質問

特権ポート 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 への送信接続を許可されていますか? 別のマシンから試してください。

関連情報