SUPPORTING
curlとlibcurlを分けて確認する:NO_PROXYによる直接接続の監査手順
curlコマンドとlibcurl系ツールを混同せず、プロキシ環境変数、NO_PROXY、CIDR、実行環境ごとの経路を確認する手順を解説します。
プロキシ経路を監査するときは、curlコマンドの結果をlibcurl系ツールへそのまま当てはめないことが重要です。両者で参照する資料と確認項目を分け、実際に運用するプログラムごとに経路を検証します。
まず実装を切り分ける
libcurlはURLのスキームに応じたプロキシ環境変数を確認します。公式のlibcurl資料では、https:// URLにhttp_proxy、ftp:// URLにftp_proxyを使うと説明されています。libcurlの環境変数仕様
一方、curlコマンド向け資料では、スキーム別の変数としてhttp_proxyやhttps_proxyなどにプロキシのホスト名を設定できるとされています。curlコマンドのプロキシ環境変数
したがって、https_proxyを設定したcurlコマンドが意図どおり動いても、利用中のlibcurl系ツールでも同じ結果になるとは決めつけられません。次の2系統を別々に記録します。
- curlコマンド:実行したコマンド、バージョン、環境変数、接続先
- libcurl系ツール:アプリ名、利用するlibcurl、設定方法、環境変数、接続先
libcurlでは、ALL_PROXYは全スキーム向けですが、スキーム別の変数があればそちらが優先されます。libcurlの優先関係 また、スキーム別変数は大文字版も確認される一方、http_proxyは小文字版のみが使用されます。libcurlの大文字・小文字の扱い ただし、環境変数名の大文字・小文字を区別しないシステムではHTTP_PROXYも機能します。該当システムでの例外
NO_PROXYの範囲を確認する
NO_PROXYは、プロキシを使わないホスト名パターンをカンマ区切りで指定する環境変数です。libcurlのNO_PROXY仕様 特に次の設定を優先して点検します。
NO_PROXY=*:すべてのホストに一致します。アスタリスクの仕様NO_PROXY=.example.com:www.example.comやhome.example.comには一致し、nonexample.comには一致しません。ドメイン一致の仕様NO_PROXY=192.168.0.0/16:curl 7.86.0以降ではCIDRによるIPネットワークの除外を指定でき、この例は192.168から始まるネットワーク全体に一致します。CIDR対応
curlコマンドでは--noproxyがNO_PROXYの代替となり、同じ目的と動作を持ちます。--noproxyの仕様 環境変数だけでなく、起動スクリプトやジョブ定義のオプションも確認対象に含めます。
経路を比較する監査手順
管理下の検証先を使い、通常ホスト、完全一致する除外ホスト、ドット始まりの対象ドメイン、CIDR対象IPを個別に実行します。各ケースで、実行日時、実装、バージョン、実行環境、対象URL、設定中のプロキシ変数、NO_PROXYまたは--noproxy、期待経路、確認できた接続元を記録します。
条件を比較するときはケースごとに新しく実行します。curlは同一コマンド内の複数転送では接続再利用を試みますが、別々のcurl実行間では再利用できません。curlの接続再利用
デメリットと向いていない条件
環境変数だけの管理は、実装や実行環境ごとの差を監査できない運用には向きません。直接接続を許容できない場合も、設定確認だけで可否を決めず、経路を遮断できるネットワーク制御を含めて判断します。
SSLKEYLOGFILEは、対応するSSLバックエンドでSSLシークレットをファイルへ保存し、そのファイルは機密性を持つ可能性があります。SSLKEYLOGFILEの注意事項 通常の経路確認では有効化せず、必要な場合も保存先と共有範囲を管理してください。
最終的には、curlコマンドと実運用のlibcurl系ツールの双方で期待経路を確認し、設定継続、環境変数の明示的な初期化、直接接続を防ぐ制御の追加、または利用見送りを選びます。