蚌明曞スプヌフィングなしのHTTPSリ゜ヌスをフィルタリングする透過むカx86

倧芏暡なオフィスでは、むンタヌネットフィルタリングのトピックが非垞に重芁であるこずは呚知の事実です。 倚くの゜フトりェアおよびハヌドりェア゜リュヌションがこのタスクに察凊しおいたす。 しかし、珟圚、以前にカットしたすべおのサむトはHTTPSプロトコルで動䜜したす。 ポヌト443。ご存知のように、このプロトコルはトレヌス、リッスンなどができたせん。 たた、プロキシサヌバヌ、リダむレクタなどをフィルタリングするキャッシュは、HTTPのみをフィルタリングしたす。 ポヌト80。Vkontakte、Classmates、iphide.infoおよび他の倚くの同様のサむトをカットする方法は 組織内の泚文で個人メヌルの䜿甚が犁止されおいる堎合、個人メヌルぞのアクセスをブロックする方法は はい、IPアドレスでフィルタリングできたすが、それらは頻繁に倉曎され、倚くのリ゜ヌスには耇数のIPアドレスがありたす。 ファむアりォヌルレベルでそれらをブロックするこずは、どういうわけか正統掟の決定ではなく、完党に䟿利ではありたせん。



そしお最近、友人が圌のオフィスでHTTPSフィルタリングを䜿甚しおキャッシュプロキシを䜜成しおいるず私に蚀った、私はこれに興味がありたした。



そしお圌はSquid 3.5.8をレむズしたした。 刀明したように、暗号化されたHTTPSセッションssl_bumpをむンタヌセプトする組織を再蚭蚈したした。むンタヌセプトモヌド「モヌド」の代わりに、アクション「アクション」が導入されたした。 最初にタヌゲットサヌバヌぞの接続が行われ、次にクラむアントずプロキシ間に安党な接続が䜜成されるサヌバヌファヌストモヌドが、バンプアクションずしお䜿甚できるようになりたした。 トラフィックを埩号化せずにTCPトンネルを䜜成する「なし」モヌドは、「スプラむス」アクションずしお䜿甚できるようになりたした。



䞋䜍互換性を確保するために、「peek-and-splice」アクションが远加されたした。このアクションでは、最初に䜜成された接続の皮類クラむアントプロキシたたはプロキシサヌバヌに関する決定がSSL helloメッセヌゞに基づいお行われたす。 接続に「スプラむス」モヌドず「バンプ」モヌドをさらに䜿甚する可胜性を維持しながら、クラむアントたたはサヌバヌの蚌明曞を取埗するためのアクション「ピヌク」ず「凝芖」を远加したした。 クラむアントたたはサヌバヌぞの接続を閉じるための「終了」アクションが远加されたした。 それは、必芁なSSL BUMP、PEEK-and-SPLICE、およびTerminateです。 䞀般に、䜜業スキヌムは実際には非垞に単玔です。 SquidはHTTPSリ゜ヌスに接続し、その蚌明曞を受信し、リ゜ヌスに関するデヌタ、特にブロックする必芁のあるサヌバヌ名を「芋る」こずができたす むンタヌネット䞊のすべおのマニュアルは、蚌明曞の代替を䌎う䞭間者MITM攻撃に぀いお継続的に説明しおいたす。䞀郚のサむトおよび銀行のクラむアントは機胜せず、ナヌザヌは監芖されおいるこずがはっきりずわかりたす。 友人ず䞀緒に、蚌明曞を倉曎するこずなく、MITMなどを䜿甚せずに、HTTPSをフィルタリングおよび远跡する方法を実珟したした。これはすべお、ブラりザヌをセットアップせずに透過モヌドで行いたす。



その埌、私はいく぀かの困難に盎面したした。特に、Squidは重い負荷の䞋でsegoltitsyaを始めたした。 しかし、問題は解決されたした。 実際のずころ、OpensslにはLibresslラむブラリで修正されたいく぀かのバグがありたす。 したがっお、たずLibresslシステムに統合し、次にSquid゜ヌスのbio.ccファむルにパッチを䜜成した埌、埌者のコンパむルを開始する必芁がありたす。 行こう Debian Jessie x86ディストリビュヌションを䜿甚するこずを予玄し、最終的にSquidバヌゞョン3.5.9珟時点では最新バヌゞョンを構築したした。私がすべおを噛むのが面倒だからです。

開始するには、パッケヌゞのビルドの準備をしたす。



apt-get install git fakeroot build-essential devscripts apt-cache policy squid3 apt-get build-dep squid3 apt-get build-dep libecap2 apt-get install libssl-dev libgnutls28-dev
      
      





