ããããã®èšäºãèªãã åŸãã¢ã€ãã¢ã¯Squidã«TorãéããŠåã ã®URLãèš±å¯ããããã«æããŸããã ãã®ãããªæ¹æ³ã䜿çšãããã©ããã¯ããªã次第ã§ãã ããããå®è£ åŸããã以åã®åé¡ã¯ãã¹ãŠæ¶ãããšèšããŸãã 誰ãæ°ã«ããŸãããç§ãã¡ã¯ç«ã®äžã«è¡ããŸãã
ããã¯ãªãã§ããïŒ
ãã®èšäºã¯ãããåœã§èµ·ãã£ãŠããå
šãã®ãã³ã»ã³ã¹ã«äžæ³ã«èŠããã§ãã人ã
ãå©ããããã ãã«æžãããŠããŸãã ãŸãããã®èšäºã¯æ¬è³ªçã«ä»ã®èšäºã®ç¶ãã§ãããã ãããã§ã¯é·å¹Žã®ãã°ãä¿®æ£ããããšãææ¡ããŠããããã蚌ææžã®çœ®æãªãã®HTTPSãšHTTPããã³HTTPSã®äž¡æ¹ã«ãã蚪åã远跡ããæ©èœãåããããŸãã«ãéæãªãSquidãå¿
èŠãšãã人ã察象ãšããŠããŸããã°ã§httpsãã¡ã€ã³åã衚瀺ããããšãèš±å¯ãããSquidã®æ°ããããŒãžã§ã³ã䜿çšããããšãèš±å¯ããŸããã§ããã ãŸããã¡ããã©ã€ã«ã䜿çšããããšã«èå³ããã人ã®ããã«ã
å©ç¹ã¯äœã§ããïŒ
- ç¡å¶éã®ã¹ã±ãŒã©ããªãã£
- ãµããŒããšç®¡çã®æ¯èŒç容æã
- ãããéèŠãªå Žåã¯ããªã¹ãã«ç€ºãããŠãããªãœãŒã¹ãžã®å¿åã¢ã¯ã»ã¹ãæäŸã§ããŸãïŒããã¯èšäºã®ãããã¯ã§ã¯ãããŸããããå¿åæ§ã¯
- å®å®æ§ã è€æ°ã®TorãµãŒãã¹ïŒç°ãªãæ§æãã¡ã€ã«ïŒã䜿çšããå ŽåãããããSquidã«æ¥ç¶ããŠã©ãŠã³ãããã³ãååŸã§ããŸãã
- 絶察ã«ç¡æã§ãã æ°žé ã«ã
ç§ã¯äœãç¥ããŸãããSquid \ Torã¯é
ãã§ããç§ã¯è¡ã£ãŠãäžã®äžã®VPNã§VPSãååŸããŸã
ããã§ãšãããããŸãïŒ Roskomnadzorãããªãã«äžäŸ¿ãåŒãèµ·ããããšæ¬åœã«æ±ºããã®ã«ãç¶æ³ããæãåºãããã«ãŸã ãéãæããªããã°ãªããŸãããïŒ ããã£ã èšäºãã¹ãããããŠãVPNãã³ãã«ãäžããŠãã ããã ãšããã§ãVPNã¯æ£åžžã«ãããã¯ãããŸãã ç°¡åã§ãã ãããŠæè¿ã®åºæ¥äºãèžãŸããŠãè¿ãå°æ¥ãVPSã䜿çšããŠæ³åŸã¬ãã«ã§ããã¯ããã€ãã¹ããããšã¯èª°ãã§ããªãããšããäŒãããŸãã ããã«ããã¹ãŠã«å ããŠãVPSã¯ãåã«é»å ±ãé£ã«åº§ã£ãŠãããããããã¯ã«å
¥ããããšãã§ããŸãã Torã¯ãããã¯ããŸããã obfsã䜿çšããŠæ§æããå Žåãã©ãã«ã決ããŠïŒãã®obfsã¯èæ
®ãããªãããããããã¯ã¯ããããå¥ã®èšäºã«ãªããŸãïŒã ãããŠãVPNã§ãã®ãããªVPSãäžããã«ã¯äœäººå¿
èŠã§ããããïŒ ãããæäŸããæ¹æ³ã¯ïŒ ããã§ã¯ããœãªã¥ãŒã·ã§ã³ã¯ã¯ããã«ç°¡åã§ä¿¡é Œæ§ãé«ããå¿
èŠã«å¿ããŠéåžžã«é«éã§ãç¡æã§ãã ãã®ãããä»ã®èªè
ã誀解ãããåã«ãVPNã®ãã¹ãŠã®+ããã³-VPSãå床æ€èšããŠãããSquid + Torãäœéã§ä¿¡é Œæ§ã®äœããœãªã¥ãŒã·ã§ã³ã§ãããšäž»åŒµããŠãã ããã
Torããããã¯ããŸãïŒ äžåœã§ã¯ããããã«ããã§ã«ãããã¯ãããŠããŸã
ãã ãã ãããŠåã³ãããã äžåœã§ã¯ãTorã¯èšå®ãããobfsã§åäœããŸãã ããã¯çŽ æŽãããæ©èœããŸãã äžçã«ã¯Torããããã¯ããæ¹æ³ã¯ãããŸããã ãã®èœåã粟ç¥ã財æ¿ãåããäžåœã§ããããããè¡ãããšãã§ããŸããã§ããã
Torã¯é
ãïŒ ãããŠãããããªããobfsã䜿ã£ãŠäœæ¥ãããªããäžè¬çã«ã¯ææã§ãïŒ
é床ãé©åãªã¬ãã«ã«ããããšã確èªããæ¹æ³ã説æããå
¬åŒããã¥ã¡ã³ããšã€ã³ã¿ãŒãããäžã®å€æ°ã®èšäºãåç
§ããŠãã ããã ç¹°ãè¿ããŸããããã®ããã«ç°ãªãæ§æã§Torã®ããã€ãã®ã³ããŒãã»ããã¢ãããããšãããããSquidã«ã¢ã¿ããããŠã©ãŠã³ãããã³ãååŸã§ããŸãã
ã ãããæåã«ãå°ãçè«ã 誰ããç¥ã£ãŠããããã«ãTorã¯HTTPãããã·ã§ã¯ãªããåºç€ãšãªãSquidã®çŽæ¥ã®ãã¢ã«ããããšã¯ã§ããŸããã SOCKSãããã·ãæäŸããŸãïŒãã¡ãããããã ãã§ãªãããããå¿ èŠã§ãïŒã TorãSquidãšçµå©ãããã«ã¯ãTorããSquidãžããŸãã¯ãã®éã®ã³ã³ãã¯ã¿ãŒã®åœ¹å²ãæããããšãã§ããäœããå¿ èŠã§ãã ãããŠãã¡ãããçãããããã¯Privoxyã§ãã ãŸã£ããåãããã«ã圌ã¯çŽæ¥ã®ä»²éã«ãªãããã¹ãŠãTorã«éãããšãã§ããŸãã
ç§ãèšã£ãããã«ãããã¯ããããã®èšäºãèªãŸããŸããããç§ã«ãµãããããã®ã¯ãããŸããã§ããã ãã®èšäºã¯ããã§åºããããŸããã ããã³ãã¯å¿ èŠãªãã®ã§ãç§ã«ã¯ããŸãé©ããŠããŸããã§ããã äžè¬ã«ãå©çšå¯èœãªãã¹ãŠã®èšäºãã»ãšãã©ãã¹ãŠã¯ããã³ããŸãã¯httpã®ã¿ã®ãããããæå³ããç§ã®å Žåã¯HTTPSãã¹ãã©ã€ã¹ãããã³éææ§ãå¿ èŠã§ãã ãŸãã ãããšãããèŠãŸãããããŸã£ããç°ãªãã¢ãããŒãããããŸãã é·æãšçæã ç§ã¯èªåã§Squid + Torã®æãéžã³ãŸããã
蚌ææžã®ãªãããŸããããã«HTTPSãããã·ã䜿çšããŠééçãªSquidãäœæããæ¹æ³ã«ã€ããŠã¯ãã§ã«æžããŠããŸãã ãããŠãã¡ãããç§ã¯ããã«ã¢ã€ãã¢ãå®è£ ããããšããŸããã ãããã倱æã¯ç§ãåŸ ã£ãŠããŸããã HTTPãªã¯ãšã¹ãã¯å®å šã«TORã«éä¿¡ãããŸããããHTTPSã¯éä¿¡ãããŸããã§ããã ãã®åé¡ã¯ããŸãããç¥ãããŠããŸããããéçºè ã®1人ããããããSquidã®å€ãããŒãžã§ã³ã®æ¬ ç¹ã§ããããšãç¥ããŸããã ããããå®éšäžã«è§£æ±ºçãèŠã€ãããŸãã-Squid 3.5.27ããã®ãã°ã¯ä¿®æ£ãããŸãã+ IPã¢ãã¬ã¹ã®ä»£ããã«ãã°ïŒhttpsïŒã®çŸãããã¡ã€ã³åã ããããããã§ããããã€ãã®å€±æãç§ãåŸ ã£ãŠããŸãããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã ãããã圌ããèšãããã«ããã¹ãŠããã¡ã€ã«ã§ããŒããããŠããŸãã
ãããã£ãŠããœãŒã¹ããŒã¿ïŒ
- Debian StretchïŒ9ïŒx86ïŒx64ã§ã¯è©Šè¡ããŸããã§ããïŒ
- ãªããžããªããã®Squid Squid 3.5.23
- æ°é®®ãªã€ã«ã¯ãªããµã€ãããä»åã
- Openssl
- Libecap3
- Tor
- ããªããã·
- ãŸã£ãããªè ãšã¯ãããŒãšããããã®ã³ãŒããŒ
ã€ã«ã®ãã³ãåéããããæ¢è£œã®ããã±ãŒãžïŒä»¥äžã®ãªã³ã¯ïŒãå ¥ããŠãã ããã ããç§ã
ãããã£ãŠãã¢ã»ã³ããªã®æºåãããŸãã
apt-get install fakeroot build-essential devscripts apt-get build-dep squid3 apt-get install libecap3 apt-get install libecap3-dev apt-get install libssl1.0-dev apt-get install libgnutls28-dev
éèŠïŒ
å¥ã®ããŒãžã§ã³ã§ã¯ãªãlibssl1.0-devãã€ã³ã¹ããŒã«ããããšãéåžžã«éèŠã§ããããããªããšãSquidãé
ããããç解ã§ããªããšã©ãŒã®ããã«ãŸã£ããåéãããŸããã
次ã«ãSquid 3.5.23ã®ãœãŒã¹ãååŸããŸã
apt-get source squid3
ãã®ç¹å®ã®ã¢ãŒã«ã€ããSquidãœãŒã¹ã§ããŠã³ããŒãããŸãã
wget -O squid-3.5.27-2018.tar.gz http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.27-20180318-r1330042.tar.gz
SquidãœãŒã¹ãã£ã¬ã¯ããªã«ç§»åãããœãŒã¹ãæ°ããããŠã³ããŒããããœãŒã¹ã«æŽæ°ããŸãã
cd squid3-3.5.23/ uupdate -v 3.5.27-2018 ../squid-3.5.27-2018.tar.gz
æŽæ°ããããœãŒã¹ã§æ°ããäœæãããã«ã¿ãã°ã«ç§»åããŸãã
cd ../squid3-3.5.27-2018
debian / rulesã«ã³ã³ãã€ã«ãªãã·ã§ã³ãè¿œå ããŸãã
--enable-ssl \ --enable-ssl-crtd \ --with-openssl
ãã³ã
ã¡ãªã¿ã«ãäžèŠãªãªãã·ã§ã³ãæžããããšãã§ããŸããããã«ãããã³ã³ãã€ã«ãé«éåãããŸã
次ã«ããã®ãããã§ãœãŒã¹ã«ããããé©çšããå¿ èŠããããŸãã
<b>client_side_request.patch</b> --- src/client_side_request.cc Thu Aug 18 00:36:42 2016 +++ src/client_side_request.cc Mon Sep 19 04:41:45 2016 @@ -519,20 +519,10 @@ // note the DNS details for the transaction stats. http->request->recordLookup(dns); - if (ia != NULL && ia->count > 0) { - // Is the NAT destination IP in DNS? - for (int i = 0; i < ia->count; ++i) { - if (clientConn->local.matchIPAddr(ia->in_addrs[i]) == 0) { - debugs(85, 3, HERE << "validate IP " << clientConn->local << " possible from Host:"); - http->request->flags.hostVerified = true; - http->doCallouts(); - return; - } - debugs(85, 3, HERE << "validate IP " << clientConn->local << " non-match from Host: IP " << ia->in_addrs[i]); - } - } - debugs(85, 3, HERE << "FAIL: validate IP " << clientConn->local << " possible from Host:"); - hostHeaderVerifyFailed("local IP", "any domain IP"); + debugs(85, 3, HERE << "validate IP " << clientConn->local << " possible from Host:"); + http->request->flags.hostVerified = true; + http->doCallouts(); + return; } void
ããã¯äœã®ããã§ããïŒ èª¬æããŸãã ããŒã¯ãšã¹ãã©ã€ã¹ã«é¢ããæåã®èšäºãæžãããšããæ°ããããŒãžã§ã³ã¯æ©èœããªããšèšã£ãŠããŸãããããã®ãããã¯SquidãHTTPSæ¥ç¶ãéžæçã«åæãããšããéåžžã«åé¡ãä¿®æ£ããŸãcache.logã®ã¡ãã»ãŒãžïŒ
SECURITY ALERT: Host header forgery detected on ... (local IP does not match any domain IP)
å®éã«ã¯ããããã¹ãã§ã¯äœãã1ã€ã®IPã«ãæã«ã¯æ¬¡ã®IPã§ã¯å¥ã®IPã«ãSquidèªäœã§ã¯3çªç®ã®IPã«è§£æ±ºãããŸãã DNSãã£ãã·ã¥ããããåæçã«æŽæ°ãããŸããã Squidã¯ãã£ãã·ã¥å ã®IPãã¡ã€ã³ãšäžèŽããïŒãã£ãã·ã¥ãå°ãåãŸãã¯åŸã«æŽæ°ããããïŒãæ¥ç¶ãäžæ¢ããŸãã ä¿è·ã®ããã«èŠããŸãããçŸåšã§ã¯éåžžïŒã©ãŠã³ãããã³DNSïŒãšèŠãªãããŠããŸãã éçºè ã¯åä¿éºãããŸãã ãããŠãç§ãã¡ã¯ããããŸã£ããå¿ èŠãšããŸããïŒ ãã®ããããã»ãã¥ãªãã£ãªã¹ã¯ãããããå¯èœæ§ããããšèšã人ã«ã¯ããã®ãããã«ã€ããŠSquidéçºããŒã ã«çŽæ¥é¢ä¿ããŠããYuri Voinovã«çžè«ãããšçããŸãã ããã«ã¯è åšã¯ãããŸããïŒ
ãã®ããããããçšã®ãã¡ã€ã«ãäœæããã³ãŒããã¹ããŒããŸãããããããé©çšããå¿ èŠããããŸãã
patch -p0 -i client_side_request.patch
次ã«ãã³ã³ãã€ã«äžã«1ã€ã®ãããã®é©çšããã£ã³ã»ã«ããå¿ èŠããããŸãïŒããããªããšãæ¢ã«é©çšãããŠããããããã®ããããé©çšã§ããªããšãããšã©ãŒã衚瀺ãããŸãïŒã debian / patch / seriesã«è¡ããããã«0003-SQUID-2018_1.patchãã³ã¡ã³ãã¢ãŠãã ããã®åã«ïŒãä»ããŸãïŒ
#0003-SQUID-2018_1.patch
ããã§ã¯ãããã±ãŒãžã®ã³ã³ãã€ã«ãšã¢ã»ã³ããªïŒ
dpkg-buildpackage -us -uc -nc
squid-langpackãã€ã³ã¹ããŒã«ãã
apt-get install squid-langpack
æ°ããããã±ãŒãžãã€ã³ã¹ããŒã«ããŸã
dpkg -i squid-common_3.5.27-2018-1_all.deb dpkg -i squid_3.5.27-2018-1_i386.deb dpkg -i squid3_3.5.27-2018-1_all.deb
aptãäžæ¯ãèªããªãããã
apt-get -f install
次ã«ãSquidã®èµ·åãç¡å¹ã«ããå¿ èŠããããŸãïŒããã©ã«ãã§ã¯ãinitãã¡ã€ã«ã䜿çšãããŸããSquidã¯PIDãã¡ã€ã«ã®ã¢ã¯ã»ã¹äžèœã«ã€ããŠæå¥ãèšããŸãïŒ
systemctl disable squid
ãã£ã¬ã¯ããª/ etc / systemd / systemã« systemdãµãŒãã¹ãäœæããŸãïŒãµãŒãã¹ãã¡ã€ã«ã¯ãœãŒã¹ã«ãããããã«å®å šã«ã³ããŒãããŸãïŒ
cat /etc/systemd/system/squid3.service ## Copyright (C) 1996-2018 The Squid Software Foundation and contributors ## ## Squid software is distributed under GPLv2+ license and includes ## contributions from numerous individuals and organizations. ## Please see the COPYING and CONTRIBUTORS files for details. ## [Unit] Description=Squid Web Proxy Server After=network.target [Service] Type=simple ExecStart=/usr/sbin/squid -sYC -N ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target
ãªã³ã«ããŸã
systemctl enable squid3.service
Torãprivoxyãã€ã³ã¹ããŒã«ãã
apt-get install tor privoxy
å人çã«ã¯Torã®èšå®ã«ã¯ãŸã£ãã觊ããŸããã§ããããPrivoxyã®èšå®ã¯ããã«æžããããšãã§ããŸãïŒ
listen-address 127.0.0.1:8118 toggle 0 enable-remote-toggle 0 enable-remote-http-toggle 0 enable-edit-actions 0 forward-socks5t / 127.0.0.1:9050 . max-client-connections 500
ã»ãŒå®äºã / etc / squidãã£ã¬ã¯ããªã«ç§»åããŠãããã«äœããå€æŽããŸãããã ã¹ãã©ã€ã¹ã«å¿ èŠãªpemãã¡ã€ã«ãäœæããŸãã
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
ãããŠãsquid.confã次ã®åœ¢åŒã§é 眮ããŸãã
acl localnet src 192.168.0.0/24 # 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 acl SSL method CONNECT # DNS Squid. DNS dns_nameservers 77.88.8.8 # , Tor acl rkn url_regex "/etc/squid/tor_url" http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all icp_access deny all htcp_access deny all # intercept http_port 192.168.0.1:3128 intercept options=NO_SSLv3:NO_SSLv2 # , # , , , # , , # , =) http_port 192.168.0.1:3130 options=NO_SSLv3:NO_SSLv2 # , HTTPS https_port 192.168.0.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER # ( .domain.com) acl blocked ssl::server_name "/etc/squid/blocked_https.txt" acl step1 at_step SslBump1 ssl_bump peek step1 # , ssl_bump terminate blocked ssl_bump splice all # , never_direct allow rkn # , , - Privoxy cache_peer 127.0.0.1 parent 8118 0 no-query no-digest default cache_peer_access 127.0.0.1 allow rkn cache_peer_access 127.0.0.1 deny all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 logfile_rotate 4 pid_filename /var/run/squid.pid
url_regexãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãïŒãªã¹ãã¯äžäŸã§ãïŒïŒïŒ
zenway\.ru \.*google\.com \.*viber\.* \.amazon\.com \.fbcdn\.net \.slack\.* media\.api\.viber\.com* static\.viber\.com* secure\.viber.* \*.cloudfront\.net fonts\.gstatic\.com med-edu\.ru
çºèš
éæ£èŠè¡šçŸã䜿çšããããdstdomainã䜿çšããããäžæ£ã«ãããã¯ããããµããããïŒdstïŒã®ãªã¹ããããããããããããšãã§ããŸãã
ãã®ãªã¹ã圢åŒã®è©³çŽ°ã«ã€ããŠã¯ãããã¥ã¡ã³ããªãã£ã¹ã§ãèªã¿ãã ããã çµæã¯åŸ ã€ã®ã«é·ãããããŸããã§ãã-èšç»éãã«ãã¹ãŠãæ©èœããŸããã ãããŠãããã¯ä»æ¥ãŸã§æå¹ã§ãã èšäºã¯é ãããããããŸããããããããå°æ¥åœ¹ã«ç«ã€ã§ãããã
å¯èœã§ããã°ããããã¯ãè£å ããŸãã
Squid察å¿ããã±ãŒãžïŒ.deb x86ïŒ
UPD 05/05/18ïŒ
HTTPTunnelPort 8118
ãã°ãèŠã€ãããŸããã HTTPTunnelPortã䜿çšããããšã¯ãå§ãããŸããããã®1ã€ãéãããŸã§ãä»ã®ãšããPrivoxyãå¿ èŠã§ãã ãŠãŒãªã»ãã€ããã«æè¬ããŸãïŒ
ãŸããlibecap3ã«é¢ããèšäºãä¿®æ£ããŸããã ã³ã³ãã€ã«ããå¿ èŠã¯ãããŸããããStretchãªããžããªããã€ã³ã¹ããŒã«ããã ãã§ãã ã³ã¡ã³ãããŠãããAlucoSTã«æè¬ããŸãã
UPD 05/05/18ïŒåå¿ã®dartraiden 㯠ãTorãæ§æã«è¿œå ã§ããããšã瀺åããŠããŸã
ExcludeExitNodes {ru}, {ua}, {by}
ãããã®åœã§ã¯ãåºåããŒãã®äœ¿çšã¯é€å€ãããŸãã
ãã®æã®ä»äºã§åé¡ã解決ããã®ãå©ããŠãããYuri Voinovã«æè¬ããŸãïŒ