こんにちは、バクソクキャッチアップニキことdessinです。
ネットワークスペシャリストの勉強を始めました。
プロキシサーバーがよく出題されてますよね。それだけ実務では登場するのでしょう。
検証してみて、実務経験を補おう!というのがこの記事のテーマです。
プロキシの機能などの説明はありません。
概要
Azureの仮想ネットワーク上に、Linuxマシン(プロキシサーバー)とWindowsマシン(クライアント)を作成し、Windowsからインターネットへつなぎます。Linuxにはsquidを入れます。最後にログを見て終了。
ネットワーク環境構築は、親愛なるyamapanさんの力をお借りしました。
デプロイがあっという間にできてびっくりです(後述)。
作業
全体の流れは次の通りです。
- ネットワーク構築
- Linuxマシンにsquidインストール、各種設定
- windowsマシンからでインターネット接続
- ログをとってみる
1.ネットワーク構築
普段通りAzure Portalでポチポチやってもいいですが、そんな作業はもはや時間の無駄。。。。とはyamapanさんの弁。
氏の力を借りて、IaCでデプロイする方法を試させてもらいました。まじすげえっすパイセン。俺もこれ書けるようになりてぇっす。
方法を紹介します。
まずはyamapanさんのgithubにアクセス。
Deploy to Azureをクリックするとカスタムデプロイ画面に行きますが、ここのパラメーターの編集に・・・
yamapanさんのフォルダにある"parameters.json"のコードを全部上書きコピぺします。そして保存。
あとはカスタムデプロイ画面で、ユーザーネームとパスワードは自分で適当に変えてください。それだけでgithubに説明されている環境ができます。
起動された状態でデプロイされます。マシンは結構なサイズなので、費用が気になるようなら適宜停止(割り当て解除)してください。ケチをつけているのではなく、私がケチなだけです。
前準備として、ネットワークセキュリティグループの設定をします。
今はSSHとRDPの許可だけしておきます。
あとは、各マシンのIPアドレスを控えておきましょう。
2-1. Linuxマシンにsquidインストール
以下の作業はこちらのサイトを大いに参考にしました。
必須だと思う操作だけ書いていきます。
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アドレスを入れて、認証します。
あとはエクスプローラーみたいに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ファイルの保存時に次のような警告が出ますが、保存できるようです。
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に行き、
Proxyの設定をします。AddressにはUbuntuマシンのプライベートIPアドレスを、Portにはsquidが使用する3128を入力しましょう。
4. インターネットに接続
さてこれでプロキシを介してインターネットに出られるか確認します。
WindowsマシンでIEを開き、yahooのページでも検索してみます。
プロキシが応答していない、とのことなので、やはり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
これでうまくいったようです。
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ですね。ネスぺで出たやつやって思いました。
詳しくは説明しませんが、HTTPSのときはプロキシにCONNECTメソッドで通信要求するよ、という問題だったような。
実際、Windowsマシンのブラウザではhttpsがついていました。
これにて今回の検証はおしまい。お疲れさまでした。