Squid 4.7 ssl bumpのアクションをACLで変える
モチベーション
- HTTPSのサイトのパス、クエリを可視化したい
- HTTPSの通信をロギングするにあたり、銀行やショッピングサイトのクエリまでロギングしたくない(MITMしたくない)
- 通信許可しないサイトはブロックしたい ということがあり、ACLで設定してみました。
ロギングを緩和するリスト(SpliceSites.txt)と
拒否するサイトのリスト(TerminateSites.txt)を作ります。
私は/etc/squidの下にフォルダを作ってそこに入れました。
# mkdir -p /etc/squid/sitelist # touch /etc/squid/sitelist/SpliceSites.txt # touch /etc/squid/sitelist/TerminateSites.txt
リストの中身は一時的に以下にしました。
# cat SpliceSites.txt .google.com # cat TerminateSites.txt .google.co.jp
公式サイト(以下の表)を参考にsquid.confに以下の設定を加えます。
acl SpliceSites ssl::server_name "/etc/squid/sitelist/SpliceSites.txt" acl TerminateSites ssl::server_name "/etc/squid/sitelist/TerminateSites.txt" acl TerminateSites_http dstdomain "/etc/squid/sitelist/TerminateSites.txt" http_access deny TerminateSites_http !CONNECT ssl_bump terminate TerminateSites ssl_bump splice SpliceSites ssl_bump stare !SpliceSites !TerminateSites
設定は上から評価されるのでご注意ください。
この設定で以下が達成できます。
- 「*.google.com」にアクセスした際にはCONNECTのログのみ
MITMしないのでsquidの証明書をインポートしていない場合であっても証明書エラーが発生しません - 「*.google.co.jp」にはhttp/httpsともにアクセスできない。
httpは「http_access deny」、httpsは「ssl_bump terminate」で遮断 - その他のサイトにアクセスした際にはパス、クエリもロギングされる MITMが発生しますのでsquidの証明書をブラウザに読み込ませないと証明書エラーが表示されます。
access.logは以下のようになりました。
# www.google.co.jp 遮断 "2019/07/06 16:07:10.183" 127.0.0.1 122 - 0 443 - "CONNECT ww.google.co.jp:443 HTTP/1.1" 0 "-" "curl/7.64.0" "NONE_ABORTED:HIER_NONE" "-" "-" "-" # www.google.com CONNECTのみ "2019/07/06 16:07:20.874" 127.0.0.1 1003 172.217.26.4 16533 443 - "CONNECT www.google.com:443 HTTP/1.1" 200 "-" "curl/7.64.0" "TCP_TUNNEL:HIER_DIRECT" "-" "-" "-" # www.google.co.uk CONNECT/GET "2019/07/06 16:07:25.196" 127.0.0.1 124 172.217.26.35 0 443 - "CONNECT www.google.co.uk:443 HTTP/1.1" 200 "-" "curl/7.64.0" "NONE:HIER_DIRECT" "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.co.uk" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" "TLS/1.2" "2019/07/06 16:07:25.346" 127.0.0.1 80 172.217.26.35 14257 443 text/html "GET https://www.google.co.uk/ HTTP/1.1" 200 "-" "curl/7.64.0" "TCP_MISS:HIER_DIRECT" "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.co.uk" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" "TLS/1.2" # yahoo.co.jp CONNECT/GET "2019/07/06 16:10:19.479" 127.0.0.1 114 183.79.135.206 0 443 - "CONNECT yahoo.co.jp:443 HTTP/1.1" 200 "-" "curl/7.64.0" "NONE:HIER_DIRECT" "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=Yahoo Japan Corporation/OU=EDGE_20190131/CN=*.yahoo.co.jp" "/C=JP/O=Cybertrust Japan Co., Ltd./CN=Cybertrust Japan Public CA G3" "TLS/1.2" "2019/07/06 16:10:19.560" 127.0.0.1 80 183.79.135.206 3768 443 text/html "GET https://yahoo.co.jp/?test HTTP/1.1" 301 "-" "curl/7.64.0" "TCP_MISS:HIER_DIRECT" "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=Yahoo Japan Corporation/OU=EDGE_20190131/CN=*.yahoo.co.jp" "/C=JP/O=Cybertrust Japan Co., Ltd./CN=Cybertrust Japan Public CA G3" "TLS/1.2"
http_access denyとssl_bump terminateの違い
http_access denyとssl_bump terminateはどちらを設定しても遮断可能であるが、
通信のどの段階で通信を遮断するかが異なります。
# access log "2019/07/06 17:56:41.343" 127.0.0.1 124 - 0 443 - "CONNECT www.google.co.uk:443 HTTP/1.1" 200 "-" "curl/7.64.0" "TCP_DENIED:HIER_NONE" "-" "-" "-" "2019/07/06 17:56:41.383" 127.0.0.1 80 - 3806 443 text/html "GET https://www.google.co.uk/ HTTP/1.1" 403 "-" "curl/7.64.0" "NONE:HIER_NONE" "-" "-" "-" # Traffic 1 0.000000000 127.0.0.1 → 127.0.0.1 TCP 74 37102 → 3128 [SYN] Seq=0 Win=43690 Len=0 MSS=65495 SACK_PERM=1 TSval=1316899939 TSecr=0 WS=128 2 0.000032413 127.0.0.1 → 127.0.0.1 TCP 74 3128 → 37102 [SYN, ACK] Seq=0 Ack=1 Win=43690 Len=0 MSS=65495 SACK_PERM=1 TSval=1316899939 TSecr=1316899939 WS=128 3 0.000059626 127.0.0.1 → 127.0.0.1 TCP 66 37102 → 3128 [ACK] Seq=1 Ack=1 Win=43776 Len=0 TSval=1316899939 TSecr=1316899939 4 0.000348258 127.0.0.1 → 127.0.0.1 HTTP 190 CONNECT www.google.co.uk:443 HTTP/1.1 5 0.000366971 127.0.0.1 → 127.0.0.1 TCP 66 3128 → 37102 [ACK] Seq=1 Ack=125 Win=43776 Len=0 TSval=1316899940 TSecr=1316899940 6 0.000713091 127.0.0.1 → 127.0.0.1 HTTP 105 HTTP/1.1 200 Connection established 7 0.000755905 127.0.0.1 → 127.0.0.1 TCP 66 37102 → 3128 [ACK] Seq=125 Ack=40 Win=43776 Len=0 TSval=1316899940 TSecr=1316899940 8 0.002853778 127.0.0.1 → 127.0.0.1 TLSv1 583 Client Hello 9 0.003418253 127.0.0.1 → 127.0.0.1 TLSv1.2 2725 Server Hello, Certificate, Server Hello Done 10 0.003606545 127.0.0.1 → 127.0.0.1 TCP 66 37102 → 3128 [ACK] Seq=642 Ack=2699 Win=174720 Len=0 TSval=1316899943 TSecr=1316899943 11 0.004701983 127.0.0.1 → 127.0.0.1 TLSv1.2 384 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 12 0.010473840 127.0.0.1 → 127.0.0.1 TLSv1.2 117 Change Cipher Spec, Encrypted Handshake Message 13 0.010782922 127.0.0.1 → 127.0.0.1 TLSv1.2 175 Application Data 14 0.011115717 127.0.0.1 → 127.0.0.1 TLSv1.2 3901 Application Data 15 0.011315572 127.0.0.1 → 127.0.0.1 TLSv1.2 97 Encrypted Alert 16 0.011327859 127.0.0.1 → 127.0.0.1 TCP 66 37102 → 3128 [ACK] Seq=1069 Ack=6616 Win=305664 Len=0 TSval=1316899951 TSecr=1316899950 17 0.011433987 127.0.0.1 → 127.0.0.1 TCP 66 3128 → 37102 [FIN, ACK] Seq=6616 Ack=1069 Win=45952 Len=0 TSval=1316899951 TSecr=1316899951 18 0.020934354 127.0.0.1 → 127.0.0.1 TLSv1.2 97 Encrypted Alert 19 0.020972530 127.0.0.1 → 127.0.0.1 TCP 54 3128 → 37102 [RST] Seq=6617 Win=0 Len=0
# access log "2019/07/06 17:50:08.492" 127.0.0.1 124 - 0 443 - "CONNECT www.google.co.uk:443 HTTP/1.1" 200 "-" "curl/7.64.0" "NONE_ABORTED:HIER_NONE" "-" "-" "-" # Traffic 1 0.000000000 127.0.0.1 → 127.0.0.1 TCP 74 37170 → 3128 [SYN] Seq=0 Win=43690 Len=0 MSS=65495 SACK_PERM=1 TSval=1317471853 TSecr=0 WS=128 2 0.000031214 127.0.0.1 → 127.0.0.1 TCP 74 3128 → 37170 [SYN, ACK] Seq=0 Ack=1 Win=43690 Len=0 MSS=65495 SACK_PERM=1 TSval=1317471853 TSecr=1317471853 WS=128 3 0.000058902 127.0.0.1 → 127.0.0.1 TCP 66 37170 → 3128 [ACK] Seq=1 Ack=1 Win=43776 Len=0 TSval=1317471853 TSecr=1317471853 4 0.000451724 127.0.0.1 → 127.0.0.1 HTTP 190 CONNECT www.google.co.uk:443 HTTP/1.1 5 0.000471912 127.0.0.1 → 127.0.0.1 TCP 66 3128 → 37170 [ACK] Seq=1 Ack=125 Win=43776 Len=0 TSval=1317471854 TSecr=1317471854 6 0.000821570 127.0.0.1 → 127.0.0.1 HTTP 105 HTTP/1.1 200 Connection established 7 0.000895572 127.0.0.1 → 127.0.0.1 TCP 66 37170 → 3128 [ACK] Seq=125 Ack=40 Win=43776 Len=0 TSval=1317471854 TSecr=1317471854 8 0.003021123 127.0.0.1 → 127.0.0.1 TLSv1 583 Client Hello 9 0.003511460 127.0.0.1 → 127.0.0.1 TCP 66 3128 → 37170 [FIN, ACK] Seq=40 Ack=642 Win=44800 Len=0 TSval=1317471857 TSecr=1317471856 10 0.003724377 127.0.0.1 → 127.0.0.1 TCP 66 37170 → 3128 [FIN, ACK] Seq=642 Ack=41 Win=43776 Len=0 TSval=1317471857 TSecr=1317471857 11 0.003740565 127.0.0.1 → 127.0.0.1 TCP 66 3128 → 37170 [ACK] Seq=41 Ack=643 Win=44800 Len=0 TSval=1317471857 TSecr=1317471857
次回はSplunkのFree版を導入してログを見ていきたいと思います。