Squid プロキシサーバをLinux上に準備する際の構築手順をメモ

コンピュータ
スポンサーリンク

プロキシサーバが急遽必要になることが多々ある。備忘録として簡易的な構築手順をまとめておく。

構成は以下の通り。多段プロキシにする際は、.11を上段、.12を下段のプロキシとする。

本番環境で稼働させる場合、セキュリティ関連、キャッシュ関連、DNS関連などの設定も必要ではあるが、RHELのLinux上にサクッと準備したい場合は、今回の手順だけで即稼働させることは可能。本手順を覚えれば、Windows版も扱えると思います。

スポンサーリンク

Squidのインストール

//インストール
# dnf install squid
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 23:50:54 時間前の 2022年01月15日 21時38分38秒 に実施しました。
依存関係が解決しました。
=======================================================================================================================================================
 パッケージ            アーキテクチャー     バージョン                                            リポジトリー                                   サイズ
=======================================================================================================================================================
インストール:
 squid                 x86_64               7:4.15-1.module+el8.5.0+11469+24c223d9                rhel-8-for-x86_64-appstream-rpms               3.6 M
依存関係のインストール:
 libecap               x86_64               1.0.1-2.module+el8.1.0+4044+36416a77                  rhel-8-for-x86_64-appstream-rpms                29 k
モジュールストリームの有効化中:
 squid                                      4

トランザクションの概要
=======================================================================================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 3.6 M
インストール後のサイズ: 12 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): libecap-1.0.1-2.module+el8.1.0+4044+36416a77.x86_64.rpm                                                          96 kB/s |  29 kB     00:00
(2/2): squid-4.15-1.module+el8.5.0+11469+24c223d9.x86_64.rpm                                                            11 MB/s | 3.6 MB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                    10 MB/s | 3.6 MB     00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  scriptletの実行中: squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64                                                                           1/1
  準備             :                                                                                                                               1/1
  インストール中   : libecap-1.0.1-2.module+el8.1.0+4044+36416a77.x86_64                                                                           1/2
  scriptletの実行中: libecap-1.0.1-2.module+el8.1.0+4044+36416a77.x86_64                                                                           1/2
  scriptletの実行中: squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64                                                                           2/2
  インストール中   : squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64                                                                           2/2
  scriptletの実行中: squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64                                                                           2/2
[/usr/lib/tmpfiles.d/pesign.conf:1] Line references path below legacy directory /var/run/, updating /var/run/pesign → /run/pesign; please update the tmpfiles.d/ drop-in file accordingly.

  検証             : libecap-1.0.1-2.module+el8.1.0+4044+36416a77.x86_64                                                                           1/2
  検証             : squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64                                                                           2/2
インストール済みの製品が更新されています。

インストール済み:
  libecap-1.0.1-2.module+el8.1.0+4044+36416a77.x86_64                        squid-7:4.15-1.module+el8.5.0+11469+24c223d9.x86_64

完了しました!


//導入確認
# systemctl status squid.service
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:squid(8)

//自動起動に変更
# systemctl enable squid.service
Created symlink /etc/systemd/system/multi-user.target.wants/squid.service → /usr/lib/systemd/system/squid.service.

squid.confの修正

ひとまず動かすだけであれば、★の2か所を修正すれば動くと思われる

//conf修正
# vi /etc/squid/squid.conf

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
#acl localnet src 10.0.0.0/8            # RFC 1918 local private network (LAN)
#acl localnet src 100.64.0.0/10         # RFC 6598 shared address space (CGN)
#acl localnet src 169.254.0.0/16        # RFC 3927 link-local (directly plugged) machines
#acl localnet src 172.16.0.0/12         # RFC 1918 local private network (LAN)
#acl localnet src 192.168.0.0/16                # RFC 1918 local private network (LAN)
acl localnet src 192.168.11.0/24 ★アクセスを許可するネットワーク
#acl localnet src fc00::/7              # RFC 4193 local private network range
#acl localnet src fe80::/10             # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
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
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
#http_port 3128
http_port 192.168.11.11:8080 ★クライアントがアクセスするアドレス、ポートに修正

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320




動作確認

squidを起動し、curlで確認

//squid起動
# systemctl start squid.service


//起動後のステータス確認
# systemctl status squid.service
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-01-16 21:42:40 JST; 4s ago
     Docs: man:squid(8)
  Process: 43975 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
 Main PID: 43981 (squid)
    Tasks: 3 (limit: 49318)
   Memory: 14.2M
   CGroup: /system.slice/squid.service
           tq43981 /usr/sbin/squid --foreground -f /etc/squid/squid.conf
           tq43983 (squid-1) --kid squid-1 --foreground -f /etc/squid/squid.conf
           mq43984 (logfile-daemon) /var/log/squid/access.log

 1月 16 21:42:40 relay systemd[1]: Starting Squid caching proxy...
 1月 16 21:42:40 relay squid[43981]: Squid Parent: will start 1 kids
 1月 16 21:42:40 relay squid[43981]: Squid Parent: (squid-1) process 43983 started
 1月 16 21:42:40 relay systemd[1]: Started Squid caching proxy.


//squidを構築したサーバでログを表示し、curlでアクセスしたときの出力ログ
# tail -f /var/log/squid/access.log
1642337945.801    115 192.168.11.12 TCP_TUNNEL/200 48543 CONNECT www.yahoo.co.jp:443 - HIER_DIRECT/183.79.250.251 -


//クライアント側でcurlで動作確認をするが、-x オプションで構築したプロキシを指定する
# curl https://www.yahoo.co.jp/ -x http://192.168.11.11:8080

多段プロキシの設定

上段のプロキシと比較した際に、下段側のsquid.confで変更する箇所は、以下の通り。

//下段プロキシのsquid.confの最後に以下2行を追記

never_direct allow all ★すべてのリクエスト上段に投げる
cache_peer 192.168.11.11 parent 8080 0 no-query ★上段プロキシ指定


//下段のプロキシにリクエストを投げて動作確認
# curl https://www.yahoo.co.jp/ -x http://192.168.11.12:8080

上記のリクエストを投げると、上位192.168.11.11:8080へリクエストを投げ、上段プロキシが外部へアクセスする

URLフィルタ(アクセス先制限:ホワイトリスト)

特定のURL(FQDN)のみアクセス許可したいという要件も、よくあるかと思います。ホワイトリストやブラックリストなどありますが、「許可」のため、ホワイトリストを作成します。

//squid.confに以下の内容を追記
# vi /etc/squid/squid.conf
acl whitelist dstdomain "/etc/squid/whitelist"
 ★別途ファイルで管理した方が楽だと思います
http_access allow whitelist
http_access deny all


//ホワイトリスのファイルを作成。
# vi /etc/squid/whitelist
.google.com  ←.から始めると、www.google.com、google.comといった両方が許可されます
.microsoft.com

//設定を反映させる
# systemctl restart squid.service

//curlで動作確認すると、
# curl https://www.microsoft.com/ -x http://192.168.11.11:8080 ★許可
# curl https://google.com/ -x http://192.168.11.11:8080 ★許可
# curl https://www.yahoo.co.jp/ -x http://192.168.11.11:8080
  ★ブロックされ、以下の内容が標準出力
curl: (56) Received HTTP code 403 from proxy after CONNECT

//culrで実行する前にログを表示しておく、「www.yahoo.co.jp」のみTENIEDでブロックされている
# tail -f /var/log/squid/access.log

1642943345.907     48 192.168.11.11 TCP_TUNNEL/200 6197 CONNECT www.microsoft.com:443 - HIER_DIRECT/210.132.238.175 -
1642943349.962    101 192.168.11.11 TCP_TUNNEL/200 8009 CONNECT google.com:443 - HIER_DIRECT/172.217.161.46 -
1642943357.934      0 192.168.11.11 TCP_DENIED/403 3848 CONNECT www.yahoo.co.jp:443 - HIER_NONE/- text/html
タイトルとURLをコピーしました