こんにちは、インフラエンジニアの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の設定を行います。
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名、allowとdenyのスペルを確認します。
手順④.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サイトに接続できるか確認しましょう。
上記は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/200やCONNECT 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に関連する内容を当ブログでは、発信しているので興味のある方は、是非ご覧ください。
さらに詳しく知りたい方は、こちらの参考書をご覧ください。
参考情報¶
Squidでは、ACLで条件を定義し、http_accessで許可・拒否を決めます。ルールは上から順に評価されるため、最後に明示的な拒否を置くことが重要です。

