Proxy settings (日本語) - ArchWiki

# Proxy settings (日本語)

関連記事

- HTTP トンネリング

## イントロダクション

プロキシはリモートの、資源を消費する、または直接使うのが難しいサービスのためのインターフェイスです。ソース: Proxy - Wiktionary。

## 環境変数

(wget など) いくつかのプログラムは "protocol_proxy" という形式の環境変数を使って特定のプロコトルのプロキシを決定します (例: HTTP, FTP, ...)。

以下はそれらの変数をシェルで設定する方法の例です:

     export http_proxy=http://10.203.0.1:5187/
     export https_proxy=$http_proxy
     export ftp_proxy=$http_proxy
     export rsync_proxy=$http_proxy
     export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"

プログラムによっては大文字の環境変数を使用することがあります。

プロキシ環境変数を全てのユーザーと全てのアプリケーションで使えるようにするために、上記の export コマンドをスクリプトに追加することができます。例えば `/etc/profile.d/` に "proxy.sh" を作成。スクリプトには実行可能属性を付与してください。この方法はプロクシ設定のオプションが存在しない Xfce などのデスクトップ環境を使ってる場合に便利です。例えば、Chromium ブラウザは Xfce の実行中、この方法を使って設定されて変数を利用します。

また、`.bashrc` に関数を追加することで変数の切り替えを自動化することも可能です (スクリプトのアイデアは Alan Pope):

    function proxy_on() {
        export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"

        if (( $# > 0 )); then
            valid=$(echo $@ | sed -n 's/\([0-9]\{1,3\}.\)\{4\}:\([0-9]\+\)/&/p')
            if [[ $valid != $@ ]]; then
                >&2 echo "Invalid address"
                return 1
            fi

            export http_proxy="http://$1/"
            export https_proxy=$http_proxy
            export ftp_proxy=$http_proxy
            export rsync_proxy=$http_proxy
            echo "Proxy environment variable set."
            return 0
        fi

        echo -n "username: "; read username
        if [[ $username != "" ]]; then
            echo -n "password: "
            read -es password
            local pre="$username:$password@"
        fi

        echo -n "server: "; read server
        echo -n "port: "; read port
        export http_proxy="http://$pre$server:$port/"
        export https_proxy=$http_proxy
        export ftp_proxy=$http_proxy
        export rsync_proxy=$http_proxy
        export HTTP_PROXY=$http_proxy
        export HTTPS_PROXY=$http_proxy
        export FTP_PROXY=$http_proxy
        export RSYNC_PROXY=$http_proxy
    }

    function proxy_off(){
        unset http_proxy
        unset https_proxy
        unset ftp_proxy
        unset rsync_proxy
        echo -e "Proxy environment variable removed."
    }

ユーザー名やパスワードが必要ない場合は削除してください。

別の手段として、以下のスクリプトを使うこともできます。"YourUserName", "ProxyServerAddress:Port", "LocalAddress", "LocalDomain" の文字列を置き換えてから、`~/.bashrc` を編集して関数を含めて下さい。新しい bash ウィンドウでは自動的に新しい関数が使えます。既存の bash ウィンドウでは、`source ~/.bashrc` と入力して下さい。`.bashrc` に全てを記述するのではなく、`functions` などの別のファイルに関数の定義を記述して `.bashrc` に `source functions` を追加することもできます。また、"myProxy" はもっと短く書くことができます。

     #!/bin/bash

     assignProxy(){
       PROXY_ENV="http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY"
       for envar in $PROXY_ENV
       do
         export $envar=$1
       done
       for envar in "no_proxy NO_PROXY"
       do
          export $envar=$2
       done
     }

     clrProxy(){
       assignProxy "" # This is what 'unset' does.
     }

     myProxy(){
       user=YourUserName
       read -p "Password: " -s pass &&  echo -e " "
       proxy_value="http://$user:$pass@ProxyServerAddress:Port"
       no_proxy_value="localhost,127.0.0.1,LocalAddress,LocalDomain.com"
       assignProxy $proxy_value $no_proxy_value
     }

### sudo でもプロキシを使う

プロキシ環境変数を (手動コマンドや .bashrc で) 単一のユーザーでのみ設定した場合、sudo でコマンドを実行するとプロキシ設定は失われます (もしくは yaourt などのプログラムで sudo を内部的に使用した場合)。

sudo の設定ファイル (visudo で編集できます) に次の行を追加することでプロキシ設定を通すことができます:

    Defaults env_keep += "http_proxy https_proxy ftp_proxy"

rsync_proxy や no_proxy など他の環境変数を追加することも可能です。

### ネットワークマネージャによる自動化

- NetworkManager は環境変数を変更することができません。
- netctl は環境変数を設定することはできますが、netctl の子供ではない他のアプリケーションから変数を参照することはできません。

## libproxy について

libproxy (extra リポジトリに入っています) はネットワークリソースにアクセスする全てのアプリケーションによって使われることを目指している抽象レイヤーです。開発中ですが、広く採用されたら、GNU/Linux における統合的な自動プロキシ管理が実現するでしょう。

libproxy の役割は様々なソースからプロキシ設定を読み込んで、ライブラリを使用するアプリケーションから使えるようにすることです。libproxy の面白いところは Web Proxy Autodiscovery Protocol の実装と Proxy Auto-Config の実装を提供しているところです。

`/usr/bin/proxy` バイナリには引数として URL を指定することができ、ネットワークリソースを取得するのに使えるプロキシを返します。

Note: the version 0.4.11 does not support http_proxy='wpad:' because `{ pkg-config 'mozjs185 >= 1.8.5'; }` fails .

2009年4月6日現在、libproxy は libsoup に依存されています。そのため midori ブラウザによって間接的に利用されます。

## ウェブプロキシ

- Squid はとても人気のあるキャッシュ/最適化プロキシです。
- Privoxy は匿名化とアドブロックを行うプロキシです。
- シンプルなプロキシが欲しい場合、ssh とポートフォワーディングを使うことができます。

### SSH によるシンプルなプロキシ

以下のようにアカウント (USER) があるサーバー (HOST) に接続してください:

    ssh -D PORT USER@HOST

For PORT, choose some number which is not an IANA registered port. This specifies that traffic on the local PORT will be forwarded to the remote HOST. ssh will act as a SOCKS server. Software supporting SOCKS proxy servers can simply be configured to connect to PORT on localhost.

## SOCKS プロキシを使う

2つのケースが考えられます:

- 使いたいアプリケーションが SOCKS5 プロキシに対応している場合 (例えば Firefox)、プロキシを使うようにアプリケーションを設定するだけです。
- 使いたいアプリケーションが SOCKS プロキシに対応していない場合、tsocks や proxychains-ng を使うことができます。

In Firefox, you can use the SOCKS proxy in the menu Preferences > Network > Settings. Choose "Manual Proxy Configuration", and set the SOCKS Host (and only this one, make sure the other fields, such as HTTP Proxy or SSL Proxy are left empty). For example, if a SOCKS5 proxy is running on localhost port 8080, put "127.0.0.1" in the SOCKS Host field, "8080" in the Port field, and validate.

If using proxychains-ng, the configuration takes place in `/etc/proxychains.conf`. You may have to uncomment the last line (set by default to use Tor), and replace it with the parameters of the SOCKS proxy. For example, if you are using the same SOCKS5 proxy as above, you will have to replace the last line by:

    socks5 127.0.0.1 8080

proxychains-ng は次のコマンドで起動できます:

    proxychains <program>

<program> はシステムにインストールされているどのプログラムにも置き換えられます (例: xterm, gnome-terminal など)。

## GNOME3 のプロキシ設定

Chromium など、プログラムによっては gnome で保存された設定を優先的に使うことがあります。この設定は gnome-control-center フロントエンドや gsettings で変更することが可能です。

    gsettings set org.gnome.system.proxy mode 'manual'
    gsettings set org.gnome.system.proxy.http host 'proxy.localdomain.com'
    gsettings set org.gnome.system.proxy.http port 8080
    gsettings set org.gnome.system.proxy.ftp host 'proxy.localdomain.com'
    gsettings set org.gnome.system.proxy.ftp port 8080
    gsettings set org.gnome.system.proxy.https host 'proxy.localdomain.com'
    gsettings set org.gnome.system.proxy.https port 8080
    gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12' , '*.localdomain.com' ]"

AUR の proxydriver パッケージを使用することで、NetworkManager が特定のネットワークに接続した際に自動的に実行するように設定することもできます。

## Microsoft NTLM プロキシ

Windows ネットワークでは、NT LAN Manager (NTLM) がユーザーの認証や整合性、機密性を実現する Microsoft セキュリティプロトコルのサービスを提供します。

AUR の cntlm はアプリケーションと NTLM プロキシの間に入って、NTLM 認証をオンザフライで追加します。複数の "parent" プロキシを指定することができ Cntlm はどれか一つが動作するまで試行します。認証済みの接続は全てキャッシュされ効率を高めるために再利用されます。

    (NTLM PROXY IP:PORT + CREDENTIALS + OTHER INFO) -----> (127.0.0.1:PORT)

### 設定

`/etc/cntlm.conf` の設定を必要に応じて変更してください。パスワードは絶対に変更してください。それから次を実行:

    $ cntlm -H

このコマンドによってプロキシのホスト名、ユーザー名、パスワードそれぞれの暗号化されたパスワードハッシュが生成されます。

Warning: 暗号化されたハッシュではなく平文のパスワードを使っている場合、ettercap で簡単にパスワードを盗み取ることができてしまいます。

`/etc/cntlm.conf` をもう一度編集して生成された3つのハッシュを全て記述して、`cntlm.service` を有効化してください。

設定をテストするには、次を実行:

    $ cntlm -v

### 使用方法

プロキシには次のアドレスを使って下さい:

    127.0.0.1:PORT

もしくは:

    localhost:PORT

`PORT` は `/etc/cntlm.conf` の `Listen` パラメータに合わせてください。デフォルトは `3128` です。

Category:

- Proxy servers (日本語)