この前SaaSのWebプロキシとWeb分離を連携させる検証をした時にWeb分離が機能してくれなかったので、その原因と代替策を忘れないように記録しておこうと思います。
※ 今回の主役はUserAgentがトラブル原因になり得て、それを解決手段があるよという事なので具体的なSaaSのWebプロキシの名前は伏せておきます。
やりたかったこと
以下のようにSaaSのWebプロキシからWeb分離に多段プロキシ構成で転送させて、よりセキュアな通信を確立させたいと思って検証しました。
上記の構成でPCからブラウザを開いて、テストサイトを叩くというシンプルな内容
検証結果
しかし結果Error、、、、
Web分離が機能してくれません、、
切り分け
宛先サーバのパケットキャプチャを取得してWiresharkで見てみると、web分離が機能する時と今回の検証時で差分があることに気づきました。
UserAgentが「Linux」となっていました。
クライアント端末でブラウザからサイトにアクセスした場合の通信のUserAgentは、chromeやFirefox等ブラウザのものになるはずですが、なぜかLinuxになっていました。
このWebプロキシからCONNECTメソッドでくるパケットはUserAgentがLinuxに置き換わってしまうようです。
Web分離のメーカーに問い合わせたところ、Web分離が機能する条件の一つとして、UserAgentがブラウザ固有である必要があるとのことでした。
代替案
UserAgentを変更する方法を探していると以下のSquidのドキュメントを発見しました。
https://www.squid-cache.org/Doc/config/request_header_replace/
そこで強引ではありますが以下の構成で検証してみます。
そしてsquidのsquid.confに以下の設定をします。
request_header_replace User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36
結果
今度は成功しました。
パケットキャプチャを見てみるとFirefoxのUserAgentに変更されています。
今後別のSaaS製品でトラブルが発生した場合はUserAgentも意識しようと思います。
最後に
強引にリーチアビリティは取りましたが、コンポーネントを増やしたくないのが正直なところです。
トラブル発生時の調査ポイントが増えてしまうこと、そして折角SaaSを利用しているのにライフサイクルを意識した運用をしないといけないことはデメリットだと思います。
一旦はこの内容なら疎通出来るという検証結果を纏めつつ、もっとシンプルにする方法は無いか?は確認しようと思います。