Azureの仮想マシンで行うプロキシサーバー検証

こんにちは、ﾊﾞｸｿｸｷｬｯﾁｱｯﾌﾟﾆｷことdessinです。
ネットワークスペシャリストの勉強を始めました。
プロキシサーバーがよく出題されてますよね。それだけ実務では登場するのでしょう。
検証してみて、実務経験を補おう！というのがこの記事のテーマです。
プロキシの機能などの説明はありません。

## 概要
Azureの仮想ネットワーク上に、Linuxマシン（プロキシサーバー）とWindowsマシン（クライアント）を作成し、Windowsからインターネットへつなぎます。Linuxにはsquidを入れます。最後にログを見て終了。

ネットワーク環境構築は、親愛なるyamapanさんの力をお借りしました。
デプロイがあっという間にできてびっくりです（後述）。


## 作業
全体の流れは次の通りです。
1. ネットワーク構築
1. Linuxマシンにsquidインストール、各種設定
1. windowsマシンからでインターネット接続
1. ログをとってみる

### 1.ネットワーク構築
普段通りAzure Portalでポチポチやってもいいですが、そんな作業はもはや時間の無駄。。。。とはyamapanさんの弁。
氏の力を借りて、IaCでデプロイする方法を試させてもらいました。まじすげえっすパイセン。俺もこれ書けるようになりてぇっす。

方法を紹介します。
まずは[yamapanさんのgithub](https://github.com/aktsmm/Iac/blob/main/07_1Vnet-2VM/readme.md)にアクセス。
Deploy to Azureをクリックするとカスタムデプロイ画面に行きますが、ここのパラメーターの編集に・・・![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/e619e83b-f5b9-4310-065a-c31b71c8bbd5.png)

yamapanさんのフォルダにある"parameters.json"のコードを全部上書きコピぺします。そして保存。
あとはカスタムデプロイ画面で、ユーザーネームとパスワードは自分で適当に変えてください。それだけでgithubに説明されている環境ができます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/4a3f6743-fbc0-402a-f21b-1564b1dbe903.png)

起動された状態でデプロイされます。マシンは結構なサイズなので、費用が気になるようなら適宜停止（割り当て解除）してください。ケチをつけているのではなく、私がケチなだけです。

前準備として、ネットワークセキュリティグループの設定をします。
今はSSHとRDPの許可だけしておきます。
あとは、各マシンのIPアドレスを控えておきましょう。

###  2-1. Linuxマシンにsquidインストール
以下の作業は[こちらのサイト](https://self-development.info/squid%E3%81%AB%E3%82%88%E3%82%8B%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86%E3%80%90ubuntu%E3%80%91/)を大いに参考にしました。
必須だと思う操作だけ書いていきます。

```
sudo apt update
sudo apt upgrade
sudo apt install squid
squid -v
```
squidのバージョンは4.10でした。
squidは3128ポートを使用するらしいですが、単純化するためにFWを無効のまま進めてみたいので開放せずに行きます。

認証機能のためにapache2-utilsが必要らしいです。
```
sudo apt install apache2-utils
```

### 2-2. squidの各種設定
WinSCPなる便利ツールを使ってconfigを変更します。
ホスト名にパブリックIPアドレスを入れて、認証します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/c34f5373-ee3d-749a-6d8f-36a2e2eb52a0.png)
あとはエクスプローラーみたいにUbuntuの中が見られるので直感的に操作できると思います。
/etc/squid/squid.confファイルを探して、編集します。
ファイルはダブルクリックで開けて、Ctrl+fで文字列の検索もできます。viエディタより楽ですね。
"acl CONNECT method CONNECT"を検索して、それの下の行から追記します。
```
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 3
auth_param basic realm Proxy Authentication
auth_param basic credentialsttl 24 hours
acl basic_user proxy_auth REQUIRED
http_access allow basic_user
```
ファイルの権限を変更しておくのを忘れました。
Ubuntuで、
```
chmod 777 /etc/squid/squid.conf
```
これをやっても、confファイルの保存時に次のような警告が出ますが、保存できるようです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/1cfcdd1e-999f-ab0a-b307-af408bcc9d91.png)

### 2-3. ユーザーの登録
ユーザー登録します。
```
sudo htpasswd -c /etc/squid/.htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser
```
適当にパスワードを設定してください。
最後に変更した設定を反映します。
```
sudo systemctl reload squid
```
いったん、Ubuntu側での操作は完了。間違ってたら戻ってきます。
### 3. Windowsからインターネットに接続
Windowsを積んだ仮想マシンにRDPします。
早速、例のごとくLocal Serverの設定から　IE Enhanced Security ConfigurationをOffにします。
そのあとWindows SettingsからNetwork & Internetに行き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/bedc3285-c33d-a245-b78b-e683795b19a4.png)
Proxyの設定をします。AddressにはUbuntuマシンのプライベートIPアドレスを、Portにはsquidが使用する3128を入力しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/0cceb263-bc0e-b265-a606-dadf1a7ddfce.png)

### 4. インターネットに接続
さてこれでプロキシを介してインターネットに出られるか確認します。
WindowsマシンでIEを開き、yahooのページでも検索してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/c496be44-a5be-46b4-ce28-4398a19abb96.png)
プロキシが応答していない、とのことなので、やはりOSレベルで3128ポートの許可が必要なのかしら。
```
sudo ufw allow 3128
````
その後再度接続。
私の環境ではもう一度同じエラーがでました。
※aclに追記する設定が誤っていたのがエラーの原因でした。squidを再起動するときに、
Job for squid.service failed because the control process exited with error code.
See "systemctl status squid.service" and "journalctl -xe" for details.
と出たのですが、これはconfファイルの誤りが原因だそうです。

confを修正して（本文では修正済みです！）、
```
sudo systemctl restart squid
```
これでうまくいったようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/324c6e37-a217-b71d-8e37-fceec1c52d2b.png)
IPアドレスを確認するサイトに行ってみましょう。
UbuntuのグローバルIPアドレスになっていれば成功です。

### 5. ログの確認
squidでは、ログファイルが/var/log/squid/access.logにあります。
次のようにコマンドを打つと、リアルタイムに見られます。LPICの勉強にもなる、うひょー
```
tail -f /var/log/squid/access.log
```
これでみるに、10.100.1.4（WindowsマシンのプライベートIPアドレス）から要求が来ています。
メソッドはCONNECTですね。ネスぺで出たやつやって思いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/b625a0da-6e94-49de-6fab-adfe2f2fd51e.png)
詳しくは説明しませんが、HTTPSのときはプロキシにCONNECTメソッドで通信要求するよ、という問題だったような。
実際、Windowsマシンのブラウザではhttpsがついていました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/980085f3-2ed6-4264-6640-9131a18d5248.png)

これにて今回の検証はおしまい。お疲れさまでした。