はじめに
- 職場で社内用の各種サーバーの管理を任されることになったので、まずは簡単そうなものから構築できるようになろうと考え、第二弾としてSquidを使ったProxyサーバーを立ててみました。
- この記事は構築手順をまとめたものとなりますが、あくまでも「学習用」としてProxyサーバーを構築したので、このままの設定などで本番用としては使えないかもしれません。
- Proxyそのものについては、こちらの記事をご覧ください。
全体像
- AWS上にsquidを使ったProxyサーバーを立てて、自宅の開発用PC(クライアントPC)がProxy経由でインターネットを利用する形にします。
テストに使用した環境
- クライアント(※既存の端末)がCentOS7ですが、Proxyサーバー側はあえてRocky Linuxを使ってみました。
- 技術的にRocky Linuxが必要ということではなく、単にRocky Linuxを使ってみたかったというだけです。
Proxyサーバー
- 仮想マシン
- AWSのEC2インスタンス(t3a.nano)
- OS
- Rocky Linux release 8.4 (Green Obsidian)
- Proxy
- squid 4.11
クライアントPC
- OS
- Windows 10 Pro (21H1)
#サーバー側の設定
仮想マシンの作成
- Rocky Linuxの仮想マシンを作った後、セキュリティグループに以下のインバウンドルールを追加しました。
- クライアントPCからProxyサーバーへの接続に必要な設定となります。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
カスタム TCP | TCP | 3128 | 自宅のグローバルIP |
firewalldの設定
- AWSやAzureを使う場合はセキュリティグループの設定で十分だと思いますが、オンプレ環境を使う場合はファイアウォールの設定が必要になると思います。
- 最初にfirewalldをインストールして、firewalldを起動しておきます。
[rocky@ip-10-0-1-29 ~]$ sudo yum install firewalld
[rocky@ip-10-0-1-29 ~]$ sudo systemctl start firewalld
[rocky@ip-10-0-1-29 ~]$ sudo systemctl enable firewalld
[rocky@ip-10-0-1-29 ~]$ sudo firewall-cmd --state
running
- 次にfirewalldで通信を許可されているサービスを確認します。
- ここでは、servicesにsquidが入っていないはずです。
[rocky@ip-10-0-1-29 ~]$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ntp ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
- 通信を許可するサービスにsquidを追加して、設定内容を確認します。
- 設定後は、servicesにsquidが入っているはずです。
[rocky@ip-10-0-1-29 ~]$ sudo firewall-cmd --add-service=squid --zone=public --permanent
success
[rocky@ip-10-0-1-29 ~]$ sudo firewall-cmd --add-service=squid --zone=public
success
[rocky@ip-10-0-1-29 ~]$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ntp squid ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Proxy用ポートとキャッシュディレクトリの設定
- squid.confを開いて、Proxy用のポートとキャッシュディレクトリの設定をします。
- Proxy用ポートは、デフォルトの3128を利用しました。
- コメントを外して、
/var/spool/squid
をキャッシュディレクトリとして指定しました。
[rocky@ip-10-0-1-29 ~]$ sudo vi /etc/squid/squid.conf
--------------------------------------------------------------------------------
# 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 fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
# Add 2021.10.20
acl localnet src {自宅のグローバルIP} ←★追記
...
# 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
...
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256 ←★コメント解除
...
--------------------------------------------------------------------------------
squidの起動と動作確認
- 以下のコマンドでsquidを起動します。
[rocky@ip-10-0-1-29 ~]$ sudo systemctl start squid
- 続けて、
squidclient
による動作確認を行います。- 今回は
https://www.google.com/?hl=ja
のコンテンツを取得できるかを確認しました。
- 今回は
[rocky@ip-10-0-1-29 ~]$ squidclient --host localhost --port 3128 https://www.google.com/?hl=ja
HTTP/1.1 200 OK
Link: </?hl=ja>;rel="canonical"
Date: Wed, 20 Oct 2021 07:16:57 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2021-10-20-07; expires=Fri, 19-Nov-2021 07:16:57 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=511=PbamSWJldqaFuwVkgKD6FDuJM7GPAoVT0pYerkRqUK_wHeMeiD8EiCDdANQXC-HJD3D_YfRJtVOrzCGil_7ixPO8vKclFbWNji7Z-MvdEyvaQ0YGr3qNp7RnvfKHF1nam7gUi__NU0mBAUPQDpYLIE4oK8T932hGrfR0aR9DRUE; expires=Thu, 21-Apr-2022 07:16:57 GMT; path=/; domain=.google.com; HttpOnly
Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
Accept-Ranges: none
Vary: Accept-Encoding
X-Cache: MISS from ip-10-0-1-29.ap-northeast-1.compute.internal
X-Cache-Lookup: MISS from ip-10-0-1-29.ap-northeast-1.compute.internal:3128
Via: 1.1 ip-10-0-1-29.ap-northeast-1.compute.internal (squid/4.11)
Connection: close
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="
クライアント側の設定
- [設定]>[ネットワークとインターネット]>[プロキシ]と進み、ProxyサーバーのグローバルIPと、先程に設定したポート番号を指定します。
- プロキシの設定が完了したら、任意のWebページを開けるか確認します。
アクセスログの確認
-
/var/squid/access.log
を開いて、アクセスログが記録されていることを確認します。 - 以下の例では、最初の4行はsquidclientによるテストのログで、後半の行は実際にブラウザからアクセスした際のログとなります。
[rocky@ip-10-0-1-29 ~]$ sudo vi /var/log/squid/access.log
--------------------------------------------------------------------------------
1634712268.755 195 ::1 TCP_MISS/200 16038 GET https://www.google.com/? - HIER_DIRECT/216.58.220.132 text/html
1634714217.192 186 ::1 TCP_MISS/200 16014 GET https://www.google.com/? - HIER_DIRECT/142.251.42.132 text/html
1634715022.390 203 ::1 TCP_MISS/200 16005 GET https://www.google.com/? - HIER_DIRECT/142.250.196.100 text/html
1634716541.909 193 ::1 TCP_MISS/200 16046 GET https://www.google.com/? - HIER_DIRECT/172.217.175.100 text/html
1634720435.630 224 {自宅のグローバルIP} TCP_TUNNEL/200 44671 CONNECT www.yahoo.co.jp:443 - HIER_DIRECT/183.79.250.123 -
1634720442.559 233 {自宅のグローバルIP} TCP_TUNNEL/200 44716 CONNECT www.yahoo.co.jp:443 - HIER_DIRECT/183.79.250.123 -
1634720510.470 52 {自宅のグローバルIP} TCP_TUNNEL/200 191 CONNECT servedby.flashtalking.com:443 - HIER_DIRECT/209.197.3.19 -
1634720510.491 124 {自宅のグローバルIP} TCP_TUNNEL/200 1097 CONNECT servedby.flashtalking.com:443 - HIER_DIRECT/209.197.3.19 ---------------------------------------------------------------------------------
参考URL
※上記以外に、標準テキスト CentOS 7 構築・運用・管理パーフェクトガイドも参考にしました。