ユーザ用ツール

サイト用ツール


linux:http-proxy

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

linux:http-proxy [2018/10/08 23:09] (現在)
Wiki Editor 作成
ライン 1: ライン 1:
 +====== HTTP PROXY構築 ======
 +===== 目的 =====
 +プロキシサーバ構築の目的はいろいろあるが、ここでは外部へのWebアクセスの踏み台の役割を果たすサーバの構築を行う。プロキシサーバ無しのアクセスだと、直接接続しているネットワークからアクセス先にダイレクトにアクセスするため、直接接続したネットワークの管理者にはどこにアクセスしているのかや、httpsが無ければどんなデータが流れているのかを知られてしまう。それを回避するためにプロキシサーバを利用する。
 +
 +httpsならば問題ないが生のhttpでは、プロキシサーバを経由しても通信内容を読み取られるため、プロキシを経由してどこにアクセスしているかは監視される。そこで、プロキシサーバまでのすべての通信を暗号化し、足元のネットワーク管理者にどこにアクセスしているかを知られないようにする。なぜそのようなことが必要かといえば、とりあえず足元のネットワークが怪しい場合などのセキュリティ対策など。。。
 +
 +===== 構成 =====
 +ブラウザはfirefoxを想定する。ブラウザからプロキシサーバまではhttp/​2を用いる。http/​1.1ではプロキシサーバまでの暗号化が難しいため、http/​2を用いる。サーバ側ではnghttpxコマンドでhttp/​2のプロキシサーバを立てるが、nghttpxはフロントエンドのみで、実際のフォワードプロキシは別のサーバが担う。ここでは同一サーバ上のapacheで認証付きのフォワードプロキシサーバを構築する。
 +
 +
 +==== nghttpx ====
 +フロントエンドとなるhttp/​2のプロキシサーバを構築する。
 +
 +nghttp2パッケージをインストールする。「utils」USEフラグを有効にしないと、nghttpxコマンドなどはインストールされない。ちなみに、apache2で「http2」USEフラグを有効にすると、nghttp2が依存関係でインストールされる。apacheのhttp2にはnghttp2が利用されているらしい。
 +
 +  > emerge -av nghttp2
 +
 +インストール後は、nghttpxコマンドでhttp/​2プロキシサーバを起動する。
 +
 +  > nghttpx -D --user=nobody -s -f'​FRONT_PROXY_ADDR,​PORT'​ -b'​BACKEND_PROXY_ADDR,​PORT'​ privkey.pem fullchain.pem
 +
 +  * -D
 +    * サーバモードで起動する。端末から切り離してバックグラウンドプロセスにする。
 +  * --user=nobody
 +    * rootユーザではなくnobodyユーザで動かす
 +  * -s
 +    * http2のフォワードプロキシ機能を有効化する
 +  * -f'​FRONT_PROXY_ADDR,​PORT'​
 +    * 接続を受け付けるIPアドレスとポートを指定する。「*」も利用できるが、その場合はIPv6やUNIXドメインソケットも含めてすべてで待ち受けようとする。当サイトではIPv6はカーネルレベルで無効化しているので、「*」では起動できない。サーバに指定しているIPv4のIPアドレスを設定する。ポートは何でもよいが、iptablesなどでフィルタリングしていないかなどを確認しておく。
 +  * -b'​BACKEND_PROXY_ADDR,​PORT'​
 +    * 実際に外部サイトにアクセスするフォワードプロキシを指定する。ここではローカルホストのapacheで構築するが、squid等でもよい。
 +  * privkey.pem
 +    * プロキシサーバまでの暗号化のためのssl秘密鍵のパスを指定。
 +  * fullchain.pem
 +    * 同じく証明書を指定。認証局の証明書も含めたものを指定した。認証局の証明書が含まれていないものは未検証。
 +
 +==== apache ====
 +適当なところに以下の設定を記載する。https側の設定ではなくhttpサーバの設定に書く。
 +  <​IfModule mod_proxy.c>​
 +      # フォワードプロキシ機能を有効化
 +      ProxyRequests On
 +      # プロキシ経由のヘッダをつけない(必要に応じて設定)
 +      ProxyVia Block
 +      # プロキシサーバのアクセス制限
 +      <Proxy "​*">​
 +        # フォワードプロキシにアクセスするためにダイジェスト認証をかける
 +        AuthType ​       Digest
 +        AuthName ​       "​RCPS_PROXY"​
 +        AuthUserFile ​   /​etc/​apache2/​htpasswd_digest
 +        # 認証されたユーザで、かつローカルホストからのみアクセスを許可
 +        # ORではなくAND条件にするためにRequireAllが必要:apache2.4から
 +        <​RequireAll>​
 +          Require valid-user
 +          Require ip 127.0.0.1
 +        </​RequireAll>​
 +      </​Proxy>​
 +  </​IfModule>​
 +
 +==== ブラウザ(firefox) ====
 +firefoxの設定画面からでは、http/​2のセキュアプロキシを利用する設定が直接できないのでPACファイルを用意し、「自動プロキシ設定スクリプト」としてい読み込ませる。内容は以下。
 +
 +  function FindProxyForURL(url,​ host) {
 +        return "HTTPS PROXY_ADDR:​PORT";​
 +  }
 +
 +PROXY_ADDRには、nghttpxが起動しているサーバのFQDNを指定する。IPアドレスではなく、証明書に記載されているホスト名にする必要がある。PORTはnghttpxで指定したポート。
 +
 +
 +
  
linux/http-proxy.txt · 最終更新: 2018/10/08 23:09 by Wiki Editor