web-dev-qa-db-ja.com

単一のホストIPアドレスでのみポート転送する方法

短い質問:

単一のホストIPアドレスでのみポート転送を有効にするにはどうすればよいですか?

バックストーリー:

Centos 7サーバーには5つのIPアドレスがあります。以前は、Apacheでそれらすべてと、仮想ホストで解決されたIPアドレスに割り当てられたさまざまなドメインをリッスンしていました。

Httpd.confのListenディレクティブを変更して、Apacheが4つのIPアドレスのみをリッスンするようにしました

Node.jsを使用して別のサーバーインスタンスを作成しましたが、高度な権限がなければ標準ポート80でリッスンできません。昇格した権限で実行したくありません。

私はポート80を8080のようなものにポート転送したいのですが、他の4つのIPアドレスに向けられたトラフィックに影響を与えることなく、1つのIPアドレスのみを使用します。他のIPアドレスのトラフィックがルールの影響を受けないことが重要です。

ソリューションは次のようになります。

firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

私が見つけた他の質問と回答は、ホストIPアドレスではなくソースIPアドレスに関係しています。

2
Altimus Prime

Firewalldゾーンは、インターフェースまたはsourceアドレスのいずれかで指定できますが、destinationアドレス。この特定の状況を処理するには、豊富なルールが必要です。

このような豊富なルールは次のようになります。

_firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" destination address="198.51.100.237" forward-port port="80" protocol="tcp" to-port="8080"'
_

豊富なルールのドキュメントについては、 firewalld.richlanguage(5)のマニュアルページ を参照してください。

リッチルールが機能したら、次のようにして永続化することを忘れないでください。

_firewall-cmd --runtime-to-permanent
_

または、前の呼び出しに_--permanent_を追加します。

6
Michael Hampton

5つのIPアドレスのうち、1つが192.0.2.3、ポート80を転送する。 iptablesを使用して、このIPアドレスのポートを次のように転送できます。

iptables -t nat -A PREROUTING -d 192.0.2.3 -p tcp --dport 80 -j REDIRECT --to-ports 8080

これにより、他のすべてのアドレスは影響を受けません。プログラムがすべてのアドレスのポート80にバインドする場合、192.0.2.3は、ルーティングの前にリダイレクトされるため、ポート8080にリダイレクトされます。

1
Torin

注:私は奇妙でおそらくサポートされていないソリューションを提案していますが、将来のfirewalldバージョンで壊れる可能性があります。それにもかかわらず、それは確かにCentOS 7サーバーで動作します。

そのようなポート転送ルールをiptables/ip6tablesスタックに直接追加することをお勧めします。 firewalldの直接ルールを使用することでそれを実現できます。例えば:

# firewall-cmd --permanent --direct --add-rule ipv4 nat PRE_public_allow 0 \
    --destination 11.22.33.44 --protocol tcp --destination-port 80 \
    --jump REDIRECT --to-ports 8080

# firewall-cmd --permanent --direct --add-rule ipv6 nat PRE_public_allow 0 \
    --destination 11:22:33:44:55:66:77:88 --protocol tcp --destination-port 80 \
    --jump REDIRECT --to-ports 8080

CentOSのfirewalldは、アクティブなゾーンごとにnatテーブルにPRE_<zone>_allowチェーンを作成し、ゾーン定義に一致するパケットが到着すると評価されると考えました。したがって、iptables/ip6tablesルールをそこに追加できます。

異なるドメインの同じポートで、同じIPアドレスのリバースプロキシを構成します。 httpd構成ページで、各ポート(Listen 80、Listen 8081、Listen 8082など)のListenディレクティブを追加し、httpd構成ページにvhosts構成ポートを含め、ポートに従ってvhosts構成ページを更新します。

0
user427751