【ラズベリーパイ4】Squidでプロキシサーバを自作する方法

ラズベリーパイ4にSquidをインストールしてプロキシサーバを自作する方法をまとめました。

【はじめに】プロキシサーバーとSquidについて

プロキシサーバとは, インターネットへの接続を代理するサーバーのことです。
プロキシサーバーを導入すると, 代理するインターネット接続の通信ログを保存したり, ファイアウォールのように特定のドメインやポートの通信を許可・拒否することができる利点があります.

例えば, ラズベリーパイをプロキシサーバーにすると, 以下のような順でWindowsパソコンからインターネットに接続されます.

●プロキシサーバーありの通信経路

[パソコン, スマホなどの端末] –> [ラズベリーパイ(プロキシサーバー)] –> [家庭内ルーター] –> [インターネット]

●プロキシサーバーなしの通信経路

[パソコン, スマホなどの端末] –> [家庭内ルーター] –> [インターネット]

そのため, セキュリティ向上のために会社等のPCはインターネットに接続させる際には, プロキシサーバーを経由させることが多いです.

【Squid】インストール・設定・起動

RaspberryPiをプロキシサーバーにする方法として、「Squid」というソフトウェアを使うのが手っ取り早いです.
インストール・設定・起動方法は以下のとおりです.

● 以下の記事を参考に, ラズベリーパイのIPアドレスを固定します.

【ラズパイ4】IPアドレスを固定化する方法
ラズベリーパイ4でIPアドレスを固定化する方法をまとめました。

● RaspberryPiでターミナルを起動して以下のコマンドを実行してSquidをインストールします。

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install squid -y

● 以下のコマンドを実行してsquidの設定ファイルを編集できるようにします.

sudo chmod 777 ./etc/squid/squid.conf

● 「./etc/squid/squid.conf 」をエディタで開いて以下のように編集します.

# 接続クライアントのネットワークを指定(ご自身の環境に応じて変更が必要です)
acl localnet src 192.168.1.0/24

# SSL(HTTPS)接続時に 443 ポート以外の CONNECT を拒否
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports

# 接続先として指定されているポート以外を拒否
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
http_access deny !Safe_ports

# ローカルネットワークからのアクセスを許可
http_access allow localnet

# 自身からのアクセスを許可
http_access allow localhost
acl pauth proxy_auth REQUIRED

# キャッシュしないよう設定
no_cache deny all

# Squid が使用するポート
http_port 3128

# core 出力場所の設定
coredump_dir /var/spool/squid

# QueryStringの記録
strip_query_terms off

# ログの保存先と形式(Apache風)
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined

● 以下のコマンドで自動起動設定と設定ファイルの反映をします。

sudo systemctl enable squid.service
sudo systemctl restart squid.service

● Windowsパソコン側で「設定」→「ネットワークとインターネット」→「プロキシ」を開きます.

● 「手動プロキシセットアップ」の下にある「プロキシサーバーを使う」をオンにします.
そして「アドレス」にラズベリーパイの固定IPアドレスを, ポートにSquidのポート番号を入れて「保存」をクリックします.
以上で設定は完了です。

● Windowsパソコンでインターネットのページを適当に閲覧します.

● ラズパイ側で以下のコマンドを実行してからログファイル(/var/log/squid/access.log)を開くと,Windowsパソコンのアクセスログが残っています.

sudo chmod 777 /var/log/squid/access.log

■ログの中身の例

192.168.1.4 - - [03/May/2021:00:00:32 +0900] "CONNECT play.google.com:443 HTTP/1.1" 200 2203 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" TCP_TUNNEL:HIER_DIRECT
192.168.1.4 - - [03/May/2021:00:01:29 +0900] "CONNECT www.amazon.co.jp:443 HTTP/1.1" 200 259267 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" TCP_TUNNEL:HIER_DIRECT
192.168.1.4 - - [03/May/2021:00:01:35 +0900] "CONNECT live.nicovideo.jp:443 HTTP/1.1" 200 904 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" TCP_TUNNEL:HIER_DIRECT
192.168.1.4 - - [03/May/2021:00:01:35 +0900] "CONNECT www.youtube.com:443 HTTP/1.1" 200 82814 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" TCP_TUNNEL:HIER_DIRECT

これでどの端末(IPアドレス)が, どのサイトにアクセスしてるのかが記録に残ります.
こういったログを残すことで, 不正な通信がないかなどを調べることができます.

【ログ】ログフォーマットの定義

「./etc/squid/squid.conf 」でログのフォーマットを定義しました.
改めて紹介すると, ログフォーマットの定義の書式は以下の通りになります

logformat [任意の識別名] [フォーマット]
フォーマットの部分で指定できる書式は, 以下公式ドキュメントに記載されています。

Squid 3.5.19 Configuration File: logformat
Squid 3.5.19 logformat

デフォルトでは, 以下のとおりフォーマットが定義されています.。

%ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mtCopy

ラズベリーパイ4・5の使い方・応用例
ラズベリーパイ4・5の使い方や応用例について入門者向けにまとめてみました。

コメント