localhost
)インターフェイスの任意のポートでリッスンできます。したがって、前述のプログラムcanは、プロキシを経由せずに、ローカルポートにバインドし、任意のネットワークI/Oを実行します。CONNECT
ベースのSSL/TLSを許可します。Firefoxから発行されたHTTPおよびHTTPSリクエストを、上記のサーバーを介してSSL/TLS経由でルーティングしたいall。
http://superuser.com
)サーバーに対してSSL/TLSを使用していませんが、SSL/TLSを使用したいクライアントからサーバーへ、暗号化されているかどうかに関係なく、サーバーにHTTPリクエストを実行させます- -希望の目的地へ。https://google.com
。言い換えれば、私はtrustサーバーが私のデータの機密を保持します。私は次のことを説明する大まかに説明された「解決策」を探しています。
squid
をインストールして、サーバーに独自の標準HTTPプロキシを設定しようとしました。 Firefoxで通常のHTTPを介してWebサイトを要求すると、Firefoxも通常のHTTPを介してサーバーにアクセスしようとします!ローカルネットワーク上のプロキシが可能であるため、これは受け入れられません。もちろん、クライアントとサーバー間の通常のHTTPトラフィックを監視および/またはブロックします。tun
ネットワークアダプターをインストールする権限がないためです。 3ルーティング、またはレイヤー2ルーティング(例:tap
)を実行することもできません。つまり、OpenVPNをインストールするには管理者権限が必要であり、一時的に管理者権限を持っていたとしても、インストールされていることに気付いた場合、会社はそれほど満足しません。 Javaまたは.NETプログラムは、特にプログラムの追加と削除にインストールされておらず、OpenVPNのようなカーネルドライバーコンポーネントがない場合は、それほど目立ちません。私はそれを考え出した。 :Dこのソリューションは、私の要件のallを満たし、私の目標のallを完全に満たしています。これを達成するために必要な間接参照のレベルを考慮すると、パフォーマンスもそれほど悪くはありません。
したがって、一般的なアプローチは次のとおりです。
ローカル認証局(CA)をセットアップし、RSA「サーバーキー」と「クライアントキー」を生成します(私は256ビット暗号化を使用しました)。このために、私は Easy-RSA バージョン3.0.0-rc2を使用しました。
「DebianBox」(パブリックインターネット上のサーバー)で任意のbog標準HTTPプロキシを実行し、localhostのみでリッスンするようにします(パブリックインターネットに公開しないでください)。私の目的では Privoxy
を使用しましたが、Squid
も同様に機能します。ローカルホストでのみリッスンしているため、認証は必要ありません(信頼できないプロセスがボックスで実行されている場合を除きます。その場合、yikes ...)
stunnel をダウンロードして、クライアントとサーバーの両方にインストールします。これを行うプロセスはOS固有になります。私の場合、Windows用のソース(パラノイア...)からstunnelをコンパイルすることを選択しました。これは、ここでは詳しく説明しませんが、かなり複雑なプロセスでした。サーバー側では、パッケージマネージャーで利用可能でした:)
Stunnelの構成は最初はかなり気が遠くなるようなものでしたが、見た目よりも単純です。基本的に、サーバーには、以下の「サーバーのstunnel.conf」のようなものが必要です。クライアントでは、以下の「クライアントのstunnel.conf」のようなものが必要です。
Privoxyを起動します。サーバーでstunnelを起動し、構成ファイルをポイントします。クライアントでstunnelを起動し、構成ファイルをポイントします。 Privoxyの設定について特別なことは何もありません。デフォルトは私にとっては問題ありませんでした。
クライアント側で選択したブラウザであるFirefoxでは、HTTPおよびHTTPSプロキシを、クライアントのstunnelがリッスンしているポートと同じになるように設定します(おそらくlocalhost:8080など)。
ローカルネットワークのプロキシが何らかの認証を要求する場合は、stunnelを使用して認証するか、anotherローカルインターセプトプロキシを使用してそれらをチェーンする必要があることに注意してください。 Firefox-> stunnel->ローカル認証プロキシ-> LANプロキシ/ゲートウェイ->インターネット->サーバーのstunnel-> privoxy。
それはたくさんのコピーですが、うまくいきます!
;This is the *client's* stunnel.conf.
[https]
accept = localhost:9020
connect = your.lan.proxy:80
client = yes
protocol = connect
;protocolHost should be the same as the "accept" for the server
protocolHost = 1.2.3.4:443
;Same CAfile, different cert and key pair
CAfile = ca.crt
cert = client.crt
key = client.key
;VERY IMPORTANT!!! Make sure it's really your server and not a MITM attempt by your local network by making sure that the certificate authority "ca.crt" really signed the server's cert
verify = 2
;More performance tweaks...
sessionCachetimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600
。
;This is the *server's* stunnel.conf.
[https]
;1.2.3.4 is a publicly-routable, static IP address that can be connected to by your box that's under the firewall
accept = 1.2.3.4:443
;localhost:8118 is an example of where your local forwarding HTTP(S) proxy might reside.
connect = localhost:8118
CAfile = ca.crt
cert = server.crt
key = server.key
;VERY IMPORTANT!!! Without this, anyone in the world can use your public stunnel port as an open proxy!
verify = 2
;Set some timeouts higher for performance reasons
sessionCacheTimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600
すべてが構成されると、最終結果は次のようになります。
localhost:9020
(stunnel)に接続し、HTTPおよび/またはHTTPS接続を受け入れることができるプロキシのように扱います。stunnel
インスタンスサーバー上がデータの受信を開始すると、たとえば、 localhost:8118
。これは、HTTP(S)プロキシサーバー(私の場合はPrivoxy)がリッスンしている場所です。関係するソケットとバッファの量により、このメソッドのオーバーヘッドは非常に高くなります。特に、プロキシを介してSSL接続をネストしている場合は、しかしには利点がありますローカルネットワークには、SSL経由でアクセスしていることを知る方法がないことどのサイト。つまり、サーバーにアクセスしていることはわかっていますが、それ以外は、GmailやSuperUserなどにアクセスしているかどうかはわかりません。また、ローカルゲートウェイには、フィルタリングやブロックを行う方法がありません。
ローカルマシンでこの設定を試しましたが、「制限プロキシ」がCONNECT DEBIAN_IP:443 HTTP/1.1
を取得することは保証できますが、証明書が表示されないため、これが機能するかどうかはわかりません。
仮定しましょう:あなたのDebianにはプロキシを行うためのApache
またはSquid
がありますそして SSHサーバー。クライアントPCには、PuTTY
が必要です。これは、実行に管理者権限を必要とせず、インストールも不要で、ペンドライブから実行できるプログラムです。
まずあなたのDebian:
SSHをポート443
でリッスンさせ、Port 443
に/etc/ssh/sshd_config
を追加(または現在のポートを置き換える)し、TCP転送(add AllowTcpForwarding yes
そのファイル)
プロキシを実行するようにSquidまたはApacheを構成します。これはSSHトンネルを介して使用されるため、ループバックインターフェイスでリッスンするだけで済みます。 Apacheを使用する場合:
Listen 127.0.0.1:8080
ProxyRequests On
<Proxy *>
Order deny,allow
</Proxy>
サーバーが完了しました。クライアントPCを構成しましょう。
PuTTYで、DebianのパブリックIPをHost
として、443
をポートとして構成します。 SSH
がまだ選択されていることを確認してください。 Connection -> Proxy
設定に変更し、HTTP
を選択して、「制限付きプロキシ」設定を入力します。 Connection
設定に変更し、30
-60
のキープアライブを確立します。 Connection -> SSH -> Tunnels
に変更します。 source port
stablish 8080
、およびDestination
、localhost:8080
。 Local
を選択したままにして、Add
を押します。 L8080 locahost:8080
のようなものの上のスペースに表示されます。 Session
設定に戻り、Saved sessions
の最初の行に名前を書き留めますこれらの面倒な設定をすべて保存します次の日に接続を再確立できるようにします。
これで、Debianへの接続をOpen
することができます。ユーザープロンプトが表示された場合は、これを終了するための一歩です。そうでない場合は...別の方法を探す必要があります。
ここで、Firefoxで、ポート8080
のlocalhost
をプロキシとして設定します。
サーバーにプロキシを設定する途中です。残りの半分はサーバー上のSSLであり、PuTTYを使用してSSL対応のHTTPプロキシに接続し、Firefoxを設定してすべてを127.0.0.1にプロキシするクライアント上のローカルプロキシです。
私はPuTTYセットアップのために簡単なグーグルをしたところ、これを見つけました: https://mariobrandt.de/archives/technik/ssh-tunnel-bypassing-transparent-proxy-using-Apache-170/