匿名のstunnel5.29 + squid 3.3 SSLプロキシサーバーをいくつかの目的で構築しましたが、PSK認証を有効にしたいです。 stunnelサーバーの構成:
pid = /run/stunnel.pid
chroot = /var/lib/stunnel
client = no
setuid = stunnel
setgid = stunnel
cert = /etc/stunnel/stunnel.pem
debug = 7
;output = stunnel.log
foreground = yes
[server_psk]
accept = 443
accept = :::443
connect = 127.0.0.1:8443
ciphers = PSK
PSKsecrets = /etc/stunnel/psk.txt
[server_proxy]
accept = 8443
connect = 127.0.1:3128
sslVersion = all
ciphers = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PS
options = NO_SSLv2
options = NO_SSLv3
options = CIPHER_SERVER_PREFERENCE
しかし、インターネットに接続できないことがわかり、クライアント側で次のメッセージが表示されます。
LOG5[676]: Service [squid] accepted connection from 127.0.0.1:60216
LOG3[676]: s_connect: s_poll_wait 192.169.169.152:443: TIMEOUTconnect exceeded
LOG5[676]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
ブラウザ(Firefox 43)は2つのエラーを報告します、SSL Error
HTTPSでGoogleにアクセスしたときとConnection Reset
HTTPSが有効になっていないサイトにアクセスしたとき。クライアント側の構成は次のとおりです。
client = yes
[local_proxy]
accept = 127.0.0.1:8089
connect = 192.169.169.152:443
PSKsecrets = psk.txt
CAfile = ca-certs.pem
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3
Squidの構成が適切で機能していることを確認したので、問題はstunnelで発生すると確信しています。 stunnelの経験者が私を助けてくれる人はいますか?
一日研究した後、私はついに問題を解決する方法を発見しました。ヒントは次のとおりです。クライアント側は、サーバー側と同様に2つのセクションに分ける必要があります。したがって、クライアント側の構成を次のように変更します。
[local_psk]
client = yes
accept = 127.0.0.1:8443
connect = 192.168.169.152:443
PSKsecrets = psk.txt
[local_proxy]
client = yes
accept = 127.0.0.1:8089
connect = 127.0.0.1:8443
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3
したがって、プロセスは次のように動作します。
browser <--> [local_proxy] <--> [local_psk] <==> [server_psk] <--> [server_proxy] <==> website
ここで、-
はローカルトラフィックを意味し、=
はインターネットトラフィックを意味し、[]
はstunnelのconfigureセクションを意味します
そして、サーバー構成[squid]
セクションaccept
オプションを8443
から127.0.0.1:8443
に更新します。このtellstunnelは、localhostからの接続のみを受け入れます。それ以外の場合、[PSK]
セクションは役に立たなくなります。変更後の外観は次のとおりです。
[server_proxy]
accept = 127.0.0.1:8443
connect = 127.0.1:3128
sslVersion = all
ciphers = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PS
options = NO_SSLv2
options = NO_SSLv3
options = CIPHER_SERVER_PREFERENCE
これらの構成は、開発/テスト専用です。安全性の高い匿名プロキシサーバーが必要な場合は、squid構成とiptablesルールを適切に設定して、debug = 0
を設定してstunnel構成ファイルのログとデーモンのforeground = no
を無効にする必要があります。