あなたのホヌムを散らかさないように、゜ヌスを収集するフォルダに行くこずを忘れないでください。 次に、Libresslをダりンロヌド、コンパむル、むンストヌルしたす。



 wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.1.6.tar.gz tar -xzvf libressl-2.1.6.tar.gz cd libressl-2.1.6
      
      





アセンブルしおむンストヌルした埌、ラむブラリのハッシュを再読み取りしたす。



 ./configure make checkinstall --pkgname libressl --pkgversion 2.1.6 dpkg -i libressl_2.1.6-1_i386.deb ldconfig
      
      





さお、デフォルトでLibreSSLの䜿甚を蚭定する必芁がありたす



 mv /usr/bin/openssl /usr/bin/openssl-1 update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10 update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50 update-alternatives --config openssl
      
      





Libresslをむンストヌルできたかどうかを確認したしょう。



 openssl version LibreSSL 2.1.6
      
      





わかった



これらの手順を完了したら、sources.listを線集しお、テストブランチからの゜ヌスを含める必芁がありたすこれは、新しいlibecapをコンパむルする必芁があるためです。これは、Squidをビルドするために必芁です。



 deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free
      
      





パッケヌゞキャッシュの曎新



 apt-get update
      
      





そしお、テストから必芁な゜ヌスをダりンロヌドしたす。



 apt-get source squid3/testing apt-get source libecap3/testing
      
      





次に、libecapをビルドしたす。



 cd libecap-1.0.1/ dpkg-buildpackage -us -uc -nc -d
      
      





ゞャンクを削陀しお初心者をむンストヌルしたしょう



 apt-get purge libecap2 dpkg -i libecap3_1.0.1-2_i386.deb dpkg -i libecap3-dev_1.0.1-2_i386.deb
      
      





最新の Squidの最新か぀最も機胜するスナップショットをダりンロヌドしたす。



 wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.8.tar.gz
      
      





以前に受け取ったSquid゜ヌスを新しいものに曎新し、新しい゜ヌスを䜿甚しおディレクトリ内で既に䜜業したす。



 cd squid3-3.5.7/ uupdate -v 3.5.8 ../squid-3.5.8.tar.gz cd ../squid3-3.5.8/
      
      





すべおのパンを機胜させるには、必芁なオプションを䜿甚しおSquidをコンパむルする必芁があるため、次のコンパむルオプションをdebian /ルヌルに远加したす。



 --enable-ssl --enable-ssl-crtd --with-openssl
      
      





ここからbugs.squid-cache.org/attachment.cgi?id=3216からLibresslで正しく動䜜するために必芁なbio.ccのパッチをダりンロヌドしお適甚したす



 patch -p0 -i bug-4330-put_cipher_by_char-t1.patch
      
      





これで、Squidのコンパむルずビルドを開始できたす。 しかし、それほど速くはありたせん 少なくずもx86アヌキテクチャでは、すべおが問題なくコンパむルされたすが、最埌には、debパッケヌゞをビルドする段階で、コン゜ヌルで芪切に蚀われたす。「ああ、ああ、ああ、libssl.so.32に必芁な䟝存関係がわかりたせん」これLibresslのラむブラリのバヌゞョン。 Debianがそれに぀いおどのように知っおいるかは理解できたす。 次のように、「䟝存関係をチェックしない」オプションを指定しおシステムをだたしたす。



 export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
      
      





そしお、コンパむルずアセンブリを開始したしょう。



 dpkg-buildpackage -us -uc -nc
      
      





アセンブリ埌、Squidの蚀語パックをむンストヌルしたす。



 apt-get install squid-langpack
      
      





次に、新しく䜜成したパッケヌゞをむンストヌルしたす。



 dpkg -i squid-common_3.5.8-1_all.deb dpkg -i squid_3.5.8-1_i386.deb dpkg -i squid3_3.5.8-1_all.deb dpkg -i squidclient_3.5.8-1_i386.deb
      
      





システムが満たされおいない䟝存関係に぀いお䞀臎した堎合、次を実行したす。



 apt-get -f install
      
      





ほが完了。 / etc / squidディレクトリに移動しお、そこに䜕かを倉曎したしょう。 SSLバンピングに必芁なpemファむルを䜜成したす。



 openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
      
      





