web-dev-qa-db-ja.com

ローカルホストへのiptablesを使用したポートリダイレクト/宛先ポートのブロック

80に来るすべてのトラフィックを転送して8000にリダイレクトするのが好きです。

使った

iptables -tnat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8000

しかし、ポート8000​​はまだ一般に公開されています。

-DNATを試しました:

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8000

しかし、これはまったく機能しません。/proc/sys/net/ipv4/ip_forwardは1に設定されます。

他のルールは構成されていません。

私を助けてください :)

-

編集

以下の質問への回答:これが私が達成したいexacltyです:

Webサーバーと見なすことができるポート8000​​で実行されているサービスがあります。外部からポート80経由でアクセスできる必要がありますが、ポート8000​​経由ではアクセスできません。内部ネットワークは重要ではありません。制限されているかどうかは関係ありません。

REDIRECTはポート8000​​に直接アドレス指定されたパケットをドロップしないことを理解していますが、INPUTチェーンですべてのパケットを8000にドロップすると、リダイレクトされたパケットもドロップされます。

iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP 

私のために働くことはできません。

PREROUTINGチェーンを介してリダイレクトされていない宛先ポート8000​​のパケットをドロップする方法はありますか?

-sを介してソースIPを追加しても役に立ちませんよね?ソースIPはリダイレクト時に変更されないためです。

回答

受け入れられた答えに基づいて、私はそれをこのように解決することができました:

iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP
2
Phil

リダイレクトするパケットにマークを設定します。次に、ブロックされたパックの前にマークされたパックを許可します。見る iptables -j MARK -hはパケットをマークし、iptables -m mark -hパックに合わせる

3
Nizam Mohamed