ProxyChains-NG ver 4.17 README
ProxyChainsはUNIXプログラムで、動的リンクされたプログラムにおいて、プリロードされたDLL(dlsym()、LD_PRELOAD)を介してネットワーク関連のlibc関数をフックし、SOCKS4a/5またはHTTPプロキシ経由で接続をリダイレクトします。TCPのみをサポートし(UDP/ICMPなどは非対応)。
動作原理は基本的にハックです。そのため、特にスクリプトやバックグラウンドデーモンなどの多数のプロセスを起動するプログラム、またはdlopen()で「モジュール」をロードするプログラム(glibc動的リンカのバグ)では、動作しない可能性があります。ただし、シンプルなコンパイル済み(C/C++)動的リンクプログラムでは動作するはずです。
プログラムがproxychainsで動作しない場合は、代わりにiptablesベースのソリューションを検討してください。こちらの方がはるかに堅牢です。
対応プラットフォーム: Linux、BSD、Mac、Haiku。
*********** 注意 ***********
このプログラムは検閲の回避に使用される可能性があります。
特定の国では、そのような行為は非常に危険です。
何か重要なことに使用する前に、必ずPROXYCHAINSが期待通りに動作することを確認してください。
これは、プログラム自体と使用するプロキシの両方に関わります。
例えば、ifconfig.meのような「私のIPは?」サービスに接続して、実際のIPが使われていないことを確認してください。
自分の行動を理解している場合にのみ、PROXYCHAINSを使用してください。
PROXYCHAINSの作者およびメンテナは、本ソフトウェアの乱用や誤用、およびその結果生じるいかなる結果に対しても一切の責任を負いません。
*** インストール ***
動作可能なCコンパイラが必要です(できればgcc)
./configure --prefix=/usr --sysconfdir=/etc
make
[オプション] sudo make install
[オプション] sudo make install-config(proxychains.confをインストール)
インストールしない場合、ビルドディレクトリから次のようにproxychainsを使用できます:
./proxychains4 -f src/proxychains.conf telnet google.com 80
変更履歴:
バージョン4.17
- close_range関数のフックを追加し、新しいバージョンのopensshを修正
- Mac用のfat-binary-m1オプション
- proxy_dns_oldでのDNSエラーハンドリングを修正
- 初期化コードを簡略化
- OpenBSDのプリロードを修正
- マルチスレッドアプリケーションでの二重closeを修正
- configureスクリプトのさまざまな改善
バージョン4.16
- configureスクリプトのリンカフラグ検出の回帰を修正
- 10年前のglibc getnameinfoシグネチャの誤りに対する回避策を削除
- OSX Monterey向けの新しいDYLDフック方式のサポート
- NetBSDのコンパイル修正
- IPv6ローカルネットのサポート
- execvp失敗時のよりユーザーフレンドリーなエラーメッセージ
- proxy_getaddrinfo(): 要求された場合にai_socktypeを設定
バージョン4.15
- バグのあるbinutilsバージョン向けのconfigureスクリプト修正
- rand_seedをナノ秒単位で初期化
- getaddrinfoで数値IPv6のサポート追加
- nodeがnullかつ!passiveの場合のgetaddrinfoのバグ修正
- dnat機能追加
- rawプロキシタイプ追加
- Haikuサポート追加
- proxychains 3.1の動作をエミュレートするproxy_dns_old追加
- 新しいproxy_dns_daemon機能追加(実験的)
- その他さまざまな修正
バージョン4.14
- プロキシリストで代替構文proto://user:pass@ip:portを許可
- すべてのプロキシがダウンしている場合のラウンドロビンモードでの無限ループを修正 (#147)
- Androidでのコンパイルを修正 (#265)
- フォークプロセスでのfdリークを修正 (#273)
- nullルーティングされたIPへの接続試行をスキップ
- 特定の条件下でプロキシリストのホスト名を許可
バージョン4.13
- DNSルックアップスレッドの堅牢性とsegfaultを修正
- 非準拠サーバーでのsocks5ユーザー/パスワード認証を修正
- メモリリークを修正
- Solarisのサポート追加
バージョン4.12
- いくつかのビルド問題を修正
- 一部のGUIアプリとの互換性修正 (8870140)
- 一部のHTTPプロキシとの互換性修正 (cf9a16d)
- Debianでのクリーンビルドのためのいくつかの警告を修正
- OSXでのrandom_chainを修正 (0f6b226)
バージョン4.11
- 予備的なIPv6サポート
- hostsreaderのバグ修正
- OpenBSDでの使用の予備的サポート(自己責任)
バージョン4.10
- カスタムLDFLAGSでのリンク順序の回帰を修正
- 約400以上の異なるルックアップを行うプログラムでのDNSマッピングコードのsegfaultを修正
バージョン4.9
- セキュリティ問題CVE-2015-3887を修正
- MSG_FASTOPENフラグを処理するためのsendtoフックを追加
- 問題のあるhostentdbをhostsreaderに置き換え
- OpenBSDでのコンパイルを修正(ただし、そこでは動作しない)
バージョン4.8.1:
- 4.8のinstall-config Makefileターゲットの回帰を修正
バージョン4.8:
- getaddrinfoがAI_NUMERICHOSTと共に使用され、数値IPを解決せずにテストするという奇妙なエッジケースを修正(nmapを修正)。
- LD_PRELOAD自体に依存するプログラムでの使用を許可
- 設定ファイルの不正なエントリを拒否
- 起動時にバージョン番号を表示
バージョン4.7:
- crassによる新しいround_robinチェーンタイプ。
- GCCコンストラクタが使用されなかった場合の遅延割り当てのバグを修正。
- OS Xで「fat」バイナリ/ライブラリを作成するための新しいconfigureフラグ--fat-binary。
- closeフックでEINTRではなくEBADFを返す。
close()呼び出しがEINTRを受け取った場合、プログラムが再試行するのは合法であり、chromiumで見られたように無限ループを引き起こす可能性があるため。
バージョン4.6:
- Makefileのいくつかの見た目の修正、非数値IPがプロキシサーバーアドレスとして使用された場合のバグを修正。
バージョン4.5:
- close()をフックして、OpenSSHが内部インフラを混乱させるのを防止。これにより、プロキシ化されたsshクライアントがsegfaultを起こす問題を修正。
バージョン4.4:
- FreeBSD移植
- DebianおよびMacでのインストール問題を修正。
バージョン4.3:
- irssiのように子プロセス(fork())でDNSルックアップを行うプログラムを修正。これを達成するために、pthreadsなしでのコンパイルサポートを犠牲に。
- gethostent()呼び出しのスレッドセーフを修正。
- hostentデータベースがキャッシュされるため、DNS処理速度を改善。
バージョン4.2:
- Ubuntu 12.04ツールチェーンでのコンパイル問題を修正
- まれなコードパスでのsegfaultを修正
バージョン4.1
- Mac OS X(全アーキテクチャ)のサポート
- すべての内部関数は-DTHREAD_SAFE(デフォルト)でコンパイルするとスレッドセーフになります。
バージョン4.0
- DNSリゾルバスクリプト(動的リンクされたdigバイナリが必要)をリモートDNSルックアップに置き換え。
旧スクリプトはTCPを使用する必要があったため、DNSを含むすべての操作が高速化。
さらに、TORと併用することで.onion URLを使用可能に。
- 壊れたautoconfビルドシステムをシンプルなMakefileに置き換え。
ただし、便利な./configureスクリプトは残されています。
また、コマンドラインスイッチ/環境変数で設定ファイルを渡す機能を追加。
バージョン3.0
- プロキシ経由でのDNS解決のサポート
SOCKS4、SOCKS5、HTTP CONNECTプロキシサーバーをサポート。
認証タイプ: socks - "user/pass" , http - "basic"。
いつ使うか?
- LANから「外」に出る唯一の方法がプロキシサーバーの場合。
- 発信ポートをフィルタリングする制限の厳しいファイアウォールから抜け出すため。
- 2つ以上のプロキシをチェーンで使用する場合:
例: your_host <--> proxy1 <--> proxy2 <--> target_host
- プロキシサポートが組み込まれていないプログラム(telnetなど)を「プロキシ化」するため。
- プロキシ経由で外部からイントラネットにアクセスするため。
- プロキシ経由でDNSを使用するため。
- 隠されたtorオニオンサービスにアクセスするため。
便利な機能:
- 同じチェーン内で異なるプロキシタイプを混在可能
例: your_host <-->socks5 <--> http <--> socks4 <--> target_host
- 異なるチェーンオプションをサポート
リストからのランダム順(ユーザー定義のチェーン長)。
正確な順序(リストに表示された順序)
動的順序(デッドプロキシをインテリジェントに除外)
- 標準のlibc機能を使用するほとんどのTCPクライアントアプリケーションで使用可能。ネットワークスキャナーもおそらく使用可能。ただし、pcapベースのスキャンは動作しません。
- squidやsendmailなどのサーバーでも使用可能。
- プロキシ経由でのDNS解決。
設定:
proxychainsは以下の順序で設定ファイルを探します:
- 環境変数PROXYCHAINS_CONF_FILEで指定されたファイル、または
proxychainsスクリプト/バイナリに-f引数として指定されたファイル。
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** 通常は/etc/proxychains.conf
使用例:
$ proxychains telnet targethost.com
この例では、proxychains.confで指定されたプロキシ(またはチェーンプロキシ)を介してtelnetを実行します。
使用例:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
この例では、proxychains.confとは異なる設定ファイルを使用してtargethost2.comホストに接続します。
使用例:
$ proxyresolv targethost.com
この例では、proxychains.confで指定されたプロキシ(またはチェーンプロキシ)を介してtargethost.comを解決します。
既知の問題:
-
新しいバージョンのnmapは、必要がない場合でも使用するネットワークインターフェースを決定しようとします(たとえば、標準のPOSIXソケットAPIを使用する単純なsynスキャンを行う場合など)。これにより、proxychainsが予約アドレス空間にIPアドレスを渡すとエラーが発生します。
考えられる回避策: proxy_dnsを無効にする、数値IPを使用する、またはnmapのネイティブSOCKSプロキシサポートを使用する。
-
Mac OS X 10.11 (El Capitan) にはSIPと呼ばれる新しいセキュリティ機能が搭載されており、システムアプリのフックを防止します。
回避策としては、リカバリモードでcsrutil enable --without debugを発行してSIPを部分的に無効にするか、
システムバイナリをホームディレクトリにコピーしてそこから実行します。
詳細はGitHub issue #78を参照してください。
-
glibc動的リンカには、dlopen()されたモジュールがメインプログラムに設定されたものと同じdlsymフックの対象にならないようにするバグまたはセキュリティ機能があります。これは主に、Cで書かれたモジュールを動作させるためにdlopen()に大きく依存するperlやpythonなどのスクリプト言語に影響します。rootとして動作するという未確認の報告もあります。
musl libcはこのバグの影響を受けません。
便利なリンク:
以下のサイトはリークの確認に役立つかもしれません:
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - tor固有
http://ifconfig.me - curl経由で使用可能
http://ifconfig.io/
コミュニティ:
#proxychains on irc.libera.chat
寄付:
ビットコインでの寄付を歓迎します - 以下のアドレスに送金してください:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh