プロキシサーバが急遽必要になることが多々ある。備忘録として簡易的な構築手順をまとめておく。
構成は以下の通り。多段プロキシにする際は、.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