「誰でも通す」のは、泥棒に鍵を渡すのと同じ。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、Squidをインストールして、とりあえずインターネットに繋がるところまで確認しましたね。
しかし、今の状態は「鍵のかかっていない玄関」と同じです。
もし誰かにIPアドレスを知られたら、勝手にあなたのサーバーを踏み台にして、悪さをされてしまう危険性があります。
先生、それは怖いです!
それに、会社で導入するなら「仕事に関係ないYouTubeは見ちゃダメ」とか、「経理部の人しか会計システムには繋げない」みたいな設定もしたいです。
Squidならそういう細かい制御もできるんですよね?
もちろんよ、コウ君。
それを行うのが「ACL(アクセスコントロールリスト)」という機能。
Squidの設定ファイルは、このACLの塊と言ってもいいわ。
今回は、プロキシ管理者の必須スキルである「許可と拒否のルール作り」をマスターしましょう!
本記事では、Squidの設定ファイル squid.conf の読み方を理解し、IPアドレス制限、特定サイトのブロック、そしてポート番号の変更といった、実務で必須のセキュリティ設定をハンズオン形式で学びます。
🦑 Squid完全攻略講座(バックナンバー)
- 【第1回】プロキシサーバーとは?仕組みの完全図解とインストール
- 【第2回】アクセス制御の基礎(ACL)とポート設定
- 【第3回】「誰?」を識別する認証プロキシ(Basic/Digest)の構築
- 【第4回】暗号化通信の制御!HTTPSとSSL接続の仕組み
- 【第5回】爆速化!キャッシュ機能のチューニングとメモリ管理
- 【第6回】アクセスログ解析とモニタリングの極意
- 【第7回】鉄壁の守り!フィルタリング(ブラックリスト/ホワイトリスト)
- 【第8回】トラブルシューティングと冗長化構成(PACファイル)
第1章:Squidの心臓部「squid.conf」の構造
Squidの挙動は、すべて /etc/squid/squid.conf という一つのテキストファイルで制御されています。
まずはこのファイルを開いて、中身を見てみましょう。
1. 編集前の鉄則:バックアップ
設定ファイルをいじる前の「お約束」です。
失敗しても初期状態に戻せるよう、必ずバックアップを取りましょう。
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
2. コメント行の除去(見やすくする)
デフォルトの squid.conf は、親切すぎてコメント(# で始まる説明文)が大量に書かれており、非常に読みづらいです。
学習のために、コメントを除外した「有効な設定行」だけを表示してみましょう。
grep -v "^#" /etc/squid/squid.conf | grep -v "^$"
すると、意外と短いことがわかります。
重要なのは、主に以下の2種類の行です。
acl ...: 定義(グループ分け)をする行http_access ...: 許可/拒否のルールを適用する行
第2章:ACLとhttp_accessの「黄金ルール」
Squidのアクセス制御は、「定義(ACL)」して「適用(Access)」する、という2ステップで行われます。
これを理解していないと、設定は書けません。
ステップ1:ACL(定義)
まず、「制御したい対象」に名前を付けます。
「社員PC」「経理部」「YouTube」といったグループを作るイメージです。
書式: acl [名前] [タイプ] [値]
# 例:社内LAN(192.168.1.0/24)を "lan_users" と名付ける acl lan_users src 192.168.1.0/24
ステップ2:http_access(適用)
次に、定義したグループに対して「許可(allow)」するか「拒否(deny)」するかを決めます。
書式: http_access [allow|deny] [名前]
# 例:lan_users からのアクセスを許可する http_access allow lan_users
【超重要】ルールは「上から順」に評価される
ここが今回最大のポイントです。http_access は、上から順番にチェックされ、最初にマッチしたルールで確定します。
- 1行目で「許可」されたら → 即通過(2行目以降は見ない)。
- 1行目で「拒否」されたら → 即ブロック(2行目以降は見ない)。
- 最後までどのルールにもマッチしなかったら → デフォルトの挙動(通常は拒否)になる。
つまり、「拒否ルール」は「許可ルール」よりも上に書かないと意味がありません。
「全員通してよし!」と言った後に「あ、田中君はダメ」と言っても遅いのです。
第3章:よく使うACLタイプ一覧
制御に使える条件(タイプ)はたくさんあります。
代表的なものを覚えておきましょう。
| タイプ | 意味 | 設定例 |
|---|---|---|
| src | 送信元IPアドレス (Source) |
acl my_pc src 192.168.1.5(特定のPCを指定) |
| dstdomain | 宛先ドメイン (Destination Domain) |
acl bad_site dstdomain .yahoo.co.jp(Yahoo全体を指定) |
| dst | 宛先IPアドレス | acl bad_ip dst 203.0.113.10 |
| port | 宛先ポート番号 | acl ssh_port port 22 |
| method | HTTPメソッド | acl connect_method method CONNECT(HTTPS接続など) |
| time | 時間帯 | acl work_time time M T W H F 09:00-18:00(平日9時〜18時) |
第4章:実践!アクセス制御シナリオ
では、具体的なシナリオに沿って設定を書いてみましょう。sudo nano /etc/squid/squid.conf でファイルを開き、編集してください。
シナリオA:特定のPC(社長)だけYouTube禁止
IPアドレス 192.168.1.50(社長)は、.youtube.com へのアクセスを禁止しますが、それ以外は許可します。
設定の記述場所:
デフォルトで書かれている http_access allow localhost などの後、http_access deny all の前あたりに追記します。
# --- ここから追記 --- # 1. 定義 (ACL) acl boss_pc src 192.168.1.50 acl youtube dstdomain .youtube.com # 2. 適用 (http_access) ※拒否を先に書く! # 社長 かつ YouTube なら拒否 http_access deny boss_pc youtube # それ以外の社内LANは許可 acl lan_net src 192.168.1.0/24 http_access allow lan_net # --- ここまで ---
設定を変更したら、必ず構文チェックと再起動を行います。
# 構文チェック(エラーが出なければOK) squid -k parse # 再起動 sudo systemctl restart squid
シナリオB:勤務時間外のみネット接続を許可
「平日9:00〜17:00はアクセス禁止」という厳しいルールを作ってみましょう。
# 時間の定義 (M=月, T=火, W=水, H=木, F=金) acl work_hours time M T W H F 09:00-17:00 # 勤務時間中は拒否 http_access deny work_hours # それ以外は許可 http_access allow lan_net
第5章:セキュリティ強化!ポート番号の変更
Squidのデフォルトポート 3128 は、攻撃者にも周知の事実です。
このまま公開していると、「オープンプロキシ探索ツール」の標的になりやすいです。
ポートを 8080 や 10080 などに変更して、少しでもリスクを下げましょう。
今回は 8080 に変更してみます。
しかし、ただ設定を変えるだけでは起動しません(ここが罠です!)。
手順1:squid.confの変更
以下の行を探して書き換えます。
# http_port 3128 http_port 8080
手順2:ファイアウォールの変更
新しいポート(8080)を開け、古いポート(3128)を閉じます。
sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --remove-service=squid --permanent sudo firewall-cmd --reload
手順3:【最重要】SELinuxの設定変更
AlmaLinuxなどのRHEL系OSでは、SELinuxが「Squidは3128以外使っちゃダメ!」と監視しています。
この許可を与えないと、Squidは起動エラーになります。
まず、管理ツールを入れます(入っていない場合)。
sudo dnf install policycoreutils-python-utils -y
次に、Squidが使えるポート一覧を確認します。
sudo semanage port -l | grep squid_port_t # squid_port_t tcp 3128, 3401, 4827
ここに 8080 を追加します。
sudo semanage port -a -t squid_port_t -p tcp 8080
これで準備完了です。Squidを再起動しましょう。
sudo systemctl restart squid
クライアント(ブラウザ)側のプロキシ設定も、ポート 8080 に変更するのを忘れずに!
第6章:トラブルシューティング「ブロックできない?」
Q1. 設定したのにYouTubeが見れてしまう
A. ルールの順番を確認してください。
http_access deny ... の記述が、http_access allow all や http_access allow lan_net よりも下に書いてありませんか?
Squidは最初にマッチしたルールを採用します。拒否ルールは必ず許可ルールより上に書いてください。
Q2. 設定を変更したのに反映されない
A. 再起動(またはリロード)を忘れずに。
設定ファイルを書き換えただけでは反映されません。sudo systemctl reload squid を実行してください。これなら通信を切断せずに設定だけ読み直せます。
Q3. HTTPSサイト(SSL)でドメインブロックが効かない
A. HTTPSの仕様上の限界です(次回解説)。
通常のプロキシ設定では、HTTPS通信の中身(URLのパスなど)は見えません。
ただし、dstdomain によるドメイン単位のブロックは、SSL接続時の「CONNECTメソッド」の宛先を見ることで、ある程度は機能します。
より厳密に行うには「SSLバンピング」が必要になりますが、これは第4回で詳しく解説します。
まとめ:ACLを制する者はSquidを制す
お疲れ様でした!
今回はSquidの要である「アクセス制御」をマスターしました。
今回の重要ポイント:
- ACLで「定義」し、http_accessで「適用」する。
- ルールは「上から順」に評価され、マッチしたら即確定する。
- 拒否ルールは許可ルールより上に書くのが鉄則。
- ポート変更時はSELinuxの設定も忘れずに。
これで、「特定の人は通す」「特定のサイトはブロックする」という基本運用ができるようになりました。
しかし、IPアドレス制限だけでは不十分な場合があります。
社員が勝手にIPを変えたり、社外からアクセスしたい場合はどうすればいいでしょう?
次回、第3回は「『誰?』を識別する認証プロキシ(Basic/Digest)の構築」です。
ユーザー名とパスワードを知っている人だけが使える、よりセキュアなプロキシ環境を構築します。
お楽しみに!
▼ エンジニアとしてのキャリアを加速させる ▼
プロキシ構築を実践
「VPS」で自分専用環境
サーバー知識を年収に
「ITエンジニア転職」


コメント