HTTP Proxy として利用される squid について、設定例を記載します。
127.0.0.1
に対しては localhost
および to_localhost
という組み込みの名称のキーワードが利用できます。その他のプライベートIP に対するキーワードは独自に定義する必要があります。
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 localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl to_localnet dst 0.0.0.1-0.255.255.255
acl to_localnet dst 10.0.0.0/8
acl to_localnet dst 100.64.0.0/10
acl to_localnet dst 169.254.0.0/16
acl to_localnet dst 172.16.0.0/12
acl to_localnet dst 192.168.0.0/16
acl to_localnet dst fc00::/7
acl to_localnet dst fe80::/10
Squid は HTTP Proxy です。Proxy 先となるサーバが待ち受ける TCP ポート番号を定義します。
補足: SSH や FTP のクライアントは、それぞれのアプリケーション用の通信を HTTP 上で行なうことができます。
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 SSL_ports port 443
acl CONNECT method CONNECT
http_access
は上から順番に評価されていきます。合致するルールが発生するまで評価されていきます。
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
Safe_ports
で定義されていない TCP PORT に対する HTTP リクエストの proxy を deny します。SSL_ports
で定義されていない TCP PORT に対する通信である。補足: CONNECT は HTTP Proxy を介して SSL 通信を開始するためのメソッドです。
プライベートIP に対する HTTP リクエストの proxy を deny します。
http_access deny to_localnet
http_access deny to_localhost
プライベートIP からの HTTP リクエストの proxy を allow します。
http_access allow localnet
http_access allow localhost
http_access
は上から順番に評価されていきますが、合致するルールが存在しない場合に deny するように指定しておきます。
# And finally deny all other access to this proxy
http_access deny all
HTTP 200
curl -sS --proxy http://localhost:3128 http://www.example.com:80
HTTP 403
curl -sS --proxy http://localhost:3128 http://127.0.0.1:80
curl -sS --proxy http://localhost:3128 http://10.0.2.15:80
to_localnet
および to_localhost
をコメントアウトして reload すると、以下のようにすべて HTTP 200 となります。http_access allow localhost
のルールが適用されるためです。
HTTP 200
#http_access deny to_localnet
#http_access deny to_localhost
curl -sS --proxy http://localhost:3128 http://www.example.com:80
curl -sS --proxy http://localhost:3128 http://127.0.0.1:80
curl -sS --proxy http://localhost:3128 http://10.0.2.15:80