web-dev-qa-db-ja.com

squid3をHTTPSプロキシとして正しく設定するにはどうすればよいですか?

与えられたチュートリアル here を使用して、squid3をHTTPSプロキシとしてセットアップしようとしています。ブラウザでプロキシ設定を適切に設定し、[〜#〜] http [〜#〜]Webサイトにアクセスしようとすると、正常に接続できます。ただし、[〜#〜] https [〜#〜]プロトコルWebサイトと/var/log/squid3/cache.logの次のエラー:

2016/06/20 19:12:47|  NF getsockopt(SO_ORIGINAL_DST) failed on local=<local_ip_address>:3129 remote=<remote_ip_address>:55209 FD 8 flags=33: (92) Protocol not available

これが私の/etc/squid3/squid.confファイルです(簡潔にするためにコメント行は削除されています)。

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /usr/etc/passwd
auth_param basic casesensitive off
auth_param basic credentialsttl 2 hours

acl user_auth proxy_auth REQUIRED

http_access allow user_auth

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # Gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

http_access allow localhost
http_access allow all
http_port 3127

https_port 3129 intercept ssl-bump generate-Host-certificates=on dynamic_cert_mem_cache_size=4MB key=/etc/squid3/example.com.private cert=/etc/squid3/example.com.cert

ssl_bump server-first all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error deny all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB sslcrtd_children 8 startup=1 idle=1
coredump_dir /var/spool/squid3

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^Gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

always_direct allow all

これが私のsquid3 -vの出力です。

Squid Cache: Version 3.3.8
 (Ubuntu)
configure options:  '--build=i686-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=/usr/share/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--enable-inline' '--enable-async-io=8' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid3' '--with-logdir=/var/log/squid3' '--with-pidfile=/var/run/squid3.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' 'build_alias=i686-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security'

私はこのエラーの検索に多くの時間を費やしましたが、squidをHTTPプロキシとして構成するソリューションに到達できませんでした。これを機能させるにはどうすればよいですか?

4
jobin

ブラウザーでプロキシー(CONNECTメソッド)を構成しているため、http_portではなくssl-bumpを使用してhttps_portディレクティブを使用することを検討する必要があるかもしれません。

パケットがiptablesを使用して自動的にプロキシに転送される場合、インターセプトモードは透過プロキシ(ブラウザ設定は不要)に適しています。 https_portディレクティブは、プロキシに到着するそのようなトラフィックを傍受して処理するために使用されます。

ssl-bump: http://www.squid-cache.org/Doc/config/ssl_bump/

このオプションは、http_portでCONNECT要求が受信された場合(または、新しい接続がhttps_portでインターセプトされた場合)に参照されます(ポートがssl-bumpフラグで構成されている場合)。接続の後続のデータはHTTPSとして処理され、最初に一致したバンピング「アクション」に応じて、復号化されずにORレベルで復号化されたTCPトンネルされます。

Ssl-bumpの例: http://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit

3
Diamond

エラー「NF getsockopt(SO_ORIGINAL_DST)」はNATエラーです。これは暗号化とは関係ありません。

プロキシを明示的に使用するようにブラウザを構成したので、

  • あなたは何も傍受していません。 「インターセプト」オプションの使用は間違っており、NATエラーが発生します。

  • ブラウザはプロキシへの接続にTLSを使用しません。これが、https_portの使用が間違っている本当の理由です。

  • ブラウザはプロキシのポート3127にCONNECTメッセージを送信します。これらは、「バンプ」する必要があるものです。

したがって、あなたがする必要があるのは、単にmove ssl-bump設定を既存のhttp_port行に追加することです。次のようになります。

 http_port 3127 ssl-bump\
 generate-Host-certificates = on\
 dynamic_cert_mem_cache_size = 4MB\
 key =/etc/squid3/example.com.private\
 cert =/etc/squid3/example.com.cert 

SSL-Bumpを正しく設定するためにすべき他のことは、次の行を削除することです:

 sslproxy_flags DONT_VERIFY_PEER 
 sslproxy_cert_error deny all 
 
 always_direct allow all 

それらは良いことよりも害があり、デバッグにも役立ちません。

また、プロキシを最新のアップストリームリリースにアップグレードします。 TLSとSSL-Bumpは、セキュリティの向上とそのセキュリティの復号化をめざして、急速に変化する武装競争に関与しています。最新より古いバージョンを使用すると、何らかの問題が発生することが保証されます。 Squid-3.3は特に、楕円曲線およびその他の最近の暗号に問題があり、TLSセッション再開が使用されると中断し、SNIを使用して証明書の固定をバイパスできず、SHA-1証明書を生成します。

2
Amos Jeffries