Socks プロキシ

SOCKSプロキシとHTTPプロキシの違いについて勉強してみた

ちょっと話題の記事
パケットを眺めながらSOCKSプロキシとHTTPプロキシの違いについて勉強してみました。
はじめに
サーバーレス開発部@大阪の岩田です。
先日接続元IPアドレスをクラスメソッドのGIPに制限した検証環境を利用してAPIのテストを行なっていたところ、リモートワーク中のメンバーが検証環境に接続できないという状況が発生しました。
下記の記事で紹介されているように、クラスメソッドではSOCKSサーバーが構築されているので、VPN経由で社内NWに接続し、SOCKSサーバーをプロキシとして利用すれば本来リモート環境からでも検証環境が利用できるはずです。
VPN利用者のためにdelegateでSOCKSサーバーを立ててみました
最初はcurlコマンドのオプションに–proxyを付けてプロキシサーバーを指定するようお願いしたのですが、–proxy ような指定を行なっていたようで、問題が解決しませんでした。
結局–proxy socks5のように指定してもらうことで解決したのですが、よく考えたらSOCKSプロキシについて何も知らなかったので、勉強のためにHTTPプロキシとの違いについて調査してみました。
HTTPプロキシとは
まずHTTPプロキシについてのおさらいです。
プロキシとはHTTPなどの通信を中継するための仕組みで、クライアントとサーバーの通信経路の間で
通信内容を転送する
通信内容を改変して転送する
サーバーの代わりにクライアントに応答する
といった処理を行います。
HTTP/1. 1ではプロキシを下記のように定義しており、リクエスト・レスポンスの改変を行わないプロキシは透過プロキシ、リクエスト・レスポンスの改変を行うプロキシは非透過プロキシと呼ばれます。
An intermediary program which acts as both a server and a client
for the purpose of making requests on behalf of other clients.
Requests are serviced internally or by passing them on, with
possible translation, to other servers. A proxy MUST implement
both the client and server requirements of this specification. A
“transparent proxy” is a proxy that does not modify the request or
response beyond what is required for proxy authentication and
identification. A “non-transparent proxy” is a proxy that modifies
the request or response in order to provide some added service to
the user agent, such as group annotation services, media type
transformation, protocol reduction, or anonymity filtering. Except
where either transparent or non-transparent behavior is explicitly
stated, the HTTP proxy requirements apply to both types of
proxies.
HTTPへのアクセスをプロキシする場合
HTTPプロキシ経由でHTTPのリクエストを行う場合、リクエスト・レスポンスの改変を伴わないシンプルなパターンは下記のようなシーケンスになります。
クライアントが3way hand shakeでHTTPプロキシとTCPのコネクションを確立
クライアントがHTTPプロキシに対してHTTPリクエストを送信。この際パスを/mlといった形式ではなくいう形式でリクエストする
HTTPプロキシが/mlというパスでサーバーにリクエストを送信
HTTPプロキシがサーバーから受け取ったレスポンスをクライアントに返却
HTTPSのアクセスをプロキシする場合
次にHTTPプロキシ経由でHTTPSのリクエストを行う場合ですが、HTTPの場合と異なりメッセージが暗号化されているため、プロキシがメッセージの中身を覗き見て適切な処理を行うことができません。
そこで、HTTPS通信をプロキシするにHTTP/1. 1で追加されたCONNECTメソッドを利用します。
CONNECTメソッドはHTTPのプロトコルの上に他のプロトコルのメッセージを流せるようにするメソッドです。
通信のシーケンスとしては
クライアントがHTTPプロキシに対してCONNECTのリクエストを送信
HTTPプロキシが3way hand shakeでサーバーとTCPのコネクションを確立
HTTPプロキシがクライアントに準備完了のレスポンスを返却
クライアントがTLSやSSLのメッセージをHTTPでカプセル化してHTTPプロキシに送信
HTTPプロキシがHTTPのカプセル化を解除してTLSやSSLのメッセージをサーバーに送信
HTTPプロキシがサーバーから受け取ったレスポンスをHTTPでカプセル化してクライアントに返却
といった流れになります。
SOCKSプロキシとは
続いてSOCKSプロキシです。
SOCKSプロキシとはL4の通信を中継・代理する透過的なプロキシプロトコルSOCKSを利用するプロキシのことです。
SOCKSには基本となるSOCKS4と、SOCKS4の拡張であるSOCKS4a、SOCKS5というプロトコルが存在します。
SOCKS4については下記のサイトに分かりやすくまとまっていました。
かいつまんで説明するとクライアントがSOCKSサーバーに対してCONNECTもしくはBINDというコマンドを発行し、サーバーへのメッセージ転送を要求。リクエスト成功後、SOCKSサーバーが透過的にクライアント⇄サーバーの通信をプロキシする。
なお、個人的に重要だと思ったことですがHTTPプロキシを利用する場合、サーバーの名前解決はプロキシが行いますが、SOCKSプロキシを利用する場合、サーバーの名前解決はクライアントが行います。
クライアントがHTTP等のメッセージをSOCKSでカプセル化する際に、サーバーのIPアドレスと・ポート番号まで含めてカプセル化するような挙動となります。
※2018/8/25追記 Twitterで指摘を頂いたので追記します。
後述するSOCKS5からはプロキシ側に名前解決させることも可能になっています。
クライアントがプロキシに対してリクエストを行う際に、ATYP(Address Type)にDOMAINNAMEを指定することでプロキシ側で名前解決を行うことが可能です。
一例ですが、curlコマンドであれば–proxyオプションの指定をsocks5hxxxxとすることで、プロキシ側で名前解決させることが可能です。
実際にパケットキャプチャで確認すると、以下のような結果になりました。
クライアント側で名前解決する場合
プロキシに名前解決させる場合
SOCKS5
SOCKS5はSOCKS4を拡張したプロトコルで、SOCKS4と比較すると
TCPだけでなくUDPにも対応
クライアントの認証機能が充実している
といった特徴を持ちます。
SOCKS5についてはRFC化されており、下記のリンクから詳細を確認することができます。
SOCKS5を用いた通信シーケンスは下記のようになります。
クライアントが3way hand shakeでSOCKSサーバーとTCPのコネクションを確立
クライアントがSOCKSサーバーに対して認証のリクエストを発行
SOCKSサーバーがクライアントに対して認証のレスポンスを返却
クライアントがSOCKSサーバーに対してSOCKS5のコマンド(CONNECTもしくはBINDもしくはUDP ASSOCIAT)を発行
SOCKSサーバーがクライアントに準備完了のレスポンスを返却
SOCKSサーバーが3way hand shakeでサーバーとTCPのコネクションを確立
SOCKSサーバーががクライアントに準備完了のレスポンスを返却
クライアントがHTTP等のメッセージをSOCKS5でカプセル化してSOCKSサーバーに送信
SOCKSサーバーがSOCKS5のカプセル化を解除してHTTP等のメッセージをサーバーに送信
SOCKSサーバーがサーバーから受け取ったレスポンスをSOCKS5でカプセル化してクライアントに返却
この記事ではSOCKS5を用いて動作を確認しました。
検証
実際に下記のような環境を構築し、tcpdumpでパケットキャプチャを行ないながらcurlコマンドでリクエストを発行し、パケットの中身を分析してみました。
同一のVPC内に3台のEC2を構築、それぞれクライアント、プロキシ、Webサーバーとして利用
プロキシサーバーにはHTTPプロキシ用にSquidをインストール、SOCKSプロキシ用にdelegateをインストール
Squid、delegateの設定はインストール直後から原則変更無し クライアントからのアクセス許可のみ追加
hostsファイルを使ってclient、proxy、webという名前でお互いに名前解決できるように設定
キャプチャ結果
パケットキャプチャの結果は次のようになりました。
HTTPプロキシでアクセス
curl web –proxy proxy:8080
クライアント上でのキャプチャ結果
クライアント上でのキャプチャ結果がこちらです。
上記画像のNo4でプロキシに対してHTTPのリクエストを行なっている箇所の詳細です。
プロキシに対してリクエストしているURIがweb/となっており、ホストヘッダはWebサーバーの名前であるwebとなっています。
プロキシ上でのキャプチャ結果
次に、プロキシ上でのキャプチャ結果です。
クライアントからGETリクエストを受け付けた後、サーバーに対してGETリクエストを送信しています。
その際リクエスト先のURIがweb/から/に変わっています。
その後サーバーから200のレスポンスを受け、クライアントに200のレスポンスを返却しています。
上記画像のNo6でクライアントからHTTPのリクエストを受信している箇所の詳細です。
No13でサーバーに対してHTTPのリクエストを行なっている箇所の詳細です。
GETするパスが変わっていたり、X-Forwarded-ForやViaといったHTTPヘッダが増えたりしているのが分かります。
サーバー上でのキャプチャ結果
最後にサーバー上でのキャプチャ結果です。
上記画像のNo4でプロキシからHTTPのリクエストを受信している箇所の詳細です。
サーバーから見るとリクエスト元はプロキシであり、TCPレベルではクライアントの存在が隠蔽されています。
次にHTTPプロキシを介してHTTPSのサイトにアクセスしてみます。
curl web –proxy proxy:8080 -k
クライアント上でのキャプチャ結果はこちらです。
アクセス先のURIがからに変わったことにより、プロキシに対して発行するHTTPのメソッドがGETからCONNECTに変わっています。
上記画像のNo4でCONNECTメソッドを呼んでいる箇所の詳細です。
上記画像のNo8でプロキシサーバーとTLSのHandshakeを行なっている箇所の詳細です。
TLS関連のメッセージがHTTPでカプセル化されていることが分かります。
クライアントClient Helloのリクエストを受けた直後、そのままサーバーにClient Helloのリクエストを投げています。
その後サーバーからServer Helloの応答を受けた後、クライアントに対してServer Helloの応答を返しています。
上記画像のNo12でWebサーバーとTLSのHandshakeを行なっている箇所の詳細です。
先ほどのクライアント→プロキシの通信と見比べると、HTTPのカプセル化が解除されているのが分かります。
完全にクライアントの存在が隠蔽されています。
SOCKSプロキシでアクセス
ここからSOCKSプロキシを使うパターンを見ていきます。
curl web –proxy socks5proxy:1080
上記画像のNo4でSOCKSサーバーにConnectコマンドを発行している箇所の詳細です。
接続確立後にSOCKSサーバー経由でHTTPのリクエストを行なっている箇所の詳細です。
HTTPのメッセージがSOCKSでカプセル化されていることが分かります。
上記画像のNo4でWebサーバーにHTTPのリクエストを行なっている箇所の詳細です。
SOCKSのカプセル化が外れていることが分かります。
この辺りの挙動はHTTPプロキシ経由でHTTPSのスキームにアクセスする時と良く似ていますね。
上記画像のNo4でプロキシからHTTPのリクエストを受けている箇所の詳細です。
HTTPプロキシを経由する場合と比べると、HTTPヘッダーが少ないことが分かります。
curl web –proxy socks5proxy:1080 -k
上記画像のNo10でプロキシにTLSのHandshakeメッセージを送信している箇所の詳細です。
上記画像のNo14でプロキシからサーバーにTLSのHandshakeメッセージを送信している箇所の詳細です。
SOCKSでのカプセル化が外れていることが分かります。
上記画像のNo4でプロキシからTLSのHandshakeメッセージを受信している箇所の詳細です。
サーバーから見る限りは、HTTPプロキシを介してのスキームでアクセスされているのと同じような見え方です。
まとめ
ちょっとしたきっかけからSOCKSプロキシとHTTPプロキシの違いについて調査してみました。
SOCKSもHTTPも真新しい技術ではありませんが、こういった基本的なプロトコルに対する理解を深めるのは非常に有用だと考えています。
真新しい技術を追いかけるのも楽しいですが、たまには立ち止まって普段利用している技術を深掘りしていくような時間も作っていけたらと思います。
参考
SOCKS - Wikipedia

