ローカルでiptablesを使用してアウトバウンドトラフィックをポート80にリダイレクトするにはどうすればよいですか?


19

を使用して、Ubuntuマシンのポートをローカルにリダイレクトしようとしていますiptables。透過プロキシに似ています。システムをポート80のままにして、リモートホストとポートにリダイレクトしようとするものをキャッチしたい。

NATおよび事前ルーティング機能を使用してこれを実現できますiptablesか?

回答:


30

このiptablesルールを試してください:

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

上記のことを言う:

  • NATテーブルに次のルールを追加します(-t nat)。
  • このルールは-A、アウトバウンドトラフィック(OUTPUT)に追加されます()。
  • TCPトラフィックにのみ関心があります(-p tcp)。
  • 宛先ポートが80(--dport 80)のトラフィックのみに関心があります。
  • 一致したら、DNAT(-j DNAT)にジャンプします。
  • このトラフィックを他のサーバーのIP @ポート80(--to-destination IP:80)にルーティングします。

DNATとは?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

参照資料


それに感謝しますが、うまくいかないようです。しかし、私はこれが機能することを発見しました。
pjf

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination xx.xx.xx.xx:3128
pjf

これは、ゲートウェイ経由ではなくローカルにあるためですか?SNATはゲートウェイを介して機能しますか?
pjf

@pjf-そう信じています。回答を更新しました。
slm

@pjf-両方のルールを見つけたので、両方でルールを更新中です。しかし、あなたがどのような状況にあったかはわかりませんでした。
slm

6

これは、特定の宛先ホストへのトラフィックでのみ動作するように、より具体的にすることができます。たとえば、postfixが間違えて、キュー内のメールを古いIPアドレスに送信したい場合。

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

これにより、ポートをすべてのIPアドレスに変換できます。ここでの主な違いは、--to-destinationフィールドにIPアドレスがないことです。

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

非常に役立つヒント。まさに必要なもの。ポート番号を増やす方法はありますか?たとえば、100個のポートの範囲があり、それらをすべて特定の量だけ増やしたいとします。
ズデネク

よく分からない。Bashでforループを記述できますか?
フェリペアルバレス

100個のiptablesルールを追加するループは機能しますが、速度が低下します。単一のルールで多くの連続したポートをインクリメントするように指示できるようにしたいと思います。
ズデネク

@Zdenek iptablesでそれが可能かどうかはわかりません。見たことがありfirewalldますか?
フェリペアルバレス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.