0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EC2(Amazon Linux 2022)でSquid(v.5.7)を構築する

Last updated at Posted at 2023-01-31

今回はAmazon Linux2022(以下AL2022)でOSSのWebProxyのSquidを構築します。Amazon Linux2では"yum install squid"で簡単にインストールできますが、AL2022ではリポジトリからSquidパッケージがなくなっているようで自力でコンパイルしないといけません。悲しい...ネットでは簡単にサクサクできます的な感じですがソースDL、コンパイルからやると結構つまずくポイントが多かったので備忘録もかねて記事にします。

Squidとは何ぞやという方はこちら →Squidとは?

今回のゴール(やりたいこと)

AL2022をデプロイして
・Squid公式サイトからソースDLし、コンパイルして設定、構築する
・"systemctl squid start/stop"でサービス起動と停止ができるようにする
・Squid経由でデータDLできることを確認する

前提環境

以下の環境を前提として構築していきます。
・デプロイするEC2のOSはAL2022
・デプロイするEC2からインターネットへのアクセスは可能
・Squidのバージョンは5.x(今回はv5.7を構築しています)

構築の流れ

① VPC/EC2のデプロイ
② AL2022の初期設定、構築に必要なパッケージ、ツールのインストール
③ SquidソースデータのDL、コンパイル
④ サービス登録
⑤ 動作確認

実際にやってみた

①VPC/EC2のデプロイですがいつも通り他に詳しい記事があるので割愛します。とりあえずパブリックサブネットにAL2022がデプロイできればOKです。

続いて②ですがSSHでログイン、管理者モードに昇格して以下設定を行います。

#モジュールアップデート
 yum -y update

#日本語化
 localectl set-locale LANG=ja_JP.UTF-8

#タイムゾーンの設定
 timedatectl set-timezone Asia/Tokyo

#ホスト名設定
 hostnamectl set-hostname test-squid

いったんこれで設定反映させるため再起動をします

reboot

再起動後に以下パッケージ、ツールのインストール

#構築に必要なパッケージ、ツールのインストール
 yum -y install vim
 yum -y install gcc-c++
 yum -y install wget
 yum -y install perl

これで準備はOKなので、ここから③SquidソースデータのDL、コンパイルを行います。
 
まずソースデータをDLする予定のディレクトリに移動します。

#/usr/local/srcにソースデータをDLする予定
cd /usr/local/src

#データをDL (DLするバージョンはhttp://www.squid-cache.org/Versions/v5/で確認) ※今回はv5.7
wget http://www.squid-cache.org/Versions/v5/squid-5.7.tar.gz

ls -lすると"squid-5.7.tar.gz"がDLされていると思います。

DLした"squid-5.7.tar.gz"を解凍します。

tar fxzv squid-5.7.tar.gz

これでgzファイルが解凍されて、"squid-5.7"というディレクトリが作成されていると思います。

squid-5.7に移動

cd squid-5.7

次にディレクトリを指定してconfigureの実行を行います ※10分程度かかります。

./configure --prefix=/usr/local/squid/

makeを実行した際にエラー判定されないように変数を設定

export CFLAGS="-w"
export CXXFLAGS="-w"

makeの実行 ※20分程度かかります

make

make installの実行

make install

これでSquidソースデータのDL、コンパイルは完了です。続いてsystemctl start squid でサービス起動・停止できるように起動スクリプトを作成します。

# 起動スクリプト記述

[Unit]
Description=Squid caching proxy
After=syslog.target network.target nss-lookup.target

[Service]
Type=forking
LimitNOFILE=16384
EnvironmentFile=/usr/local/squid/etc/squid.conf
Environment="SQUID_CONF=/usr/local/squid/etc/squid.conf"
ExecStartPre=/usr/local/squid/libexec/cache_swap.sh
ExecStart=/usr/local/squid/sbin/squid $SQUID_OPTS -f $SQUID_CONF
ExecReload=/usr/local/squid/sbin/squid $SQUID_OPTS -k reconfigure -f $SQUID_CONF
ExecStop=/usr/local/squid/sbin/squid -k shutdown -f $SQUID_CONF
TimeoutSec=0

[Install]
WantedBy=multi-user.target

起動スクリプトはこれでOKです。他に必要なファイルや権限を設定していきます。

# cache_swap.shを作成

vi /usr/local/squid/libexec/cache_swap.sh
以下を記述 ※インデントがずれることがあるので注意

