InfraAcademy

InfraAcademy Blog

Squidの設定方法を初心者向けに解説|安全なプロキシサーバーを構築する手順

こんにちは、インフラエンジニアのryuです。

今回は、初心者のためのSquid設定方法を解説します。Squidとは、Linux上でプロキシサーバーを構築できる代表的なソフトウェアです。

プロキシサーバーを使うと、クライアントPCはSquidを経由してWebサイトへアクセスします。

この記事では、Debian・Ubuntu系Linuxを例に、インストールから動作確認まで順番に解説します。

【初心者向け】Squidの設定方法解説

今回の記事は、初心者のためにSquidの設定方法を解説します。

Squidとは、プロキシサーバーを構築するためのパッケージでLinuxにインストールします。

プロキシサーバーの動作や仕組みがよく分からない方は、こちらの記事をご覧ください。

【関連記事】プロキシサーバーとは?仕組みと役割を解説

Squidを構築する手順は、次のとおりです。

手順 作業内容
1 LinuxサーバーとクライアントPCを準備する
2 Squidをインストールする
3 ACLで接続元を制限する
4 設定を検証して再起動する
5 curlやブラウザで動作確認する
6 access.logを確認する

Squidを構築する環境を準備する

Squidへ接続するクライアントPCと、Squidを動かすLinuxサーバーを準備します。

手順①.Squidをインストールするための環境構築

Squidを構築するための環境の準備をしましょう。

まずはLinuxサーバーを起動してください。

Linuxサーバーはなんでも良いですが、私はDebianを使用します。

VirtualBoxやVMwareなどの仮想マシンでも構いません。WSLでも検証できますが、Windows側からの接続方法が通常の仮想マシンと異なる場合があります。

Linuxからインターネットへ接続できるか確認します。

curl -I https://example.com

続いて、SquidサーバーのIPアドレスを確認します。

ip address

たとえば、Squidサーバーを192.168.1.50、クライアントPCを192.168.1.20とします。

【関連記事】LinuxでIPアドレスを確認する方法

今回準備した構成図は下記のようになります。

プロキシサーバー設定環境 自分の使用しているPCからプロキシサーバーにアクセスし、プロキシサーバーがWebサーバーにアクセスする流れになります。

SquidをLinuxへインストールする

準備ができたら、LinuxへSquidをインストールします。

手順②.Squidインストール

環境の準備が完了したら、Linuxにパッケージのインストールを行います。

Debian・Ubuntu系では、次のコマンドを実行します。

sudo apt update
sudo apt install squid

インストール後は、バージョンとサービス状態を確認します。

squid -v
sudo systemctl status squid

active (running)と表示されれば、Squidは起動しています。

コマンドを入力すると、Squidのパッケージがインストールされます。

squidインストール インストールが完了したら、squidの設定を行います。

Debian・Ubuntu系では、一般的に/etc/squid/squid.confを編集します。

Squidの設定ファイルを編集する

先ほどまで、squidサーバーが動作する環境を構築しました。ここからはsquidの設定ファイルを編集します。

設定前に、元のファイルをバックアップしておきましょう。

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

手順③.設定ファイルのACLを編集する

次に設定ファイルの編集を行います。

Squidはインストールされた状態では、ほとんどのPCからのアクセスを拒否しています。おそらく、今の環境では、Squidにアクセスできません。

なぜアクセスできないかというと、ACLとhttp_accessによって、利用できる接続元が制御されているためです。

ACLは、IPアドレスやネットワークなどの条件を定義します。ACLを書いただけでは通信は許可されず、http_accessと組み合わせます。

sudo vi /etc/squid/squid.conf

今回は、192.168.1.0/24からだけ接続を許可します。

acl my_network src 192.168.1.0/24
http_access allow my_network
http_access deny all

設定ファイル内に既存のhttp_access deny allがある場合は、独自の許可ルールをそのに置きます。

Squidはhttp_accessを上から順に評価するため、先にdeny allへ一致すると、下の許可ルールは使われません。

元記事では、次の設定で全通信を許可していました。

http_access allow all

これは検証環境でもおすすめしません。接続元を限定しないと、意図しない端末からプロキシを利用される可能性があります。

【関連記事】Squidでhttp_accessを使ってアクセス制限する方法

Squidの待ち受けポートを確認する

Squidの標準的な待ち受けポートは3128です。

http_port 3128

Squidの設定を検証して反映する

設定を保存したら、すぐに再起動せず、構文エラーがないか確認します。

sudo squid -k parse

致命的なエラーが表示されなければ、Squidが設定ファイルを読み取れる状態です。

エラーが表示された場合は、行番号、ACL名、allowdenyのスペルを確認します。

手順④.Squid再起動

設定ファイルを編集したら、Squidを再起動しましょう。以下のコマンドを入力します。

sudo systemctl restart squid

元記事の/etc/init.d/squid restartは、古いinitスクリプトを直接実行する方法です。現在のsystemd環境では、systemctlを使うのが一般的です。

再起動後に状態を確認します。

sudo systemctl status squid

特にエラーが表示されなければ、成功です。

これで、サーバー側の設定が完了です。

設定だけを読み直したい場合は、環境によって次のコマンドも利用できます。

sudo systemctl reload squid

クライアントからSquidへ接続する

