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