「プロキシサーバー」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(5人の利用者による、間の16版が非表示)
1行目: 1行目:
 
[[Category:プロキシサーバー]]
 
[[Category:プロキシサーバー]]
  +
[[Category:ネットワーク設定]]
 
[[en:Proxy settings]]
 
[[en:Proxy settings]]
[[es:Proxy settings]]
+
[[zh-hans:Proxy server]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|HTTP トンネリング}}
 
{{Related|HTTP トンネリング}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[[Wikipedia:Proxy server|Wikipedia]] によると:
   
  +
コンピュータネットワークにおいて、プロキシサーバーとは、他のサーバーからのリソースを求めるクライアントからのリクエストの仲介を行うサーバー(コンピュータシステムまたはアプリケーション)のことである。
プロキシはリモートの、資源を消費する、または直接使うのが難しいサービスのためのインターフェイスです。ソース: [http://en.wiktionary.org/wiki/proxy Proxy - Wiktionary]。
 
  +
  +
== HTTPS MITM プロキシ ==
  +
  +
HTTPS 接続をデバッグする際、ブラウザの外で通信を監視できると便利な場合があります。TLS MITM で傍受するためには、ブラウザやシステムにおけるプロキシの [[Transport_Layer_Security#認証局|認証局]] の信頼情報を登録する必要があります。
  +
  +
* {{App|Charles|Javaで書かれたグラフィカルな試用版ソフト。|https://www.charlesproxy.com/|{{AUR|charles}}}}
  +
* {{App|Fiddler|Mono 上で動くプロプライエタリでグラフィカルなツール。|https://www.telerik.com/fiddler|{{AUR|fiddler}}}}
  +
* {{App|microsocks|C言語で書かれたシンプルな SOCKS5 プロキシサーバー。|https://github.com/rofl0r/microsocks|{{Pkg|microsocks}}}}
  +
* {{App|mitmproxy|Pythonで書かれたコマンドラインとウェブインターフェース。APIも提供しています。|https://mitmproxy.org/|{{Pkg|mitmproxy}}}}
  +
* {{App|sslsplit|TLS 接続に対して汎用的に動作するプロキシ。しかしブラウザにおける HTTP プロキシとしては使えません。C言語で書かれています。|https://www.roe.ch/SSLsplit|{{Pkg|sslsplit}}}}
   
 
==環境変数==
 
==環境変数==
13行目: 25行目:
 
以下はそれらの変数をシェルで設定する方法の例です:
 
以下はそれらの変数をシェルで設定する方法の例です:
 
 
  +
{{bc|1=
<nowiki>
 
export http_proxy=http://10.203.0.1:5187/
+
export http_proxy=http://10.203.0.1:5187/
export https_proxy=$http_proxy
+
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
+
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
+
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"</nowiki>
+
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
  +
}}
  +
 
プログラムによっては大文字の環境変数を使用することがあります。
 
プログラムによっては大文字の環境変数を使用することがあります。
   
 
プロキシ環境変数を全てのユーザーと全てのアプリケーションで使えるようにするために、上記の export コマンドをスクリプトに追加することができます。例えば {{ic|/etc/profile.d/}} に "proxy.sh" を作成。スクリプトには実行可能属性を付与してください。この方法はプロクシ設定のオプションが存在しない [[Xfce]] などのデスクトップ環境を使ってる場合に便利です。例えば、[[Chromium]] ブラウザは Xfce の実行中、この方法を使って設定されて変数を利用します。
 
プロキシ環境変数を全てのユーザーと全てのアプリケーションで使えるようにするために、上記の export コマンドをスクリプトに追加することができます。例えば {{ic|/etc/profile.d/}} に "proxy.sh" を作成。スクリプトには実行可能属性を付与してください。この方法はプロクシ設定のオプションが存在しない [[Xfce]] などのデスクトップ環境を使ってる場合に便利です。例えば、[[Chromium]] ブラウザは Xfce の実行中、この方法を使って設定されて変数を利用します。
  +
  +
システム全体でプロキシを簡単に設定できることを標榜している [https://github.com/himanshub16/ProxyMan ProxyMan] という名前のツールも存在します。[[Git]], [[npm]], [[Dropbox]] などのソフトウェアのプロキシ設定も管理されます。Alan Pope によるスクリプトに影響を受けています。
 
 
また、{{ic|.bashrc}} に関数を追加することで変数の切り替えを自動化することも可能です (スクリプトのアイデアは Alan Pope):
+
また、{{ic|.bashrc}} に関数を追加することで変数の切り替えを自動化することも可能です
 
<nowiki>
 
<nowiki>
 
function proxy_on() {
 
function proxy_on() {
35行目: 51行目:
 
fi
 
fi
   
export http_proxy="http://$1/"
+
export http_proxy="http://$1/" \
export https_proxy=$http_proxy
+
https_proxy=$http_proxy \
export ftp_proxy=$http_proxy
+
ftp_proxy=$http_proxy \
export rsync_proxy=$http_proxy
+
rsync_proxy=$http_proxy
 
echo "Proxy environment variable set."
 
echo "Proxy environment variable set."
 
return 0
 
return 0
52行目: 68行目:
 
echo -n "server: "; read server
 
echo -n "server: "; read server
 
echo -n "port: "; read port
 
echo -n "port: "; read port
export http_proxy="http://$pre$server:$port/"
+
export http_proxy="http://$pre$server:$port/" \
export https_proxy=$http_proxy
+
https_proxy=$http_proxy \
export ftp_proxy=$http_proxy
+
ftp_proxy=$http_proxy \
export rsync_proxy=$http_proxy
+
rsync_proxy=$http_proxy \
export HTTP_PROXY=$http_proxy
+
HTTP_PROXY=$http_proxy \
export HTTPS_PROXY=$http_proxy
+
HTTPS_PROXY=$http_proxy \
export FTP_PROXY=$http_proxy
+
FTP_PROXY=$http_proxy \
export RSYNC_PROXY=$http_proxy
+
RSYNC_PROXY=$http_proxy
 
}
 
}
   
 
function proxy_off(){
 
function proxy_off(){
unset http_proxy
+
unset http_proxy https_proxy ftp_proxy rsync_proxy \
  +
HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY
unset https_proxy
 
unset ftp_proxy
 
unset rsync_proxy
 
 
echo -e "Proxy environment variable removed."
 
echo -e "Proxy environment variable removed."
  +
}</nowiki>
}
 
</nowiki>
 
   
 
ユーザー名やパスワードが必要ない場合は削除してください。
 
ユーザー名やパスワードが必要ない場合は削除してください。
76行目: 89行目:
   
 
<nowiki>
 
<nowiki>
#!/bin/bash
+
#!/bin/bash
   
assignProxy(){
+
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(){
 
PROXY_ENV="http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY"
 
PROXY_ENV="http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY"
 
for envar in $PROXY_ENV
 
for envar in $PROXY_ENV
 
do
 
do
export $envar=$1
+
unset $envar
 
done
 
done
  +
}
for envar in "no_proxy NO_PROXY"
 
do
 
export $envar=$2
 
done
 
}
 
   
clrProxy(){
+
myProxy(){
  +
user=YourUserName
assignProxy "" # This is what 'unset' does.
 
  +
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"
myProxy(){
 
  +
assignProxy $proxy_value $no_proxy_value
user=YourUserName
 
  +
}</nowiki>
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
 
}
 
</nowiki>
 
   
 
===sudo でもプロキシを使う===
 
===sudo でもプロキシを使う===
   
プロキシ環境変数を (手動コマンドや .bashrc で) 単一のユーザーでのみ設定した場合、[[sudo]] でコマンドを実行するとプロキシ設定は失われます (もしくは [[yaourt]] などのプログラムで sudo を内部的に使用した場合)。
+
プロキシ[[環境変数]]を (手動コマンドや .bashrc で) 単一のユーザーでのみ設定した場合、[[sudo]] でコマンドを実行するとプロキシ設定は失われます (もしくは [[yaourt]] などのプログラムで sudo を内部的に使用した場合)。
 
sudo の設定ファイル (visudo で編集できます) に次の行を追加することでプロキシ設定を通すことができます:
 
   
  +
これを防ぐには、[[sudo]] の設定ファイルに次の行を追加します。
<nowiki>Defaults env_keep += "http_proxy https_proxy ftp_proxy"</nowiki>
 
   
  +
{{hc|/etc/sudoers.d/05_proxy|2=
rsync_proxy や no_proxy など他の環境変数を追加することも可能です。
 
  +
Defaults env_keep += "*_proxy *_PROXY"
  +
}}
   
 
===ネットワークマネージャによる自動化===
 
===ネットワークマネージャによる自動化===
118行目: 134行目:
   
 
==libproxy について==
 
==libproxy について==
[http://code.google.com/p/libproxy/ libproxy] (extra リポジトリに入っています) はネットワークリソースにアクセスする全てのアプリケーションによって使われることを目指している抽象レイヤーです。開発中ですが、広く採用されたら、GNU/Linux における統合的な自動プロキシ管理が実現するでしょう。
+
[https://code.google.com/p/libproxy/ libproxy] (extra リポジトリに入っています) はネットワークリソースにアクセスする全てのアプリケーションによって使われることを目指している抽象レイヤーです。開発中ですが、広く採用されたら、GNU/Linux における統合的な自動プロキシ管理が実現するでしょう。
   
libproxy の役割は様々なソースからプロキシ設定を読み込んで、ライブラリを使用するアプリケーションから使えるようにすることです。libproxy の面白いところは [[wikipedia:ja:Web_Proxy_Autodiscovery_Protocol|Web Proxy Autodiscovery Protocol]] の実装と [[wikipedia:Proxy_auto-config|Proxy Auto-Config]] の実装を提供しているところです。
+
libproxy の役割は様々なソースからプロキシ設定を読み込んで、ライブラリを使用するアプリケーションから使えるようにすることです。libproxy の面白いところは [[wikipedia:ja:Web Proxy Auto-Discovery Protocol|Web Proxy Autodiscovery Protocol]] の実装と [[wikipedia:ja:プロキシ自動設定|Proxy Auto-Config]] の実装を提供しているところです。
   
 
{{Ic|/usr/bin/proxy}} バイナリには引数として URL を指定することができ、ネットワークリソースを取得するのに使えるプロキシを返します。
 
{{Ic|/usr/bin/proxy}} バイナリには引数として URL を指定することができ、ネットワークリソースを取得するのに使えるプロキシを返します。
{{Note|1=the version 0.4.11 does not support http_proxy='wpad:' because {{ic|1={ pkg-config 'mozjs185 >= 1.8.5'; } }} fails .}}
+
{{Note|1={{ic|1={ pkg-config 'mozjs185 >= 1.8.5'; } }} が失敗するためバージョン 0.4.11 は {{ic|1=http_proxy='wpad:'}} をサポートしていません。}}
 
2009年4月6日現在、libproxy は libsoup に依存されています。そのため {{Pkg|midori}} ブラウザによって間接的に利用されます。
 
   
 
== ウェブプロキシ ==
 
== ウェブプロキシ ==
 
* [[Squid]] はとても人気のあるキャッシュ/最適化プロキシです。
 
* [[Squid]] はとても人気のあるキャッシュ/最適化プロキシです。
 
* [[Privoxy]] は匿名化とアドブロックを行うプロキシです。
 
* [[Privoxy]] は匿名化とアドブロックを行うプロキシです。
  +
* {{Pkg|tinyproxy}} は小さく効率的な HTTP/SSL プロキシデーモンです。
 
* シンプルなプロキシが欲しい場合、ssh とポートフォワーディングを使うことができます。
 
* シンプルなプロキシが欲しい場合、ssh とポートフォワーディングを使うことができます。
   
 
=== SSH によるシンプルなプロキシ ===
 
=== SSH によるシンプルなプロキシ ===
  +
 
以下のようにアカウント (USER) があるサーバー (HOST) に接続してください:
 
以下のようにアカウント (USER) があるサーバー (HOST) に接続してください:
  +
ssh -D PORT USER@HOST
 
  +
$ ssh -D ''PORT'' ''USER''@''HOST''
  +
 
PORT については、IANA で登録されてないポート番号を選択してください。ローカル PORT のトラフィックを指定し、リモート HOST に転送されます。ssh は [[Wikipedia:ja:SOCKS|SOCKS]] サーバーのように動作します。SOCKS プロキシサーバーをサポートしているソフトウェアを設定することで localhost の PORT に接続することができます。
 
PORT については、IANA で登録されてないポート番号を選択してください。ローカル PORT のトラフィックを指定し、リモート HOST に転送されます。ssh は [[Wikipedia:ja:SOCKS|SOCKS]] サーバーのように動作します。SOCKS プロキシサーバーをサポートしているソフトウェアを設定することで localhost の PORT に接続することができます。
   
 
==SOCKS プロキシを使う==
 
==SOCKS プロキシを使う==
  +
 
2つのケースが考えられます:
 
2つのケースが考えられます:
 
*使いたいアプリケーションが [[Wikipedia:ja:SOCKS#SOCKS 5プロトコル|SOCKS5]] プロキシに対応している場合 (例えば [[Firefox]])、プロキシを使うようにアプリケーションを設定するだけです。
 
*使いたいアプリケーションが [[Wikipedia:ja:SOCKS#SOCKS 5プロトコル|SOCKS5]] プロキシに対応している場合 (例えば [[Firefox]])、プロキシを使うようにアプリケーションを設定するだけです。
148行目: 167行目:
   
 
''proxychains-ng'' は次のコマンドで起動できます:
 
''proxychains-ng'' は次のコマンドで起動できます:
  +
 
proxychains <program>
 
proxychains <program>
<program> はシステムにインストールされているどのプログラムにも置き換えられます (例: xterm, gnome-terminal など)。
 
   
  +
{ic|''program''}} はシステムにインストールされているどのプログラムにも置き換えられます (例: [[xterm]], gnome-terminal など)。
''tsocks'' を使う場合、設定は {{ic|/etc/tsocks.conf}} に記述します。オプションについては {{ic|man 5 tsocks.conf}} を見て下さい。最小限の設定ファイルは以下のようになります:
 
  +
  +
''tsocks'' を使う場合、設定は {{ic|/etc/tsocks.conf}} に記述します。オプションについては {{man|5|tsocks.conf}} を見て下さい。最小限の設定ファイルは以下のようになります:
  +
 
{{hc|/etc/tsocks.conf|2=
 
{{hc|/etc/tsocks.conf|2=
 
server = 127.0.0.1
 
server = 127.0.0.1
 
server_port = 8080
 
server_port = 8080
server_type = 5}}
+
server_type = 5
  +
default_user = ""
  +
default_pass = ""}}
  +
  +
=== curl と pacman ===
  +
  +
{{ic|all_proxy}} 環境変数を設定することで curl と pacman で socks5 プロキシを使用できます:
  +
$ export all_proxy="socks5://your.proxy:1080"
   
 
==GNOME3 のプロキシ設定==
 
==GNOME3 のプロキシ設定==
179行目: 208行目:
 
(NTLM PROXY IP:PORT + CREDENTIALS + OTHER INFO) -----> '''(127.0.0.1:PORT)'''
 
(NTLM PROXY IP:PORT + CREDENTIALS + OTHER INFO) -----> '''(127.0.0.1:PORT)'''
   
  +
[[AUR]] からは 2 つのオプションが利用可能です:
=== 設定 ===
 
  +
* {{AUR|alpaca-proxy}}
  +
* {{AUR|cntlm}}
  +
  +
=== Alpaca ===
  +
  +
[[AUR]] の {{AUR|alpaca-proxy}} は、コマンドラインツール用のローカル HTTP プロキシです。プロキシ自動設定 (PAC) ファイルと NTLM 認証をサポートします。
  +
  +
==== 使い方 ====
  +
  +
Alpaca は対話的に起動できますが、パスワードの入力が必要です:
  +
  +
$ alpaca -d MYDOMAIN -u me
  +
Password (for MYDOMAIN\me):
  +
  +
alpaca を非対話的に起動するには、NTLM ハッシュを生成し、変数としてエクスポートする必要があります:
  +
  +
$ ./alpaca -d MYDOMAIN -u me -H
  +
Password (for MYDOMAIN\me):
  +
NTLM_CREDENTIALS="me@DOMAIN:00000000000000000000000000000000"; export NTLM_CREDENTIALS
  +
  +
Alpaca はデフォルトで {{ic|localhost:''3128''}} をリッスンしますが、これは {{ic|-l}} および {{ic|-p}} オプションを使用してオーバーライドできます。
  +
  +
さらに、プロキシ PAC URL を {{ic|-C}} オプションのパラメータとして指定する必要があります。
  +
  +
==== サービスとして実行 ====
  +
  +
{{AUR|alpaca-proxy}} には、非対話型の方法で alpaca を自動的に開始するために使用できる {{ic|alpaca.service}} [[systemd/ユーザー|systemd ユーザーサービス]] が含まれています。
  +
  +
次の環境変数を {{ic|~/.config/alpaca.environment}} に設定する必要があります:
  +
  +
LISTEN_ADDRESS=localhost
  +
LISTEN_PORT=3128
  +
NTLM_CREDENTIALS="me@DOMAIN:00000000000000000000000000000000"
  +
PAC_URL="<nowiki>http://some.url/to/some-file.pac</nowiki>"
  +
  +
=== Cntlm ===
  +
  +
[[AUR]] の {{AUR|cntlm}} は複数の "多段" プロキシで設定でき、Cntlm は 1 つが機能するまで次々に試行します。すべての認証された接続はキャッシュされ、再利用されるため、高い効率が実現されます。
  +
  +
==== 設定 ====
   
 
{{ic|/etc/cntlm.conf}} の設定を必要に応じて変更してください。パスワードは絶対に変更してください。それから次を実行:
 
{{ic|/etc/cntlm.conf}} の設定を必要に応じて変更してください。パスワードは絶対に変更してください。それから次を実行:
189行目: 258行目:
 
{{Warning|暗号化されたハッシュではなく平文のパスワードを使っている場合、{{Pkg|ettercap}} で簡単にパスワードを盗み取ることができてしまいます。}}
 
{{Warning|暗号化されたハッシュではなく平文のパスワードを使っている場合、{{Pkg|ettercap}} で簡単にパスワードを盗み取ることができてしまいます。}}
   
{{ic|/etc/cntlm.conf}} をもう一度編集して生成された3つのハッシュを全て記述して、{{ic|cntlm.service}} を[[systemd#ユニットを使う|有効化]]してください。
+
{{ic|/etc/cntlm.conf}} をもう一度編集して生成された3つのハッシュを全て記述して、{{ic|cntlm.service}} を [[systemd#ユニットを使う|有効化]] してください。
   
 
設定をテストするには、次を実行:
 
設定をテストするには、次を実行:
195行目: 264行目:
 
$ cntlm -v
 
$ cntlm -v
   
=== 使 ===
+
==== 使====
 
プロキシには次のアドレスを使って下さい:
 
 
127.0.0.1:PORT
 
 
もしくは:
 
   
  +
プロキシアドレスとして {{ic|127.0.0.1:''port''}} または {{ic|localhost:''port''}} を使用します。{{ic|''port''}} は、{{ic|/etc/cntlm.conf}} の {{ic|Listen}} パラメータと一致します。デフォルトでは、{{ic|3128}} です。
localhost:PORT
 
   
  +
{{TranslationStatus|Proxy server|2024-06-27|810613}}
{{ic|PORT}} は {{ic|/etc/cntlm.conf}} の {{ic|Listen}} パラメータに合わせてください。デフォルトは {{ic|3128}} です。
 

2024年6月28日 (金) 22:22時点における最新版

関連記事

Wikipedia によると:

コンピュータネットワークにおいて、プロキシサーバーとは、他のサーバーからのリソースを求めるクライアントからのリクエストの仲介を行うサーバー(コンピュータシステムまたはアプリケーション)のことである。

HTTPS MITM プロキシ

HTTPS 接続をデバッグする際、ブラウザの外で通信を監視できると便利な場合があります。TLS MITM で傍受するためには、ブラウザやシステムにおけるプロキシの 認証局 の信頼情報を登録する必要があります。

  • Charles — Javaで書かれたグラフィカルな試用版ソフト。
https://www.charlesproxy.com/ || charlesAUR
  • Fiddler — Mono 上で動くプロプライエタリでグラフィカルなツール。
https://www.telerik.com/fiddler || fiddlerAUR
  • microsocks — C言語で書かれたシンプルな SOCKS5 プロキシサーバー。
https://github.com/rofl0r/microsocks || microsocks
  • mitmproxy — Pythonで書かれたコマンドラインとウェブインターフェース。APIも提供しています。
https://mitmproxy.org/ || mitmproxy
  • sslsplit — TLS 接続に対して汎用的に動作するプロキシ。しかしブラウザにおける HTTP プロキシとしては使えません。C言語で書かれています。
https://www.roe.ch/SSLsplit || sslsplit

環境変数

(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 の実行中、この方法を使って設定されて変数を利用します。

システム全体でプロキシを簡単に設定できることを標榜している ProxyMan という名前のツールも存在します。Git, npm, Dropbox などのソフトウェアのプロキシ設定も管理されます。Alan Pope によるスクリプトに影響を受けています。

また、.bashrc に関数を追加することで変数の切り替えを自動化することも可能です:

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/" \
               https_proxy=$http_proxy \
               ftp_proxy=$http_proxy \
               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/" \
           https_proxy=$http_proxy \
           ftp_proxy=$http_proxy \
           rsync_proxy=$http_proxy \
           HTTP_PROXY=$http_proxy \
           HTTPS_PROXY=$http_proxy \
           FTP_PROXY=$http_proxy \ 
           RSYNC_PROXY=$http_proxy
}

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

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

別の手段として、以下のスクリプトを使うこともできます。"YourUserName", "ProxyServerAddress:Port", "LocalAddress", "LocalDomain" の文字列を置き換えてから、~/.bashrc を編集して関数を含めて下さい。新しい bash ウィンドウでは自動的に新しい関数が使えます。既存の bash ウィンドウでは、source ~/.bashrc と入力して下さい。.bashrc に全てを記述するのではなく、functions などの別のファイルに関数の定義を記述して .bashrcsource 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(){
   PROXY_ENV="http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY"
   for envar in $PROXY_ENV
   do
      unset $envar
   done
}

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 の設定ファイルに次の行を追加します。

/etc/sudoers.d/05_proxy
Defaults env_keep += "*_proxy *_PROXY"

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

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

libproxy について

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

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

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

ノート: { pkg-config 'mozjs185 >= 1.8.5'; } が失敗するためバージョン 0.4.11 は http_proxy='wpad:' をサポートしていません。

ウェブプロキシ

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

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

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

$ ssh -D PORT USER@HOST

PORT については、IANA で登録されてないポート番号を選択してください。ローカル PORT のトラフィックを指定し、リモート HOST に転送されます。ssh は SOCKS サーバーのように動作します。SOCKS プロキシサーバーをサポートしているソフトウェアを設定することで localhost の PORT に接続することができます。

SOCKS プロキシを使う

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

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

Firefox では、設定 > ネットワーク > 接続設定から SOCKS プロキシを使うことができます。"手動でプロキシを設定する" を選択して、SOCKS ホストを設定してください (HTTP プロキシや SSL プロキシなどの他のフィールドは空のままにしておいてください)。例えば、SOCKS5 プロキシが localhost のポート 8080 で動作している場合、SOCKS ホストフィールドには "127.0.0.1" と書いて、ポートには "8080" と書きます。

proxychains-ng を使う場合、設定は /etc/proxychains.conf で行います。最後の行をアンコメントする必要があり (デフォルトでは Tor を使うように設定されています)、SOCKS プロキシのパラメータで置き換えてください。例えば、上記と同じ SOCKS5 プロキシを使う場合、最後の行を以下のように置き換えます:

socks5 127.0.0.1 8080

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

proxychains <program>

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

tsocks を使う場合、設定は /etc/tsocks.conf に記述します。オプションについては tsocks.conf(5) を見て下さい。最小限の設定ファイルは以下のようになります:

/etc/tsocks.conf
server = 127.0.0.1
server_port = 8080
server_type = 5
default_user = ""
default_pass = ""

curl と pacman

all_proxy 環境変数を設定することで curl と pacman で socks5 プロキシを使用できます:

$ export all_proxy="socks5://your.proxy:1080"

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' ]"

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

Microsoft NTLM プロキシ

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

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

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

AUR からは 2 つのオプションが利用可能です:

Alpaca

AURalpaca-proxyAUR は、コマンドラインツール用のローカル HTTP プロキシです。プロキシ自動設定 (PAC) ファイルと NTLM 認証をサポートします。

使い方

Alpaca は対話的に起動できますが、パスワードの入力が必要です:

$ alpaca -d MYDOMAIN -u me
Password (for MYDOMAIN\me):

alpaca を非対話的に起動するには、NTLM ハッシュを生成し、変数としてエクスポートする必要があります:

$ ./alpaca -d MYDOMAIN -u me -H
Password (for MYDOMAIN\me):
NTLM_CREDENTIALS="me@DOMAIN:00000000000000000000000000000000"; export NTLM_CREDENTIALS

Alpaca はデフォルトで localhost:3128 をリッスンしますが、これは -l および -p オプションを使用してオーバーライドできます。

さらに、プロキシ PAC URL を -C オプションのパラメータとして指定する必要があります。

サービスとして実行

alpaca-proxyAUR には、非対話型の方法で alpaca を自動的に開始するために使用できる alpaca.service systemd ユーザーサービス が含まれています。

次の環境変数を ~/.config/alpaca.environment に設定する必要があります:

LISTEN_ADDRESS=localhost
LISTEN_PORT=3128
NTLM_CREDENTIALS="me@DOMAIN:00000000000000000000000000000000"
PAC_URL="http://some.url/to/some-file.pac"

Cntlm

AURcntlmAUR は複数の "多段" プロキシで設定でき、Cntlm は 1 つが機能するまで次々に試行します。すべての認証された接続はキャッシュされ、再利用されるため、高い効率が実現されます。

設定

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

$ cntlm -H

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

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

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

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

$ cntlm -v

使い方

プロキシアドレスとして 127.0.0.1:port または localhost:port を使用します。port は、/etc/cntlm.confListen パラメータと一致します。デフォルトでは、3128 です。

翻訳ステータス: このページは en:Proxy server の翻訳バージョンです。最後の翻訳日は 2024-06-27 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。