KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

プロキシサーバを構築する。

登録日 :2024/03/20 21:08
カテゴリ :Linux

RockyLinux8でプロキシサーバを構築してみる。

1 プロキシサーバ側

Linuxでプロキシサーバを構築するのは、squidをインストールするだけでサクッとできる。

[root@rpmbuild installer]# yum -y install squid 2>&1 | tee yum_install_squid
Rocky Linux 8 - AppStream                       4.0 kB/s | 4.8 kB     00:01
Rocky Linux 8 - AppStream                       1.3 MB/s |  11 MB     00:08
Rocky Linux 8 - BaseOS                          3.7 kB/s | 4.3 kB     00:01
Rocky Linux 8 - BaseOS                          1.2 MB/s | 7.1 MB     00:06
Rocky Linux 8 - Extras                          2.8 kB/s | 3.1 kB     00:01
Rocky Linux 8 - Extras                          9.1 kB/s |  14 kB     00:01
依存関係が解決しました
================================================================================
 パッケージ      Arch   バージョン                              Repo      サイズ
================================================================================
インストール:
 squid           x86_64 7:4.15-7.module+el8.9.0+1599+7025d9cc.3 appstream 3.5 M
依存関係のインストール:
 libecap         x86_64 1.0.1-2.module+el8.9.0+1437+df5ea8f0    appstream  28 k
 perl-Digest-SHA x86_64 1:6.02-1.el8                            appstream  65 k
モジュールストリームの有効化中:
 squid                  4

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

ダウンロードサイズの合計: 3.6 M
インストール後のサイズ: 12 M
パッケージのダウンロード:
(1/3): libecap-1.0.1-2.module+el8.9.0+1437+df5e  41 kB/s |  28 kB     00:00
(2/3): perl-Digest-SHA-6.02-1.el8.x86_64.rpm     88 kB/s |  65 kB     00:00
(3/3): squid-4.15-7.module+el8.9.0+1599+7025d9c 1.2 MB/s | 3.5 MB     00:02
--------------------------------------------------------------------------------
合計                                            988 kB/s | 3.6 MB     00:03
トランザクションの確認を実行中
トランザクションの確認に成功しました
トランザクションのテストを実行中
トランザクションのテストに成功しました
トランザクションを実行中
  scriptletの実行中: squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64   1/1
  準備             :                                                        1/1
  インストール中   : perl-Digest-SHA-1:6.02-1.el8.x86_64                    1/3
  インストール中   : libecap-1.0.1-2.module+el8.9.0+1437+df5ea8f0.x86_64    2/3
  scriptletの実行中: libecap-1.0.1-2.module+el8.9.0+1437+df5ea8f0.x86_64    2/3
  scriptletの実行中: squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64   3/3
  インストール中   : squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64   3/3
  scriptletの実行中: squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64   3/3
  検証             : libecap-1.0.1-2.module+el8.9.0+1437+df5ea8f0.x86_64    1/3
  検証             : perl-Digest-SHA-1:6.02-1.el8.x86_64                    2/3
  検証             : squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64   3/3

インストール済み:
  libecap-1.0.1-2.module+el8.9.0+1437+df5ea8f0.x86_64
  perl-Digest-SHA-1:6.02-1.el8.x86_64
  squid-7:4.15-7.module+el8.9.0+1599+7025d9cc.3.x86_64

完了しました!

squidは3128番ポートを使うのでfirewalldでその穴開けをするが、今回はテストなので、firewalldを無効化しておく。

[root@rpmbuild installer]# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enable>
   Active: inactive (dead) since Wed 2024-03-20 19:28:54 JST; 17s ago
     Docs: man:firewalld(1)
  Process: 838 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, >
 Main PID: 838 (code=exited, status=0/SUCCESS)

2 クライアントからの接続確認

squidを構築したサーバとは別のホストにて、プロキシサーバを経由してアクセスができるのかを確認する。
※ちなみに、このホストはインターネットに接続するポートをシャットダウンして、単独ではインターネットに接続できないようにしている。

HTTPのプロキシ設定(環境変数)

export http_proxy=http://192.168.56.110:3128

curlで応答を確認する。

[root@compute01 lib]# curl www.google.com --head
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-REI_DBY_evC37dr0RWZzPw' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Wed, 20 Mar 2024 12:07:01 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Expires: Wed, 20 Mar 2024 12:07:01 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2024-03-20-12; expires=Fri, 19-Apr-2024 12:07:01 GMT; path=/; domain=.google.com; Secure
Set-Cookie: AEC=Ae3NU9O_NyxMnlhD8nz9W5uvKn-L1W9OExjRIAqpF5pDOUuZkH_olm1NX90; expires=Mon, 16-Sep-2024 12:07:01 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax
Set-Cookie: NID=512=DvKWDDOvDSajJVj_hXm1UbHA-_wG1oYxiHQ-Y1ZlHX7F2nA-00xUlCwJRDTcLvar6yCHKSRdCnWH4z70b7tMiD2C3-stL1pDw1mwAzhwJVZhrRaBiO70-etTegevWmWwvUMhIuBo50Omc8CZf6xZhiIsXna5YO3SF9UVO2S993w; expires=Thu, 19-Sep-2024 12:07:01 GMT; path=/; domain=.google.com; HttpOnly
X-Cache: MISS from rpmbuild
X-Cache-Lookup: MISS from rpmbuild:3128
Via: 1.1 rpmbuild (squid/4.15)
Connection: keep-alive

HTTP/1.1 200 OKが返ってきており、HTTPの応答が正常であることがわかる。
また、最後から2番目にて、Via 1.1 rpmbuild(squid/4.15)があることから、rpmbuildというホスト名のsquidを経由してアクセスしていることがわかる。

dnfでの利用を含めて恒久的な設定にする場合は、以下のように/etc/profile.d/proxy.shを作成する。

[root@compute01 profile.d]# cat /etc/profile.d/proxy.sh
MY_PROXY_URL="192.168.56.110:3128"

HTTP_PROXY=$MY_PROXY_URL
HTTPS_PROXY=$MY_PROXY_URL
FTP_PROXY=$MY_PROXY_URL
http_proxy=$MY_PROXY_URL
https_proxy=$MY_PROXY_URL
ftp_proxy=$MY_PROXY_URL

export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy

[root@compute01 profile.d]#

有効にするためには、再起動するかsourceコマンドで読み込む

source /etc/profile.d/proxy.sh

3 アクセスログの確認

デフォルトでは、アクセスログがUNIXタイムスタンプで醜いため、/etc/squid/squid.confに次の2行を追加する。

[root@rpmbuild squid]# cat /etc/squid/squid.conf
(省略)
logformat timefm %{%Y/%m/%d %H:%M:%S}tl %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log daemon:/var/log/squid/access.log timefm

squidを再起動して、再度クライアントからHTTPへのアクセスをしてアクセスログを見ると以下のように、見やすい時間となったことがわかる。

1710951496.898    141 192.168.56.112 TCP_MISS/200 1223 HEAD http://www.google.com/ - HIER_DIRECT/172.217.25.164 text/html
2024/03/21 01:24:34 1710951874.618    286 192.168.56.112 TCP_MISS/200 1223 HEAD http://www.google.com/ - HIER_DIRECT/172.217.25.164 text/html

参考)構築手順1
参考)構築手順2 
参考)lログの時刻フォーマット