
マニュアルページで生のソケットを使用できることを知っていますが、「透明プロキシのためにすべてのアドレスにバインド」が何を意味するのか理解していません。特権ポートにバインドするには他の機能が必要であることがわかっているため、どのポートにもバインドできないことがわかります。プロキシアドレスにバインドしていることをLinuxに通知する方法はありますか?
答え1
から引用このセキュリティSEの回答:
CAP_NET_RAW:発信者の偽造、誤った形式のパケット転送など、あらゆる種類のパケットを偽造する可能性があります。これはまた、すべてのアドレスへのバインディングを可能にします(発信者を偽造する機能に関してデバイスを偽装することができ、「透明」に正当なプロキシ)。 「マニュアルページによると、攻撃者の観点からは、この用語は中間者と同義です。)
答え2
はい。
http://man7.org/linux/man-pages/man7/ip.7.html
アウトレットオプション
...
IP_FREEBIND(Linux 2.4以降)
有効になっている場合、このブールオプションはローカルでないか存在しないIPアドレス(まだ)へのバインディングを許可します。これにより、アプリケーションがバインドを試みるときにデフォルトのネットワークインターフェイスまたは指定された動的IPアドレスが機能しなくてもソケットでリッスンできます。このオプションは、以下に説明するソケット固有のip_nonlocal_bind / procインタフェースと同じです。
また、見ることができます
IP_TRANSPARENT(Linux 2.6.24以降)
このブールオプションを設定すると、このソケットで透過プロキシが有効になります。このソケットオプションを使用すると、呼び出し側アプリケーションをローカルではなくIPアドレスにバインドし、外部アドレスをローカルエンドポイントであるクライアントとサーバーとして実行できます。注:これを行うには、TProxyボックス(つまり、IP_TRANSPARENTソケットオプションを使用してアプリケーションをホストするシステム)を介して外部アドレスに向けられたパケットをルーティングするようにルーティングを設定する必要があります。このソケットオプションを有効にするには、スーパーユーザー権限(CAP_NET_ADMIN機能)が必要です。
iptables TPROXYターゲットを使用するTProxyリダイレクトを使用するには、リダイレクトソケットでこのオプションを設定する必要があります。
(他のマニュアルページによると誰でもCAP_NET_ADMINまたはCAP_NET_RAWで十分です。 IP_FREEBINDにもこれらの機能が必要であることを願っています。)