これがプロキシの決定的なユースケースです。リバースプロキシ(別名ロードバランサー)ではなく、通常のプロキシ。
最もよく知られている無料のオープンソースはsquidです。幸いなことに、これは単一で簡単にインストールできapt-get install squid3
、単一のファイルで構成できる数少ない優れたオープンソースソフトウェアの1つです/etc/squid3/squid.conf
。
グッドプラクティスと既知の教訓について説明します。
公式の構成ファイルがわずかに変更されました(5000の役に立たないコメント行が削除されました)。
# WELCOME TO SQUID 3.4.8
# ----------------------------
#
# This is the documentation for the Squid configuration file.
# This documentation can also be found online at:
# http://www.squid-cache.org/Doc/config/
#
# You may wish to look at the Squid home page and wiki for the
# FAQ and other documentation:
# http://www.squid-cache.org/
# http://wiki.squid-cache.org/SquidFaq
# http://wiki.squid-cache.org/ConfigExamples
#
###########################################################
# ACL
###########################################################
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
#####################################################
# Recommended minimum Access Permission configuration
#####################################################
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
#####################################################
# ACL
#####################################################
# access is limited to our subnets
acl mycompany_net src 10.0.0.0/8
# access is limited to whitelisted domains
# ".example.com" includes all subdomains of example.com
acl repo_domain dstdomain .keyserver.ubuntu.com
acl repo_domain dstdomain .debian.org
acl repo_domain dstdomain .python.org
# clients come from a known subnet AND go to a known domain
http_access allow repo_domain mycompany_net
# And finally deny all other access to this proxy
http_access deny all
#####################################################
# Other
#####################################################
# default proxy port is 3128
http_port 0.0.0.0:3128
# don't forward internal private IP addresses
forwarded_for off
# disable ALL caching
# bandwidth is cheap. debugging cache related bugs is expensive.
cache deny all
# logs
# Note: not sure if squid configures logrotate or not
access_log daemon:/var/log/squid3/access.log squid
access_log syslog:squid.INFO squid
# leave coredumps in the first cache dir
coredump_dir /var/spool/squid3
# force immediaty expiry of items in the cache.
# caching is disabled. This setting is set as an additional precaution.
refresh_pattern . 0 0% 0
クライアント構成-環境変数
すべてのシステムでこれら2つの環境変数を構成します。
http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128
ほとんどのhttpクライアントライブラリ(libcurl、httpclientなど)は、環境変数を使用して自己構成します。ほとんどのアプリケーションは、一般的なライブラリの1つを使用しているため、すぐにプロキシを使用できます(開発者がそれらを使用することを必ずしも認識していません)。
構文は厳密であることに注意してください。
http_proxy
ほとんどのLinuxでは、変数名は小文字でなければなりません。
- 変数値は、
http(s)://
(プロキシプロトコルはhttp(s)ではありません)で始まってはなりません(MUST NOT )。
クライアント構成-特定
環境変数を無視しているアプリケーションや、変数を設定する前にサービスとして実行されているアプリケーションもあります(例:debian apt
)。
これらのアプリケーションには特別な設定が必要です(例:)/etc/apt.conf
。
HTTPSプロキシ-接続
HTTPSプロキシは、設計により完全にサポートされています。ブラウザとプロキシ間に何らかのトンネルを確立する特別な「CONNECT」メソッドを使用します。
ダンノはそのことについて多くを知っていますが、私は何年もそれに関して問題を抱えたことはありません。それはただ動作します。
HTTPS特殊ケース-透過プロキシ
透過プロキシに関する注意。(つまり、プロキシは非表示であり、クライアントのリクエストを傍受します。中間者)。
透過プロキシはHTTPSを破壊しています。クライアントはプロキシがあることを知らず、特別なConnectメソッドを使用する理由はありません。
クライアントは、直接HTTPS接続を試みます...これはインターセプトされます。傍受が検出され、あらゆる場所でエラーがスローされます。(HTTPSは中間者攻撃を検出するためのものです)。
ドメインおよびCDNホワイトリスト
ドメインおよびサブドメインのホワイトリストは、Squidによって完全にサポートされています。それにもかかわらず、それは時々予期しない方法で失敗するはずです。
最新のWebサイトでは、あらゆる種類のドメインリダイレクトとCDNを使用できます。人々が単一のドメインにすべてをきちんと配置するために余分な距離を移動しなかった場合、ACLが壊れます。
実行する前にホームシップを呼び出したり、外部の依存関係を取得したりするインストーラーまたはパッケージが存在する場合があります。毎回失敗し、あなたがそれに対してできることは何もありません。
キャッシング
提供された構成ファイルは、すべての形式のキャッシュを無効にします。転ばぬ先の杖。
個人的には、現在クラウドで物事を実行しています。すべてのインスタンスは少なくとも100 Mbpsの接続を持ち、プロバイダーは自動的に発見される人気のあるもの(例えばDebian)の独自のリポジトリを実行します。そのため、帯域幅はあまり気にすることのできない商品になります。
トラブルシューティングで頭を悩ます単一のキャッシングバグを経験するよりも、キャッシングを完全に無効にします。インターネット上のすべての人がキャッシングヘッダーを正しく取得することはできません。
ただし、すべての環境に同じ要件があるわけではありません。余分な距離を移動して、キャッシュを構成できます。
決してプロキシで認証を必要としない
通常はLDAPアカウントを使用して、クライアントからのパスワード認証を要求するオプションがあります。それは、宇宙のすべてのブラウザとすべてのコマンドラインツールを破壊します。
プロキシで認証を行いたい場合は、しないでください。
管理者が認証を必要としている場合、それが不可能であることを説明します。
あなたが開発者で、直接インターネットをブロックし、プロキシ認証を強制している会社に参加したばかりの場合は、できる限り逃げましょう。
結論
一般的な設定、よくある間違い、プロキシについて知っておくべきことを経験しました。
学んだ教訓:
- プロキシ用の優れたオープンソースソフトウェアがあります(squid)
- 構成が簡単で簡単です(単一の短いファイル)
- すべての(オプションの)セキュリティ対策にはトレードオフがあります
- 最も高度なオプションは、物事を壊し、あなたを悩ませるために戻ってくる
- 透過プロキシがHTTPSを破壊している
- プロキシ認証は悪です
プログラミングとシステム設計ではいつものように、要件と期待を管理することが重要です。
プロキシを設定するときは基本に固執することをお勧めします。一般的に、特定のフィルタリングのないプレーンプロキシは問題なく機能し、問題はありません。クライアントを(自動)設定することを忘れないでください。