通信先によってローカルプロキシからの上位プロキシの接続先を変えようとしている件

CentOS にインストールしたSquid にて設定を行うことにより、通信先によって上位プロキシの振り分け先を変えようとしています。

とりあえず /etc/squid/squid.conf の最後に以下の記述を追加することで、上位プロキシにはいくようになりましたが、まだうまく振り分けはできていません。

# proxy1 : 社外ページへのアクセスを担う
cache_peer proxy1.domain.co.jp parent 8080 0 no-query

# proxy2 : 専用サーバへのアクセスを担う
cache_peer 10.XX.XX.2 parent 3128 0 default no-query

acl target-domain dstdomain .google.com .youtube.com
# acl subnet dst 10.XX.XX.5/32

# cache_peer_access proxy1.domain.co.jp allow !subnet
cache_peer_access proxy1.domain.co.jp allow target-domain

# cache_peer_access 10.XX.XX.2 allow subnet
# cache_peer_access 10.XX.XX.2 allow target-domain

never_direct allow all

参考サイト:

アクセスコントロール(ACL)
https://www.robata.org/docs/squid/faq_10.html

Squid 経由で 8443ポートの https サイトにアクセスした際にユーザ認証が通らなかった件

先日、Mac にSquidをインストールしプロキシを構築しました。

http://k2-ornata.com/mac_squid_install/

その後、通常の https 443ポートへの通信はSquid経由で問題なくアクセスできていたのですが、8443 ポートのWebサイトでユーザ認証を行おうとすると、いくらやっても認証が通りませんでした。

443以外のSSLポートは追記が必要

しばらくなぜだろうと考えていたのですが、あるサイトを見て Squid はデフォルトでは SSLポートとして 443しか認識してくれないことがわかりました。

そこで以下の通り、acl SSL_ports port の行に 8443を追加して Squidを再起動してみたところ、ユーザ認証が通るようになりました。

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
# acl localnet src 0.0.0.1-0.255.255.255        # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)

・・・

acl SSL_ports port 443 8443
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

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
・・・

しかし、ユーザ認証が通らなかった時にもログイン画面までは表示されていたのが不思議です。もしかしたらあればキャッシュデータだったのだろうか?

参考サイト

(Squid)Proxy経由だとHTTPSが403になる(情弱エンジニアだいありー)
https://www.lab.ocean-cloud.org/2021/12/22/squidproxy%E7%B5%8C%E7%94%B1%E3%81%A0%E3%81%A8https%E3%81%8C403%E3%81%AB%E3%81%AA%E3%82%8B/

Macに Squidを導入してゲストOSから経由させようとしたときにHTTP 403エラーが発生した件

先日、MacにSquidをインストールしました。

http://k2-ornata.com/mac_squid_install/

その時は、Parallels Desktop上に構築したゲストOSからもその Squidを経由してインターネットにアクセスできていたはずなのですが、再度、Squidを起動してゲストOSからアクセスしたところ、以下のエラーが発生してインターネットに接続できませんでした。

$ curl https://www.google.co.jp/ http://(SquidのIPアドレス):3128
curl: (56) Received HTTP code 403 from proxy after CONNECT

そこでいろいろ調べてみたところ、squid.conf の localnet まわりの設定を変更しないといけないことがわかりましたので、その方法を記載しておきます。

squid.conf を修正

上で記載したとおり、localnet まわりの設定を修正します。

まずは、squid.conf の先頭付近にある「acl localnet src」を修正します。
ここでは、Squidにアクセスする端末(今回はゲストOS)があるネットワークのセグメントをlocalnetとして設定しておきます。

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed

acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)

その後、同じsquid.confの65行目付近にある「http_access allow localnet」のコメントアウト(#)を外しておきます。

# For example, to allow access from your local networks, you may uncomment the
# following rule (and/or add rules that match your definition of "local"):
http_access allow localnet

これで、10.0.0.0/8 のネットワークにある端末からSquidにアクセスできるようになっているはずです。

再度、Squid経由でアクセス

以下の通り、今度は目的のサイトからデータを取ることができました。

$ curl https://www.google.co.jp/  http://(SquidのIPアドレス):3128
<!doctype html>
・・・
<title>Google</title>
・・・

Squidをインストールした日は特に squid.conf を修正しなくてもインターネットにアクセスできた気がしていて解せないなのですが、うまくアクセスできるようになったので良しとしておきます。