三台目を購入
自粛のため、家でネットショッピングばかりしており、勢い余ってraspberry pi 4 model Bを買ってしまった。
【国内正規代理店版】Raspberry Pi 4 Model B/4GB OKdo版【技適マーク付】
- メディア: Personal Computers
これで今家にあるラズパイは全部で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が表示されている。