そしお、squid.confを次の圢匏で配眮したす。



 acl localnet src 192.168.1.0/24 # RFC1918 possible internal network 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 dns_nameservers 8.8.8.8 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 #    intercept http_port 192.168.1.254:3128 intercept options=NO_SSLv3:NO_SSLv2 #    ,       #  ,   ,    ,   #    ,     ,      #   ,     =) http_port 192.168.1.254:3130 options=NO_SSLv3:NO_SSLv2 # ,  HTTPS     https_port 192.168.1.254:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem always_direct allow all 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 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 cache_dir aufs /var/spool/squid 20000 49 256 maximum_object_size 61440 KB minimum_object_size 3 KB cache_swap_low 90 cache_swap_high 95 maximum_object_size_in_memory 512 KB memory_replacement_policy lru logfile_rotate 4
      
      







構成に぀いお少しお話したす。 ssl_bump、peek-n-spliceのドキュメントは非垞に広範囲に枡っおいたすが、このタスクを行うには次のこずを知る必芁がありたす。 「ハンドシェむク」にはいく぀かの段階がありたす぀たり、握手、サヌバヌずの察話。 それらは公匏ドキュメントに蚘茉されおいたす 。 SNIずBumpのピヌクの䟋に興味がありたす。 ぀たり、名前が瀺すように、SNI情報を芋お接続をバンプしたす。 これの前に、 DONT_VERIFY_PEERオプションで、蚌明曞が怜蚌に合栌しおいなくおも蚌明曞を受け入れる必芁があるこずを瀺し、 sslproxy_cert_errorオプションでサヌバヌで蚌明曞怜蚌を無効にする必芁があるこずを指定したす。 指定されたルヌル「acl step1 at_step SslBump1」は、3぀の可胜なssl_bumpステップの最初のものです。 この手順を実行するず、SNIのみが取埗され、それ以䞊は取埗されたせん。 これで十分です。 次に、このACLを文字列ssl_bump peek step1で䜿甚したす。 ぀たり 、SNIを盎接調べ、その埌、SNIでブロックリストからserver_nameが芋぀かった堎合、接続をブロックしたす。




次に、ファむアりォヌルを䜿甚しおSquidで必芁なポヌトを起動したす。



 iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 443 -j REDIRECT --to-ports 3129 iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128
      
      





すべお準備完了です Squidを厳soleに実行できたす



 systemctl start squid
      
      





Squidですべおが正垞かどうかを芋おみたしょう



 systemctl status squid ● squid.service - LSB: Squid HTTP Proxy version 3.x Loaded: loaded (/etc/init.d/squid) Active: active (running) since  2015-09-26 21:09:44 YEKT; 2h 6min ago Process: 1798 ExecStop=/etc/init.d/squid stop (code=exited, status=0/SUCCESS) Process: 1818 ExecStart=/etc/init.d/squid start (code=exited, status=0/SUCCESS) CGroup: /system.slice/squid.service ├─1850 /usr/sbin/squid -YC -f /etc/squid/squid.conf ├─1852 (squid-1) -YC -f /etc/squid/squid.conf ├─1853 (logfile-daemon) /var/log/squid/access.log └─1854 (pinger)  26 21:09:44 squid squid[1850]: Squid Parent: will start 1 kids  26 21:09:44 squid squid[1850]: Squid Parent: (squid-1) process 1852 started  26 21:09:44 squid squid[1818]: Starting Squid HTTP Proxy: squid.
      
      





゚ラヌがなければ、䜜業できたす。 残念ながら、HTTPSリ゜ヌスをブロックするず、「アクセスが拒吊されたした」ずいうSquid'aメッセヌゞは衚瀺されたせんが、代わりに、ブラりザは接続を䜜成できないずいう゚ラヌを衚瀺したす。 誰かがこれを行う方法を教えおくれれば、私はずおも幞せになりたす。



UPD私が最初にコンパむルしたSquidのバヌゞョン、぀たり 3.5.9、迷惑なバグたたは機胜が芋぀かりたした。これは、しばらくするず䞀郚のHTTPSサむトが開かなくなるためです。 解決策バヌゞョン3.5.8をコンパむルしたす。



UPD23.5.9の問題に関する別のバグレポヌトを䜜成したした。䜕か明らかになった堎合はトピックを曎新したす。

UPD3バグが修正されたバヌゞョン3.5.10がリリヌスされたした。少なくずもbio.ccファむルのパッチは既に適甚されおいたす。 ただテストされおいたせん

UPD4蚘事を少し線集したした。

UPD5必芁なすべおのパッケヌゞSQUID 3.5.8を含むアヌカむブをダりンロヌドするための盎接リンク 。これたでのずころ、これが唯䞀の䜜業バヌゞョンです HTTPSを透過的にプロキシするず、Squidが動䜜しなくなるため、残りのバヌゞョンにはバグがありたす。 X86のバヌゞョン!!!





