三台目を購入
自粛のため、家でネットショッピングばかりしており、勢い余ってraspberry pi 4 model Bを買ってしまった。
これで今家にあるラズパイは全部で3台となった。一応、過去のラズパイはIOT機器として、毎日ちゃんと稼働しているので、決して無駄な買い物ではない。
1台目:
anpontan382.hatenablog.com
2台目:
anpontan382.hatenablog.com
今回は、今までのraspberry pi zeroと比べるとメモリで言えば、8倍(512MB→4GB)というハイスペックマイコンであるため、もう少し高度な使い方をしてみたい。
ということで、とりあえず勉強も兼ねて、プロキシサーバとして稼働させることにした。
家庭で(というか僕の環境で)プロキシを利用するメリットは以下が挙げられるだろう。
・ネット通信量の削減
前述の通り、最近は自粛や在宅勤務といった事情で、自宅に籠もりネットばかりしているため、wimax環境の僕はすぐに10GB/3日の制限に達し、低速インターネッツを余儀なくされている。そのため、プロキシサーバの持つキャッシュ機能により、一度みたことのあるページはわざわざ再度、同じ通信をせずとも表示させることができる。
・アクセスログから、妻のネット通信を覗き見る
我が家は、私のPC・スマホ、妻のPC・スマホ、の4台がwifiに接続されている。これらをすべてプロキシ経由にすることで、すべてのネット接続はプロキシ経由になるためaccess.logにいつ誰がどのページにアクセスしていたのか丸見えとなり、弱みを握ることが可能となる。
・勉強になる
以前DNSサーバを作ったときにも書いたが、プロキシサーバを作るということは、それはその道程において、普段のネット接続で意識することのないプロキシサーバに感謝するという行為である。
anpontan382.hatenablog.com
そういうわけで、raspberry pi 4にsquidを入れて、設定を行ってみることにする。
サーバ設定
プロキシサーバソフトsquidをインストールする。
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install squid -y
プロキシサーバの設定をする
基本的にすべての設定は「/etc/squid/squid.conf」で行う。
今回最小限の必要な変更のみだが、squid.confのデフォルト設定に従って
変更した箇所の変更前↔変更後を記述する。
①ローカルネットワークの定義
#デフォルト
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
#カスタマイズ
#自分が使っているLANのネットワーク範囲を記載する。
#僕の家はLAN内部が192.168.100.XXXである。
acl localnet src 192.168.100.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_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 1025-65535 # unregistered ports
#SSL通信時のCONNECTメソッドはトンネル化して通す
acl CONNECT method CONNECT
③許可ポートに対する制御
#デフォルト
http_access deny !Safe_ports
#カスタマイズ
#Safe_portsで定義したポート以外のアクセスを拒否する定義
#変更無し
http_access deny !Safe_ports
④許可メソッドに対する定義
#デフォルト
http_access deny CONNECT !SSL_ports
#カスタマイズ
#SSL_portsで定義したポート以外のコネクト接続を拒否する定義
#変更無し
http_access deny !Safe_ports
⑤キャッシュマネージャ関連
#デフォルト
http_access allow localhost manager
http_access deny manager
#カスタマイズ
#キャッシュマネージャ(squidの統計情報をCGIで見れる機能)へは
#ローカルホストのみがアクセスできるという設定
#使わないので削除
#http_access allow localhost manager
#http_access deny manager
⑥接続元の制御、その他の制御
#デフォルト
include /etc/squid/conf.d/*
http_access allow localhost
http_access deny all
#カスタマイズ
#追加でオリジナルルールを追加するときは、以下に記載する
#今は何もなし
include /etc/squid/conf.d/*
#ローカルホスト、localnetからのHTTPアクセスを許可する
http_access allow localhost
http_access allow localnet
#ここまで、どの定義にも該当しなかった通信はすべて拒否する
http_access deny all
⑦プロキシとの通信ポート
#デフォルト
http_port 3128
#カスタマイズ
#クライアント↔プロキシサーバ間の通信を行うポート
#8080などもよく使われるが、セキュリティ的には変更したほうが良い
http_port 3129
⑧キャッシュの保存量に関する定義
#デフォルト
# cache_dir ufs /var/spool/squid 100 16 256
# cache_mem 256 MB
# maximum_object_size_in_memory 512 KB
#カスタマイズ
#キャッシュサーバと利用するときに、キャッシュデータを置く場所
#数字は、左からキャッシュで使用する容量(MB)、ディレクトリを分割するサブディレクトリ数、サブディレクトリを分割する数
cache_dir ufs /var/spool/squid 100 16 256
#キャッシュのメモリサイズを指定
cache_mem 256 MB
#メモリ内に保存できるキャッシュの最大を指定
maximum_object_size_in_memory 512 KB
⑨X-Forwarded-Forヘッダーのセキュリティ対策
#デフォルト
# forwarded_for on
#カスタマイズ
#接続元のIPアドレスの情報をHTTPヘッダ上で隠す
forwarded_for off
⑩コアダンプ関連
#デフォルト
coredump_dir /var/spool/squid
#カスタマイズ
#コアダンプファイルの出力先
#変更なし
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
#カスタマイズ
#キャッシュの保存期間
#基本はデフォルトのままにしておく、gopherはいらなそうなので削除した
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
⑫再起動
sudo systemctl restart squid
クライアント設定
・windows10のプロキシ設定
「プロキシの設定を変更する」→「プロキシサーバを使う」
アドレス:raspberry pi IPアドレスを記載
ポート:squid.confのhttp_portで指定したポート番号を記載
・InternetExplorerの設定
IE→設定→インターネットオプション→接続→「LANの設定」
→「LANにプロキシサーバを使用する」→上記と同様にアドレス・ポートを指定
確認
・この状態で普通にWEBサイトが見れるなら、とりあえず動いている。
・「/var/log/squid/access.log」を開いてみると、時間、アクセス先、ポート、メソッドがわかる。
1587304260.711 5780 192.168.100.XXX TCP_TUNNEL/200 15658 CONNECT anpontan382.hatenablog.com:443 - HIER_DIRECT/13.230.115.161
・キャッシュが取れているかを調べるには、squidclientというsquidの挙動を確認するソフトを使う。
sudo apt install squidclient
squidclient -h localhost -p 3129 mgr:client_list
squidclient -h localhost -p 3129 mgr:info
のコマンドにより、キャッシュの利用料、利用率等様々なステータスが確認できる。
・X-Forwarded-Forヘッダーの隠蔽ができているかは、以下にアクセスするとわかる。
tools.up2a.info
unknownが表示されている。