サーバー側の準備ができたら、クライアントPCからSquidへ接続します。

最初はブラウザよりもcurlを使うと、プロキシの指定と結果を確認しやすくなります。

curlで動作確認する

クライアントPCから、次のように実行します。

curl -x http://192.168.1.50:3128 -I https://example.com

IPアドレスは、Squidサーバーのものへ置き換えてください。

200 OKなどのレスポンスが表示されれば、プロキシ経由で接続できています。

【関連記事】Linuxのcurlコマンドの使い方

手順⑤.ノートPCのWebブラウザの設定

次にノートPCのWebブラウザにて、プロキシの設定を行います。

各ブラウザ毎に設定方法が違います。今回はInternetExplorerの設定方法を解説します。

まず、画面右上の設定をクリックし、「インターネットオプション」を選択します。

そして「接続」タブの「LAN設定」をクリックします。

LAN設定の「プロキシサーバー」の設定を以下の図のように行います。IPアドレスはSquidサーバーのIPアドレスで、ポートは「3128」です。※WSLを使用しているため、IPアドレスが127.0.0.1

Webブラウザでプロキシを使う設定 これで、Webサイトに接続できるか確認しましょう。

上記はInternet Explorerを使っていた当時の画面です。現在のWindowsでは、設定アプリのネットワークとインターネットからプロキシを設定する方法が一般的です。

WSLを使っている場合も、常に127.0.0.1で接続できるとは限りません。利用しているWSLのバージョンやネットワーク構成に合わせて確認してください。

Squidの動作をログで確認する

最後に、待ち受けポートとアクセスログを確認します。

3128番ポートを確認する

次のコマンドで、Squidが接続を待っているか確認します。

sudo ss -lntp | grep 3128

LISTENと表示されれば、3128番ポートで待ち受けています。

何も表示されない場合は、サービス状態と設定エラーを確認してください。

Squidのログを確認する

Squidサーバーのログを確認すると、どのPCがどこのサイトにアクセスしているか分かります。

確認するためには、以下のコマンドを入力しましょう。

sudo tail -f /var/log/squid/access.log

HTTPSサイトへ接続すると、TCP_TUNNEL/200CONNECT example.com:443などを含むログが表示される場合があります。

接続元IP、アクセス先、結果コードを確認してください。

ログが表示されたら、squidサーバー経由でWebサーバーにアクセスしていることが分かります。

【関連記事】Linuxでログを監視するtailとlessの使い方

Squidで接続できないときの確認項目

設定後に接続できない場合は、症状ごとに原因を切り分けます。

むやみにallow allへ変更するのではなく、サービス、ポート、ACLの順番を確認しましょう。

Access Deniedと表示される

Access Deniedが表示される場合は、クライアントのIPアドレスがACLに一致していない可能性があります。

acl my_network src 192.168.1.0/24

クライアントが192.168.10.20なら、上のACLには一致しません。実際のIPアドレスとネットワーク範囲を確認してください。

Connection refusedになる

接続拒否の場合は、Squidが起動していない、3128番ポートで待ち受けていない、ファイアウォールに拒否されている可能性があります。

sudo systemctl status squid
sudo ss -lntp | grep 3128
sudo squid -k parse

クラウド上のサーバーでは、セキュリティグループやファイアウォールの設定も必要です。

設定変更が反映されない

設定ファイルを保存しただけでは、実行中のSquidへ反映されません。

sudo squid -k parse
sudo systemctl reload squid

Squidを安全に運用する注意点

Squidはクライアントの代理で外部サイトへ接続します。

接続元を制限せずに公開すると、第三者の通信を自分のサーバーから中継することになります。

http_access allow allを使わない

ローカル環境だけのつもりでも、ルーターのポート転送やクラウドの設定によって外部から接続される可能性があります。

許可するネットワークを明示し、最後にhttp_access deny allを置きましょう。

既定の安全な設定をすべて削除しない

/etc/squid/squid.confには、安全でないポートやCONNECT通信を制限する既定ルールが含まれる場合があります。

ファイル全体を短い設定へ置き換えず、既存のルールを残したうえで、必要な許可設定を追加してください。

ログの扱いにも注意する

access.logには、接続元IPやアクセス先が記録されます。

実務で利用する場合は、閲覧権限、保存期間、ログローテーション、プライバシーへの配慮も必要です。

【初心者向け】Squidの設定方法解説まとめ

今回は、初心者のためのSquid設定方法を解説しました。

重要なのは、Squidを起動することだけではなく、接続を許可する端末をACLで限定することです。

設定後は、squid -k parseで構文を確認し、curl -xで通信を試し、access.logでSquidを経由したことを確認しましょう。

私もエンジニアとして10年以上設定作業をしてきましたが、バックアップ、構文確認、ログ確認という順番を大切にしています。この流れは、Squid以外のミドルウェア設定でも役立ちます。

このようなITに関連する内容を当ブログでは、発信しているので興味のある方は、是非ご覧ください。

さらに詳しく知りたい方は、こちらの参考書をご覧ください。

Linux教科書 LPICレベル2 Version4.5対応

図解入門TCP/IP 仕組み・動作が見てわかる

参考情報

Squidでは、ACLで条件を定義し、http_accessで許可・拒否を決めます。ルールは上から順に評価されるため、最後に明示的な拒否を置くことが重要です。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る