SOCKS – Wikipedia

足に履く「ソックス」については「靴下」をご覧ください。
SOCKSは、インターネット・プロトコル・スイートにおいて、Transmission Control Protocol(TCP)および User Datagram Protocol(UDP)による通信を代理するプロキシのプロトコルである。主にTCPのために設計されている。認証の機能の規定もあるため、それが実装されていれば認証にもとづき、認可された接続のみ接続を許可するような設定もできる。DARPAモデルの観点からは、3番めの層にあるTCP及びUDPによる通信を代理するものであり、使い方にも依るが通常は4番目のアプリケーション層からは透過ではない。例えばウェブブラウザのようなアプリケーションから利用する場合は、ネットワーク接続に関する設定として明示的にプロキシとして指定が必要である。ポート番号には1080がよく使われている[1][2]。
歴史[編集]
SOCKSは当初、MIPS Computer Systemsのシステム管理者であるDavid Koblasによって開発された。Koblasは、MIPS Computer Systemsが1992年にSilicon Graphicsによって吸収合併された後に、その年のUsenix Security SymposiumでSOCKSの研究論文を公開した。これによりSOCKSはパブリックに利用できるようになった[3]。SOCKSは、NECのYing-Da Leeによってバージョン4に拡張された。
SOCKS関連のアーキテクチャやクライアントはPermeo Technologiesが所有している[4]。なお、Permeo Technologiesは、NECからスピンオフしたBlue Coat Systems[5]によって吸収合併された[6]。
SOCKS5プロトコルは、もともとはファイアウォールの一部として、他のセキュリティ製品とともに管理を容易にするために作られたセキュリティプロトコルだった[7]。1996年にIETFによって承認された[7]。SOCKS5は、アジア外の技術を販売している企業Aventail Corporationの協力のもとに開発された[8]。
使用例[編集]
SOCKSは迂回のためのツールとしても使用されることがある。たとえば、政府、職場、学校、特定の国限定のウェブサービスなどで、インターネットのコンテンツへのアクセスフィルタやブロッキングが行われている場合に、それらを回避することができる[9]。
たとえば、Tor onion proxyソフトウェアは、クライアントに対して、SOCKSインターフェイスを提供している[10]。
OpenSSHはSOCKSプロトコルを利用した「動的ポートフォワード」の機能を持っている。SSHサーバ側で許可されていれば、クライアント側からは ssh(1) コマンドにある -D オプションで利用でき、sshコマンドのプロセスがローカルなSOCKSプロキシのようにして見えるようになる。そのプロキシへの接続はSSHサーバ側へポートフォワードされ、最終的な接続先からはSSHサーバからのアクセスとして見える。[11]。
サイバー犯罪における使用[編集]
クラッキングされたコンピュータには、ボットネットの制御を隠したりクレジットカード詐欺等といった、マルウェア的な目的のために、SOCKS proxyソフトウェアが設定されることがある[12][13][14][15]。
解説[編集]
この節は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。出典検索? : “SOCKS” – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · · ジャパンサーチ · TWL(2018年8月)
SOCKSは、ネットワーク・ファイアウォール越えやアクセス制御等を目的として、クライアントサーバ型のプロトコルが、透過的に使用できるよう設計されたプロキシ(proxy)のプロトコル、及びシステム(の一つ)である。”SOCKetS” [16] の略。
いわゆるTCP/IPの4層モデル(インターネット・プロトコル・スイートのDARPAモデル)の観点からは、Internet Protocol(IP)の上の、TCPやUDP(ただしUDPに関しては有用性が限られる)のようなトランスポート層における通信の手続きを中継・代理するメカニズムとなっている。SOCKSサーバ自身とクライアント間の通信はストリーム指向であり、一般にはLAN内からTCPで接続する。
プロトコル上は多段にもできるが、原理の説明には1段階で十分なので、以下はそのような前提とする。またファイアウォールを設けないシステムでもユースケースは考えられるが、以下ではファイアウォールの存在を前提とする。
似たような目的のための他のプロキシ類と同様、SOCKSサーバはその目的から、内外のネットワークの両方が見えるファイアウォール自身、あるいはDMZ内に置く。そうでない場合は、SOCKSサーバのみは外部との通信を可能にする、あるいは、内部からSOCKサーバにだけは通信を可能にする、といったような設定が必要となる。
そして、内側から外部に通信する必要があるノードは、代わりにSOCKSサーバに接続し、SOCKSサーバがプロキシとして代わりに外部と通信する。SOCKSプロキシは、例えば、クライアントが外部サーバにアクセスする資格を制御するなどといった、認証や認可を掛けることもできる。SOCKSはまた正反対にも使用することができる。つまり、ファイアウォールの外側の許可された外部クライアントのみが、物理的にはファイアウォールの内側にある、公開のサービスを提供するサーバのみに接続できるようにする、といった用途のための設定もできる。
プロトコル[編集]
SOCKS 4[編集]
標準の SOCKS 4 接続では、以下のような通信が行われる。
SOCKS クライアントからサーバ:
フィールド 1: SOCKS バージョン番号, 1バイト, このバージョンでは 0x04 でなくてはならない
フィールド 2: コマンドコード, 1バイト:
0x01 = TCP/IP ストリーム接続を確立する
0x02 = TCP/IP ポートバインディングを確立する
フィールド 3: ネットワークバイトオーダのポート番号, 2バイト
フィールド 4: ネットワークバイトオーダの IP アドレス, 4バイト
フィールド 5: ユーザID文字列, 可変長, null (0x00) で終了させる
SOCKS サーバからクライアント:
フィールド 1: null バイト
フィールド 2: 状態, 1バイト
0x5a = リクエストの許可
0x5b = リクエストの拒絶または失敗
0x5c = リクエストはクライアントが identd を起動していなかったので失敗(もしくは、サーバから到達できなかった)
0x5d = リクエストはクライアントの identd がリクエストにユーザID文字列を確認できなかったので失敗
フィールド 3: 任意の2バイト, 無視されなければならない
フィールド 4: 任意の4バイト, 無視されなければならない
例:
これは、66. 102. 7. 99:80にユーザ「Fred」を接続する SOCKS 4 のリクエストである。そして、サーバは、”OK”の返事をする。
クライアント: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
最後のフィールドは ASCII コードの「Fred」であり、次に1バイトの null が続く
サーバ: 0x00 | 0x5a | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
0xXX は全てのバイト値になることができる。 Socks 4 プロトコルはそれらのバイト値が無視されなければならないことを規定している。
この時点以降、 SOCKS クライアントから SOCKS サーバまで送る全てのデータは66. 99に向けて中継される。そして、 SOCKS サーバから SOCKS クライアントに送る場合も同様である。
コマンドフィールドは、 “connect” で 0x01 、あるいは、 “bind” で 0x02 になることができる。 “bind” は動作中の FTP のようなプロトコルのために入ってくる接続を許可する。
SOCKS 4a[編集]
SOCKS 4a は、 SOCKS 4 プロトコルのシンプルな拡張機能であり、宛先ホストのドメイン名を解決できないクライアントがドメイン名を指定することを可能にする。
クライアントは宛先アドレスの最初の3バイトを NULL に、そして最後のバイトを0でない値に設定すべきである(これは、x を非零の値として、 IP アドレス 0. 0. x に対応する。この値は宛先アドレスとして使用してはならない。したがって、この値は、もしクライアントがドメイン名を解決できるならば、決して設定するべきではない。)。
ユーザ ID を終了する NULL バイトの次に、クライアントは宛先ドメイン名を送らなければならない、そして、それを別の NULL バイトで終了させなければならない。これは “connect” と “bind” の両方のリクエストに使われる。
フィールド 5: ユーザ ID 文字列, 可変長, null (0x00) で終了させる
フィールド 6: 接続先のホストのドメイン名, 可変長, null (0x00) で終了させる
0x5d = リクエストはクライアントの identd がリクエストにユーザ ID 文字列を確認できなかったので失敗
4A プロトコルを使用するサーバはリクエストパケット内の宛先アドレスをチェックしなければならない。宛先アドレスが、 x を非零の値としてアドレス 0. x を表現するならば、サーバはクライアントがパケット内に送付するドメイン名を読み込まなければならない。サーバはドメイン名を解決すべきであり、そしてそれが可能であるならば、宛先ホストへの接続を確立しなくてはならない。
SOCKS 5[編集]
より多くの認証の選択を提供する SOCKS 4 プロトコルの拡張である SOCKS 5 プロトコルは RFC 1928 内で定義されている。最初のハンドシェイクは下記の事項から成り立つ。
クライアントは接続し、サポートされた認証方法のリストを含む挨拶を送る。
サーバは一つ選ぶ(もしくは、提供されたメソッドがアクセスできないならば、失敗の応答を送る)。
いくつかのメッセージが、選択された認証方法に応じて、クライアントとサーバーの間を送受信される。
クライアントは、接続要求を SOCKS 4 と同じように送る。
サーバは SOCKS 4 と同じように応答する。
サポートされた認証方法は次の通りに番号を割り付けている:
0x00 – 認証なし
0x01 – GSSAPI
0x02 – ユーザ名/パスワード
0x03-0x7F – IANA により割り当てられたメソッド
0x80-0xFE – プライベート使用のために予約されたメソッド
クライアントからの最初の挨拶:
フィールド 1: SOCKS バージョンナンバ(このバージョンでは 0x05 でなくてはならない)
フィールド 2: サポートされた認証方法の数, 1バイト
フィールド 3: 認証方法, 可変長, サポートされたメソッドにつき1バイト
サーバの選択が伝えられる:
フィールド 1: SOCKS バージョン, 1バイト(このバージョンでは 0x05 でなくてはならない)
フィールド 2: 選択された認証方法, 1バイト, もしくはアクセスできないメソッドが提供した 0xFF
次の認証は認証方法によって異なり、 RFC 1929 で記述されている。
クライアントの認証要求:
フィールド 1: バージョン番号, 1バイト( 0x01 でなくてはならない)
フィールド 2: ユーザ名長, 1バイト
フィールド 3: ユーザ名
フィールド 4: パスワード長, 1バイト
フィールド 5: パスワード
認証のためのサーバの応答:
フィールド 1: バージョン, 1バイト
フィールド 2: 状態コード, 1バイト
0x00 = 成功
他の全ての値 = 失敗, 接続は終了されなければならない
クライアントの接続要求:
フィールド 1: SOCKS バージョン番号, 1バイト(このバージョンでは 0x05 でなくてはならない)
0x03 = UDP ポートを結合させる
フィールド 3: 予約されている, 0x00 でなければならない
フィールド 4: アドレスタイプ, 1バイト:
0x01 = IPv4アドレス
0x03 = ドメイン名
0x04 = IPv6アドレス
フィールド 5: 宛先アドレス
IPv4 用の4バイト
1バイトのドメイン名長に続けて、ドメイン名
IPv6 用の16バイト
フィールド 6: ネットワークバイトオーダのポート番号, 2バイト
サーバの応答:
フィールド 1: SOCKS プロトコルバージョン, 1バイト(このバージョンでは 0x05 でなくてはならない)
フィールド2: 状態, 1バイト
0x00 = リクエストの許可
0x01 = 一般的な失敗
0x02 = ルール設定により許可されない接続
0x03 = 到達できないネットワーク
0x04 = 到達できないホスト
0x05 = 宛先ホストにより拒否された接続
0x06 = TTL の期限切れ
0x07 = サポートされていないコマンド/ プロトコルエラー
0x08 = サポートされないアドレスタイプ
フィールド 4: アドレスの種類, 1バイト:
0x01 = IPv4 アドレス
0x04 = IPv6 アドレス
フィールド 5: サーバ側でbindされたアドレス
SOCKSによって外部ネットワークに接続する、全てのネットワーク・ソフトウェアの適合を可能にする “socksify”[1] というクライアント用のプログラムがある。
ソフトウェア[編集]
Dante は Inferno Nettverk A/S によって開発され、商業的サポートを伴ったオープンソースの SOCKS4/SOCKS5 実装である。
DeleGate 多機能なProxyソフトウェア。SOCKS4/SOCKS5サーバとしての他、多段プロキシ的に自身の接続のためにSOCKSを使うクライアントとしての機能もある。
FreeCap Windows 用の Socksifyer, 全てのアプリケーションは、一つの SOCKS あるいは HTTP proxy によって、そのネットワークトラフィックを透過的に実行することができる。
Kernel SOCKS Bouncer ksb26 (Kernel Socks Bouncer) は socks 4/5 chains を介して、TCP接続(ユーザが定義した目的ホストに向けて)をリダイレクトする Linux Kernel 2. 6. x Loadable Kernel Module である。
OpenSSH は、動的ポートフォワード機能を利用するためのインタフェースのひとつとして、SOCKS プロトコルを使うことができる。OpenSSH クライアントを仮想的な SOCKS サーバの受付側にすることができ、接続先の OpenSSH サーバが仮想的な SOCKS サーバの出口側となって、クライアントからのネット接続を代理する。
SOcat Multipurpose は (SOcket CAT) を中継する: socks4 とsocks4a の機能性を含む (Linux / Mac)
SS5 Socks Server はオープンソースの SOCKS4/SOCKS5 サーバである.
Tor
WinSocks は Proxy Labs により開発された軽量 SOCKS4/SOCKS5 サーバである。
参考文献[編集]
^ RFC 1928
^ “Service Name and Transport Protocol Port Number Registry”. Internet Assigned Numbers Authority (2017年5月19日). 2017年5月23日閲覧。
^ Darmohray, Tina. “Firewalls and fairy tales”. ;LOGIN:. Vol 30, no. 1.
^ (broken link as of July 2008)
^ News Release from Bluecoat
^ Article from
^ a b RFC 1928
^ CNET: Cyberspace from outer space
^ “2010 Circumvention Tool Usage Report”. The Berkman Center for Internet & Society at Harvard University (2010年10月). 2018年8月20日閲覧。
^ “Tor FAQ”. I want to run another application through Tor.. 2018年8月28日閲覧。
^ “OpenSSH FAQ”. 2002年2月1日時点のオリジナル[リンク切れ]よりアーカイブ。
^ “How to chain socks with Tor” 2017年1月23日閲覧。
^ Graham, James. Cyber Fraud. p. 45
^ Krebs, Brian (2016年10月16日). “IoT Devices as Proxies for Cybercrime” 2017年1月23日閲覧。
^ van Hardeveld, Gert Jan; Webber, Craig; O’Hara, Kieron. Discovering credit card fraud methods in online tutorials 2017年8月23日閲覧。.
^ Hummingbird SOCKS FAQ
外部リンク[編集]
draft-ietf-aft-socks-chap Challenge-Handshake Authentication Protocol for SOCKS V5
RFC 3089 – A SOCKS-based IPv6/IPv4 Gateway Mechanism
RFC 1961 – GSS-API Authentication Method for SOCKS Version 5
RFC 1929 – Username/Password Authentication for SOCKS V5
RFC 1928 – SOCKS Protocol Version 5
SOCKS: A protocol for TCP proxy across firewalls – SOCKS Protocol Version 4 (NEC)
SOCKSプロキシとは何ですか?それをどのように使用します ...

