基本認証を使用したSQUIDトランスペアレントプロキシの設定

基本認証を使用したSQUIDトランスペアレントプロキシの設定

SQUID(Ubuntu 18.04の3.5.27)を透明プロキシとして設定しようとしています。さらに下に行くと、認証と要求のロギングを処理する必要がありますが、簡単に始めて詰まっています。

ローカルネットワークで作業しています。単純なWebサーバーは、SQUIDサーバー(jarvis)のポート5000で実行されます。ネットワーク上の他のコンピュータからアクセスしようとしています。http://jarvis:5000(明らかに、これはiptablesがオフになっているときに機能します)。

IPTABLES 構成が適用されます。

iptables -t nat -A PREROUTING -i enp1s0 -p tcp -j REDIRECT --to-port 3128

私のsquid.confはできるだけ簡単です。

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/htpasswd
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_port 3128 transparent
visible_hostname jarvis

/usr/lib/squid/basic_ncsa_auth /etc/squid/htpasswd 動作します(ユーザー名とパスワードの間にコロンはありません:

# /usr/lib/squid/basic_ncsa_auth /etc/squid/htpasswd
me itsame
OK

私がやっている他のコンピュータで

curl -v -u me:itsame http://jarvis:5000

買収

GET / HTTP/1.1
> Host: jarvis:5000
> Authorization: Basic bWU6aXRzYW1l
> User-Agent: curl/7.63.0
> Accept: */*
> 
< HTTP/1.1 407 Proxy Authentication Required
< Server: squid/3.5.27
< Mime-Version: 1.0
< Date: Thu, 15 Aug 2019 16:41:13 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 3538
< X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
< Vary: Accept-Language
< Content-Language: en
* Authentication problem. Ignoring this.
< Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
< X-Cache: MISS from jarvis
< X-Cache-Lookup: NONE from jarvis:0
< Via: 1.1 jarvis (squid/3.5.27)
< Connection: keep-alive

私は何を見逃していますか?

ベストアンサー1

認証を通じて透明なプロキシ(またはSquid FAQで呼び出される「傍受プロキシ」)を実行したいようです。

Squid FAQでは、次のように非常に明確に説明します。

ブロックに「proxy_auth」を使用できますか?

あなたはできません。前の質問に対する回答をご覧ください。クライアントはプロキシを傍受して元のサーバーと通信していると考え、プロキシ認証要求ヘッダーを送信しません。

そして「前の質問」は次のとおりです。

ブロックプロキシで認証が​​利用できないのはなぜですか?

ブロックプロキシは、存在しないアクティブプロキシ(プロキシ)を設定することによって機能します。ブラウザはそれがあるとは思わず、すべての効果と目的はだまされたり、せいぜい難読化されたりします。このブラウザのユーザーとして、意図しない当事者に資格情報を開示しないように依頼します。同意しますか?特に、ユーザーエージェントがユーザーに知らせずにこれを実行できる場合[...]

また、ユースケースは次のとおりです。リバースプロキシ、また〜として知られるネットワークアクセラレータhttp://jarvis:5000、Webサーバーなどのアプリケーションにはこれらの機能が不足している可能性があるため、認証やロギングなどの機能も追加されます。

  • 透明プロキシクライアントがブラウザのプロキシ固有の設定なしでデフォルトですべてのWebサーバーにアクセスできる必要がある場合に使用されます。ネットワーク(通常はルーター)は、ブラウザに似た接続をプロキシに傍受してリダイレクトし、プロキシキャッシュを適用できます。国際トラフィックを最小化したり、マルウェアスキャンやアダルトコンテンツフィルタリングなどの機能が実装されています。

  • リバースプロキシ特定のWebサーバーまたはサーバーグループのみが関連しています。バックエンドサーバーセットのロードバランシングを実行したり、認証されていないHTTPのみを提供するデバイスに認証やHTTPSなどのエントリを追加したりできます。

本当に欲しいものが本当に似ているならリバースプロキシ、実際のWebサーバーのプロキシ機能を使用する方が良いかもしれません。これは、主な要件であると思われるより良いHTTPサーバー側認証機能を提供するためです。

Apacheを使用すると、次のことができます。

<Location />
    AuthType Basic
    AuthName "Restricted Service"
    # (Following line optional)
    AuthBasicProvider file
    AuthUserFile "/etc/apache/htpasswd"
    Require user me
    ProxyPass http://jarvis:5000
    ProxyPassReverse http://jarvis:5000
</Location>

次のようにファイルを初期化します/etc/apache/htpasswd

# htpasswd -c /usr/local/apache/passwd/passwords me
New password: itsame
Re-type new password: itsame
Adding password for user me

サーバーがhttp://jarvis:5000出力するHTMLに自分自身へのリンクやその他の参照を含め、これらの参照を調整するようにサーバーを構成できない場合は、サーバーがlocalhostインターフェースでのみ受信できるようにするなど、いくつかのトリックを使用する必要があります。ポート 5000 でリッスンする唯一の物理ネットワーク インターフェイスです。

ここでは、サーバーの機能について詳しく知ることが重要ですhttp://jarvis:5000。クライアントがアクセスに使用すると言うホスト名とポートを使用してレスポンスを設定する場合(「まあ、その情報のためにクライアントが私に接続されているので正確でなければなりません」という原則)、これは簡単です。ただし、特定のプロトコル、ホスト名、およびポートを使用してHTMLをハードコードし、それ自体へのリンクを含めて構成できない場合は、目的の結果を得るためにホスト名を使用するか、応答HTML URLでリアルタイム編集が必要になる場合があります。

おすすめ記事