Squidを使ってAWS EC2インスタンスで検証用BASIC認証入りプロキシサーバーを作成する【Windows】

## やりたいこと
・機能検証のためプロキシ経由の動作確認をしたい
・そのため何かしらてきとうなプロキシサーバーを用意したい
・ついでにBASIC認証も確認した

## 注意
・機能開発などの検証用なのでIP絞ったり厳しさはない
・フォワードプロキシのみ
・実運用のためならもっといろいろ必要

## 設定手順

### 1. インストールするSquidを用意する
公式サイトはここらしい？

https://www.squid-cache.org/

で、ダウンロードしようと辿っていくと、ここから落とせるっぽい

https://squid.diladele.com/

MSI形式でダウンロードしておく
「Web Proxy for Windows」ではなく、
「Squid for Windows」からでないといけない（1敗）

### 2. AWS EC2を立ち上げる
検証用なのでメモリもドライブ容量も小さくていい
手持ちにある適当なストレージが小さいAMIをt2.mediumで起動

### 3. インスタンス内にSquidをインストールする
ライセンス同意をして、後続はデフォルトのままインストール
Windowsサービスに「Squid for Windows」という名前で登録される
デフォルトでインストールしているならば「C:\Squid」以下に色々入ってる

### 4. 一旦プロキシサーバーの完成
完走した感想ですが、特に絞りもしないならインストールするだけで簡単
ポート番号はデフォルト「3128」なので、そこに投げればよい
「プロキシを通す」ことの確認だけであればこれで事足りる

### 5. お好みでSquidの設定変更をする
設定は`C:\Squid\etc\squid\squid.conf`を変更すればOK
squid.confを変更後、登録しているサービスを再起動しないと反映されない

#### ポート番号を変更する
デフォルトのポート番号は「3128」
`http_port`の項目を変更すれば好きなポート番号にできる

#### デフォルトでのログ類の出力先
`C:\Squid\var\log\squid`以下に出力される
「cache」はサービス自体の起動ログなど、
「access」はSquidを経由した通信ログが表示される

#### 専用のキャッシュフォルダを用意する
いろんなサイトを参考にするとよく作られている
初期ではsquid.confの下の方で
`#cache_dir aufs /cygdrive/d/squid/cache 3000 16 256`
と、作成先は`D:¥squid\cache`だが、コメントアウトされている
`cache_dir aufs /cygdrive/c/squid/cache 3000 16 256`
とすれば、インストールしている`C:\Squid`以下に吐き出せるらしい
自力でフォルダを作成できなさそうなのでcacheフォルダを作ってあげる
が、してみたけど出てこなかった

### 6. proxy接続時に認証情報を必要にする
squid.confの書き換えとBASIC認証用ファイルの作成が必要

#### squid.confの書き換え
・`http_access allow localnet`をコメントアウトする
・以下を`# Recommended minimum Access Permission configuration:`の上くらいに追記する
```
auth_param basic program c:/Squid/lib/squid/basic_ncsa_auth.exe c:/Squid/etc/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication!
auth_param basic credentialsttl 5 hours
auth_param basic casesensitive off
acl auth proxy_auth REQUIRED
http_access allow auth
```

参考サイト

https://zenn.dev/shz/articles/6f4f48ca19aa44

https://qiita.com/omochi_1190/items/e439f847a37ad186adfe

#### BASIC認証用のファイル作成
パスワード用ファイルを作成するにはApacheなどが必要
ということで以下サイトからApacheを落としてきた

https://www.apachelounge.com/download/


解凍して`httpd-2.4.63-250207-win64-VS17\Apache24\bin\htpasswd.exe`を使う
コマンドプロンプトからbinフォルダをカレントディレクトリにして
`htpasswd -c [ファイル名] [ユーザー名]`
と実行。するとパスワードを2回聞かれるのでそれぞれ入力すると、指定した[ファイル名]のパスワードファイルが作成される
今回は「passwd」というファイル名で作成して`c:/Squid/etc`に配置する
ファイルの中身は
`ユーザー名:hash化されたパスワード`
の形式なので、hash化ができれば手でも作れるはず

参考サイト

https://wiki.squid-cache.org/ConfigExamples/Authenticate/Ncsa

https://qiita.com/alphajinsei/items/07c080482cf7a700b4bb

https://zenn.dev/trpla226/articles/fca7c18f807f25aad47d#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90

#### BASIC認証エラーの解消
Squidを再起動したところ、ログに大量にエラーが吐かれ続けた
`C:/Squid/lib/squid/basic_ncsa_auth.exe: error while loading shared libraries: cygcrypt-2.dll: cannot open shared object file: No such file or directory`
と出ており、cygcrypt-2.dllが足りないらしい

https://qiita.com/kotaro-miura/items/3ca16e070c76aa1f30d9

https://github.com/diladele/squid-windows/issues/98

を参考にして、cygcrypto-2.dllを手動で`C:\Squid\lib\squid`に配置することで該当のエラーログは吐かれなくなった

#### basic_ncsa_auth.exeが起動しないログ
`helperOpenServers: No 'basic_ncsa_auth.exe' processes needed.`
とログに出ており、BASIC認証に必要なexeが起動してくれなさそうなエラーが出ている
のだが、BASIC認証はできるようなので無視して構わなさそう

### 7. BASIC認証プロキシサーバーの完成
以上で、接続時にID/PASSを求められるようになる