iptablesを使用してすべてのポートから単一のローカルポートに出るトラフィックプロキシ

iptablesを使用してすべてのポートから単一のローカルポートに出るトラフィックプロキシ

私はLinuxシステムとプロキシサーバーが同じシステムで実行されており、127.0.0.1:1080を受信して​​います。私はiptablesそれを使用して次のことを達成したいと思います。

  1. ポート1080を介したすべてのHTTP(S)要求の場合、処理なしで直接接続
  2. 他のポートからのすべてのHTTP(S)要求の場合、127.0.0.1:1080を介したプロキシ
  3. 着信要求は触れることなく正常に受信されます。

なぜ私が出てくる要求を自分でプロキシ処理するのか疑問に思うかもしれません。その理由は、プロキシサーバーが難読化やその他の素晴らしいタスクを実行するためです。

私は多くの回答を読んでいますが、ほとんどは特定のポート(たとえば80)を介した要求にのみ興味がありますが、私は1つのポートを除くすべてが欲しいです。

次のコマンドが利用可能であることを知っています。

iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 127.0.0.1:1080

しかし、これは独自のルーティングループを引き起こす可能性があると思います。

存在するこのブログ、著者は解決を提供します

サーバーと同じシステムでクライアントを実行したい場合(コーヒーショップでラップトップを使用してください。ペストリーをお願いします)、PREROUTINGテーブルは外部のパケットでのみ機能するため使用できません。私たちができることは、クライアントプロセスが出力するパケットの宛先ポートを変更することです。問題は、これがmitmproxyのパケット出力にも影響を与え、ルーティングループに閉じ込められることです。

この問題を解決する方法はいくつかありますが、私に効果があったのは、mitmproxyをrootとして実行し、iptablesルールがroot所有プロセスに適用されないようにすることでした。

sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 443 -j REDIRECT --to-port 8080

  • -m owner:所有者モジュールをロードします。
  • ! –uid-owner root:ルート所有プロセスにはルールは適用されません。

しかし、私のコンピュータには1人しかいrootないので、これを行うために別のユーザーを作成するつもりはありません。

/proc/sys/net/ipv4/ip_forwardしかし、この場合は1に設定する必要があるかどうかわかりません。

オペレーティングシステムが新しくインストールされたUbuntu 20.04であると仮定できます。

編集:「トラフィック」がHTTPリクエストを参照するという説明です。

ベストアンサー1

# Enable routing
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
# Enable forwarding to loopback interface
sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1
# Forward all TCP  except TCP/1080
iptables -t nat -A OUTPUT -p tcp ! --dport 1080 -j DNAT --to-destination 127.0.0.1:1080
# Enable NAT (aka Masqurade)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

おすすめ記事