SquidによるフォワードプロキシでCode Engineへのアクセスを制御する

# 検証したい内容
Code EngineへのアクセスをVirtual Server Instanceに紐づいているSecurity GroupにてIPアドレス制御できるように、VSI上にフォワードプロキシを乗せ、プロキシ経由でCode Engineへアクセスされるようにする。
![スクリーンショット 2024-07-12 13.29.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/8ec5a7dd-1cf9-1b54-207c-c8a6339b65eb.png)


# 手順
1. Code Engineにアプリをデプロイ
2. Virtual Server Instanceにプロキシサーバー(Squid)を立てる
3. Code Engineのアプリにアクセス確認


# 検証環境
## Client PC
OS: ```macOS Sonoma 14.5```
## プロキシサーバー
Squidを入れてプロキシの動きをさせる用のVirtual Server Instanceを作成します。
![VSI作成-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/7f1babf4-482c-51ff-8116-8a5664e2664f.png)
![VSI OS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/6bc991df-9c2b-e3d0-efdf-7f037e03ee80.png)
![VSI Networking.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/c4438112-3f27-6832-d87f-b453d9aceea3.png)
* Location
リージョン：```Tokyo 2```
* Details
インスタンス名：```xxxx-vsi```
* Image and profile
```CentOS Stream 9 - Minimal Install (amd64)```
```2 vCPU, 4 GiB, 4 Gbps```
## Code Engine
アクセス確認用に、Code Engineにアプリをデプロイします。今回はサンプルアプリのコンテナイメージ (icr.io/codeengine/helloworld) を使います。
![スクリーンショット 2024-07-11 14.24.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/26e09e1a-2ec7-28e3-53fd-dd1bd21316ab.png)
![スクリーンショット_2024-07-11_14_24_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/37f69277-71cf-97fa-ae0c-1b9a5c292e4a.png)


* General
インスタンス名：```haruna-qiita```
* Code
コンテナイメージ：```icr.io/codeengine/helloworld```
* Resources & scaling
インスタンスリソース：```0.125vCPU/0.25GB```
オートスケーリングのインスタンス数：```0-3```
* Domain mappings
```Privateエンドポイント```を有効化



# 検証
## 1. Squidのインストール
作成したVSIにログインし、Squidをインストールします。
([こちらのサイト](https://www.server-world.info/query?os=CentOS_Stream_9&p=squid&f=1)を参照しました。)

以下のコマンドでSquidをインストールします。
```
dnf -y install squid
```

## 2.フォワードプロキシとして動くようコンフィグを編集
インストールが完了したら、Squid がフォワードプロキシとして動くようコンフィグファイルを編集します。
```
vi /etc/squid/squid.conf
```

以下、編集箇所です
```
# 55行目 : 追記 (httpアクセスを全て許可)
http_access allow all

# 60行目 : http_port 3128 → 8080に変更
# [defaultsite] は転送先 Web サーバーを指定
# http_port 3128
http_port 8080 
```

コンフィグファイルを編集したら、Squidをリスタートします。
```
systemctl restart squid
```


## 3. Code Engineのアプリにアクセス確認
Code Engineのアプリにフォワードプロキシ経由でアクセスをするため、ユーザーPCからプロキシを指定します。以下のどちらかの方法で、プロキシの指定・アクセス確認をします。

### アクセス確認方法１：curlコマンドでプロキシを指定・アクセス確認
ユーザーPCのターミナルから、以下のcurlコマンドでプロキシを指定し、Code Engineアプリへのアクセス確認をします。
```
curl --proxy http://128.xxx.xxx.xx:8080 https://haruna-qiita.xxxxxxx.private.jp-tok.codeengine.appdomain.cloud
```

```curl --proxy```の後ろは
```プロキシサーバーのFloatingIP:ポート番号 ```
```https://Code Engineにデプロイしたアプリのドメイン名```
です。

以下のように応答が返ってきたらアクセス成功です。
![スクリーンショット_2024-07-18_15_15_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/d339df20-24e5-42d5-6524-201baf7e688e.png)

Code EngineにデプロイしたHello worldアプリへアクセス出来たことがわかります。


### アクセス確認方法２：ユーザーPCのWebブラウザからアクセス確認
Webブラウザにてプロキシの指定を行う必要があります。今回はFirefoxで実施しました。
Settings> Network Settingsを開きます。"Manual proxy configuration"を選択し、プロキシを入れているVSIのFloating IPとポート番号8080を指定します。Network Settingが完了したら、設定を適用するために一度ブラウザを閉じ、開き直します。
![スクリーンショット_2024-07-11_12_01_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/5947aa56-7c0c-e2ee-181e-ca1810175230.png)

Webブラウザに、Code Engineにデプロイしたアプリのドメイン名を入力してアクセス確認します。
![スクリーンショット_2024-07-18_15_15_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/fc893882-9601-df91-092a-4683c38117f9.png)


Code EngineにデプロイしたHello worldアプリへアクセス出来たことがわかります。