#!/bin/bash
if [ -f /etc/sysconfig/squid ]; then
    . /etc/sysconfig/squid
fi

SQUID_CONF=${SQUID_CONF:-"/usr/local/squid/etc/squid.conf"}

CACHE_SWAP=`sed -e 's/#.*//g' $SQUID_CONF | \
    grep cache_dir | awk '{ print $3 }'`

for adir in $CACHE_SWAP; do
    if [ ! -d $adir/00 ]; then
            echo -n "init_cache_dir $adir... "
            squid -N -z -F -f $SQUID_CONF >> /usr/local/squid/var/logs/squid.out 2>&1
    fi
done

# 設定読込
systemctl daemon-reload


# 実行権限を付与
chmod +x /usr/local/squid/libexec/cache_swap.sh


#キャッシュディレクトリの所有者を変更
chown nobody:nobody /usr/local/squid/var/cache/squid
chown nobody:nobody /usr/local/squid/var/logs

# キャッシュディレクトリの権限を変更
chmod -R 777 /usr/local/squid/var/cache/squid

これで設定は完了です。systemctl start squid でサービスが起動するか確認しましょう。

# squidサービス起動
systemctl start squid

# サービス状態の確認
systemctl status squid
以下のように「Active」となっていればOKです。

● squid.service - Squid caching proxy
 Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
 Active: active (running) since Mon 2023-01-30 16:17:34 JST; 6s ago
Process: 2116 ExecStartPre=/usr/local/squid/libexec/cache_swap.sh (code=exited, status=0/SUCCESS)
Process: 2121 ExecStart=/usr/local/squid/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Main PID: 2122 (squid)
  Tasks: 3 (limit: 9386)
 Memory: 15.8M
    CPU: 61ms
 CGroup: /system.slice/squid.service
         ├─ 2122 /usr/local/squid/sbin/squid -f /usr/local/squid/etc/squid.conf
         ├─ 2124 "(squid-1)" --kid squid-1 -f /usr/local/squid/etc/squid.conf
         └─ 2125 "(logfile-daemon)" /usr/local/squid/var/logs/access.log

あとは動作確認していきます。
まずちゃんとSquidで利用するポート(デフォルトだと3128)が開放されているかを確認します。

# Portの空きを確認
lsof -i:3128

以下のように表示されればOKです。
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
squid   2124 nobody   11u  IPv6  16517      0t0  TCP *:squid (LISTEN)

※port番号設定などはsquid.confで記述されています

Squid経由でデータのDLができるかどうかを確認します。

# Proxy経由の通信テスト
curl -O -L "https://www.redhat.com/index.html" -x "localhost:3128"

curlコマンドで、Proxy=localhostのポート3128経由でhttps://www.redhat.com/index.htmlをDLしてみます。

DLしたディレクトリでls -lを実行して"index.html"があればOKです。

  
ついでにProxyのログを確認します。

# ログのディレクトリまで移動
cd /usr/local/squid/var/logs/

#ログファイル(access.log)を表示
cat access.log

以下のようにログが出ていればOKです。
1675063537.720    478 127.0.0.1 TCP_TUNNEL/200 162598 CONNECT www.redhat.com:443 - HIER_DIRECT/23.194.65.134 -

ログの時間表示ですがデフォルトだとUTC標記ですらないのでわかりにくいです。ログをわかりやすく表示させたい場合がsquid.confでログのフォーマットを定義してやりましょう。

yum installでインストールした場合とのちがい

Amazon Linux2やRedhat8であれば”yum install squid”で簡単にインストールできます。ただSquidのバージョンはv3.5となります。3.6以降のバージョンを利用したい場合はソースデータからコンパイルすることになります。yumでインストールすると勝手にサービス登録してくれるので、起動スクリプトなどの手動作成が必要ないので便利です。また各種ディレクトリのパスもyum利用とソースからコンパイルした場合で変わります。今回はコンパイル時に"./configure --prefix=/usr/local/squid/"としていますので、squidの各種設定ファイルやログは”/usr/local/squid/”の下にあります。

例)
squid.confの場所は「/usr/local/squid/etc」
ログファイルの場所は「/usr/local/squid/var/logs」

おわりに

squid.confの設定については以前に記事にしたものがありますので、ご参考までに。
https://qiita.com/u-bayashi/items/26daf29f874135b452af

参考にしたサイト

https://www.unknownengineer.net/entry/2017/07/11/233058
https://qiita.com/shadowhat/items/f595d564498bbccb46d5

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?