ラズベリーパイ4にSquidをインストールしてプロキシサーバを自作する方法をまとめました。
【はじめに】プロキシサーバーとSquidについて
プロキシサーバとは, インターネットへの接続を代理するサーバーのことです。
プロキシサーバーを導入すると, 代理するインターネット接続の通信ログを保存したり, ファイアウォールのように特定のドメインやポートの通信を許可・拒否することができる利点があります.
例えば, ラズベリーパイをプロキシサーバーにすると, 以下のような順でWindowsパソコンからインターネットに接続されます.
●プロキシサーバーありの通信経路
●プロキシサーバーなしの通信経路
そのため, セキュリティ向上のために会社等のPCはインターネットに接続させる際には, プロキシサーバーを経由させることが多いです.
【Squid】インストール・設定・起動
RaspberryPiをプロキシサーバーにする方法として、「Squid」というソフトウェアを使うのが手っ取り早いです.
インストール・設定・起動方法は以下のとおりです.
● 以下の記事を参考に, ラズベリーパイの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 [任意の識別名] [フォーマット]
フォーマットの部分で指定できる書式は, 以下公式ドキュメントに記載されています。
デフォルトでは, 以下のとおりフォーマットが定義されています.。
%ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mtCopy
コメント