SOCKSプロキシとは何ですか?それをどのように使用します …

SOCKSプロキシとは何ですか?インターネットにはあらゆる種類のプロキシとプロトコルがありますが、「SOCKets」の略であるSOCKSのような楽しい名前は誰も持っていません。最も一般的なプロキシSOCKS5と、なぜ頻繁に使用されるのかを分析してみましょう。 SOCKSまたはSOCKS5プロキシとは何ですか? SOCKSプロキシは通常、ブラウザ拡張機能としてインストールするか、VPNプロバイダーのプロキシサーバーを使用するようにトレントクライアントを構成することにより使用されます。 SOCKSプロキシは、プロキシサーバーを介してトラフィックをチャネリングすることで機能します。 プロキシサーバーは、情報を目的の宛先に渡します。 SOCKSプロトコルは、最初にプロキシサーバーとのTCP接続を確立することでこれを実現します。その後、コンピューターはプロキシサーバーにデータを送信し、プロキシサーバーはそのデータを宛先に渡します。たとえば、別の国でホストされているWebサイトにアクセスするとします。このウェブサイトは、海外から接続する人をブロックします。このブロックを回避するには、ホスト国にあるSOCKSプロキシを使用できます。プロキシ経由でWebサイトに接続すると、Webサイトにはあなたの代わりにプロキシサーバーのIPアドレスが表示されます。サーバーはホスト国にあるため、Webサイトはそのデータをプロキシサーバーに送信し、プロキシサーバーはそのデータをユーザーに送信します。 「通常の」プロキシサーバーとの違いは何ですか?しかし、ちょっと待ってください!ここで行ったことは、「通常の」プロキシサーバーがどのように機能するかを説明することです。おそらくインターネットでそれらを見たことがあります。ジオブロッキングを回避したり、身元を隠すために無料のプロキシサーバーを提供するWebサイト。これらはHTTPプロトコルを使用するため、「HTTPプロキシ」と呼ばれます。では、HTTPプロキシとSOCKSプロキシの違いは何ですか? SOCKSプロキシは複数のプロトコルで動作します 1つは、HTTPプロキシサーバーがHTTPプロトコルでのみ機能することです。ただし、SOCKSにはそのような忠誠心はありません。 HTTPを含む多くのプロトコルで動作します。コンピュータサイエンスの用語では、「低レベル」SOCKSプロキシと「高レベル」HTTPプロキシを呼び出します。これらの「レベル」は、ソフトウェアの専門性を示します。レベルが高いほど、ソフトウェアの専門性が高まります。たとえば、世界の言語を取り上げてみましょう。フランス語を構成する「レベル」を見ると、次のように分類できます。 Planet Earth言語>ヨーロッパ言語>フランス語この場合、「高レベルドメイン」はフランス語です。これは、Planet Earthの各言語に特化したカテゴリです。フランス語を専門とする人はフランス語しか話せません。同様に、HTTPプロキシはHTTPプロトコルとのみ対話できます。一方、「ローエンド」には、より広い用途があります。 SOCKSプロトコルは、すべてのヨーロッパ言語を理解する人のようなものです。特殊化はなく、HTTPを含む複数のプロトコルを処理できます。フランス語を含むヨーロッパのすべての言語を知っている人に似ています。その結果、SOCKSは電子メール用のPOPなどの他のプロトコルを管理するための最適なソリューションです。ファイアウォールの周りのSOCKSプロキシスカート SOCKSはTCPを使用してサーバーに接続するため、HTTPトラフィックと同じルートを移動する必要はありません。そのため、HTTPポートを制御するファイアウォールがある場合、SOCKSはHTTPを使用している場合でもそれを回避できます。これは、ファイアウォールがWebサイトをブロックすることなく、制限されたコンテンツを閲覧するのに役立ちます。 HTTPプロキシはHTTP要求をより適切に処理しますただし、HTTPプロキシの特殊な性質はまったく悪くありません。 HTTPプロキシは、SOCKSプロキシよりも着信HTTPデータを処理できます。これは、HTTPプロキシがプロトコルに特化しており、SOCKSプロキシよりもHTTP処理用のツールが多いためです。たとえば、特定のページのインターネットをスクレイピングする場合、SOCKSプロキシは考えられません。ページが出てきたときにページを管理するための特別なツールはありません。つまり、関連性のないWebページが大量にダンプされることになります。ただし、HTTPプロキシにはWebスクレイピング用のツールがあります。特定の性質のWebページ(最終的なクリスマスショッピングのおもちゃページなど)を検索するためにそれを言うことができ、条件に対応するものだけを提供します。 SOCKS5とは何ですか? SOCKSサーバーをすばやく参照すると、「SOCKS5」という用語が表示されます。最後の5は、Windows 7、8、10と同様に、SOCKSプロトコルのバージョン番号です。この記事の執筆時点では、SOCKS5はSOCKSプロトコルの最新バージョンです。 UDPとTCPをサポートしてSOCKS4を強化し、複数の認証方法を提供します。 SOCKS4よりも高速です。 SOCKS5は、 いつかMullvad VPNで使用されるShadowsocksのようなテクノロジーに置き換えることができます 。 SSH SOCKSプロキシとは何ですか? SOCKSプロキシの最大の欠点の1つは、暗号化の欠如です 。誰かが暗号化を使用しないプロトコルを使用している場合、侵入者はコンピューターをサーバーに残しながらデータを監視できます。このため、プライベートWi-Fiホットスポットを使用してプライベートビジネスを行うことはできません。幸いなことに、ユーザーは問題を自分の手に取り、SSH暗号化を使用してデータを隠すことができます。コンピューターとプロキシサーバーの間にSSHトンネルを確立することにより、ユーザーはpr索好きな目から自分の詳細を隠すことができます。 SOCKS5プロキシの使用方法これらすべてを試してみたいと思う場合は、SOCKS5プロキシの設定はそれほど難しくありません。開始するには、プロキシとして機能するサーバーが必要です。自分で設定するか、代わりに使用する無料のSOCKS5プロキシを見つけることができます。サーバーを使用する必要がある場合は、 Spys One SOCKS5プロキシリストを試してみてください。有料または無料のSOCKSプロキシを取得したら、それを使用するプログラムに詳細を入力する必要があります。現在、最新のブラウザのほとんどでは、プロキシサーバーの詳細を入力して使用することができます。さらに、Windows 10などのオペレーティングシステムはプロキシアドレスを受け入れ、送信されたすべてのデータをリダイレクトします。サーバーをセットアップしたら、Webページをロードしてテストします。すべてのプロキシサーバーが機能するわけではないため、接続できない場合は、別のサーバーを試すか、プロキシ設定を再確認してください。 Webページが読み込まれている場合は、 WhatIsMyIPAddressにアクセスして、IPと国が接続先のプロキシサーバーに対応しているかどうかを確認します。もしそうなら、あなたはSOCKS5で閲覧しています!無料のSOCKS5プロキシ:FoxyProxyアドオン無料のSOCKSプロキシから始めるのに適した場所は、Firefoxブラウザ用のFoxyProxyアドオンを使用することです。 FoxyProxyは100%無料です。さらに、無料試用版サブスクリプションの一部としてプロキシを含むVPNサービスにサインアップする場合、SOCKS5プロキシを構成することもできます。 ダウンロード : FoxyProxy Firefoxアドオン (無料)無料のSOCKS5 VPNプロバイダー他の方法としては、プロキシをオプションとして提供するVPNサービスを使用する方法があります。プロキシを無料で入手するには、無料トライアルサブスクリプションに登録するだけです。たとえば、CactusVPNとWindscribe VPNはどちらも、VPNサービスの無料試用版を提供しています。 ダウンロード : Windscribe Chrome拡張機能 (無料)セキュリティを強化するためのプロキシの使用 HTTPプロキシは最も一般的に使用されるプロキシサーバーですが、SOCKS5には利点があります。複数のプロトコルを管理し、ファイアウォールをバイパスできるため、多くの作業を必要とせずにプライバシーを必要とするユーザーにとって貴重なツールになります。完全に無料でインストールを必要としないプロキシ技術の実用的なアプリケーションは、 プロキシ検索エンジンです。プロキシ検索エンジンは、プロキシを介してすべての検索クエリを実行します。これにより、個人情報が犯罪者やスヌーパーの手に渡らないようにできます。 画像クレジット:Funtap / Depositphotos記事全文を読む: SOCKSプロキシとは何で、どのように使用しますか? SOCKSプロキシとは何ですか?また、どのように使用しますか? TecnoBabele-から来ています。(出典)

Frequently Asked Questions about socks プロキシ

Leave a Reply

Your email address will not be published. Required fields are marked *