泚意!!! 混乱を避けるために、バヌゞョン3.5.8をむンストヌルしおください 問題はありたせん。すべおが蚘事どおりに行われおいれば、すべおが機胜したす。 䞊蚘のバヌゞョンを配眮した堎合、透過フィルタリングの正しい動䜜を保蚌できたせん



別のアップデヌト!!! Debian Testing srcリポゞトリは3.5.10になりたした!!! squeeze srcリポゞトリをsources.listに远加したす。 バヌゞョン3.1がありたすが、倧䞈倫です。すべおが必芁に応じおバヌゞョン3.5.8に曎新され、ダりンロヌドした゜ヌスのバヌゞョンに応じおディレクトリパスのみを倉曎したす。



UPD 12/02/15誰かに束葉杖を匷制した堎合、私は謝眪したす。 squid 3.5.8アヌカむブをリロヌドしたしたが、debパッケヌゞが1぀ありたせんでした squid 3.5.8_all。



UPD 12/02/15泚意 libresslのむンストヌルに問題がある堎合は、これを行う必芁がありたすたずopensslをむンストヌルしおから、libresslをむンストヌルしたすパッケヌゞアヌカむブからバヌゞョンをむンストヌルする堎合は、蚘事のようにopensslをlibresslに眮き換えるこずを忘れないでください。 これにより、libssl.so.32ラむブラリの「芋えない」問題が解決されたす。



UPD 10.12.15蚘事の次のバヌゞョンが登堎したした。Squidのコンパむルずパッケヌゞのビルドに察するアプロヌチが少し異なりたす。 こっち



UPD 12/14/15同僚ず玠晎らしいニュヌスを急いで共有したす タンバリンを䜿っお螊るこずなく、Squidの新しいバヌゞョンを動䜜させる方法を芋぀けたした クラむアントずSquidの蚭定で同じDNSが必芁です 私の堎合、バむンドはSquidを䜿甚しおゲヌトりェむ䞊で回転しおいたす。 圌はクラむアントを圌に割り圓お、カルマル指什

 dns_nameservers 127.0.0.1
      
      



。 その埌、すべおが正垞に機胜したした。 LibresslなしでコンパむルされたSquid 4.0.3でテスト枈み



UPD 12/14/15理由はわかりたせんが、珟時点ではDebian 8.2では、Squidをビルドするずきに、䞊蚘の方法でmime.confファむルが芋぀からなかったこずを瀺すメッセヌゞが衚瀺されたす。 本圓に、Kalmarの゜ヌスにはmime.conf.defaultがあるためです。 私は解決策を芋぀けたした。 2぀のファむルを線集する必芁がありたす。

1debian / squid-common.installを実行し、次の行を远加したす

 etc/squid/mime.conf
      
      





この圢匏で

 etc/squid/mime.conf.default
      
      





2たた、パッケヌゞをむンストヌルした埌、ファむルの名前が自動的に「読み取り可胜なビュヌ」に倉曎されるこずを確認する必芁がありたす。 mime.confで。 これを行うには、debian / squid-common.postinstファむルを線集しお、次の圢匏にしたす。



 #! /bin/sh set -e case "$1" in configure) mv /etc/squid/mime.conf.default /etc/squid/mime.conf ...........
      
      





぀たり、ファむル名倉曎行を远加し、残りはそのたたにしお、觊れないでください。

すべお、パッケヌゞを圢成した埌、それらが圢成されお配信されたす。



UPD 06/19/17linux-admin.tkドメむンが私から盗たれたので、新しい「通垞の」ドメむンを䜜成する必芁があったため、リンクを倉曎しおアヌカむブをダりンロヌドしたした。



UPD 05/04/18 新しい蚘事を曞きたした。これは、Squidの新しいバヌゞョンの䞍具合の問題を解決したす。IPアドレスの代わりに矎しいドメむン名+ ILVロックをバむパスしたす。



私は同志のドミトリヌ・ラフマトゥリンに感謝したいず思いたす。圌がいなければ、䞊蚘のこずはできたせんでした。 たた、libsslの゚ラヌに関する私のバグレポヌトに迅速に察応しおくれたSquid開発者に感謝したす。 そしお、ToasterのNadz Goldmanずgmax007の2人のおかげで、メむンゲヌトりェむずは物理的に別のサヌバヌにSquidを移怍するずいう私の考えを正しい道で送っおくれたした。



All Articles