おさかなせいざ

おさかなせいざ

プログラミングメモや日記がわりに

Http proxy の壁を素直に通る

注意

Proxy の安易な突破は問題となりえますので,ここに示された方法を実践する際には担当者に問い合わせた上で,自己責任でお願い致します.

プロキシの呪縛

 皆さんのおられる職場や学校には Http proxy はありますでしょうか? Http proxy とは http や https のアクセスを行う際に, クライアントとサーバの中間に入りデータのキャッシュやアクセスログの収集, 特定のサイトのブロックなどを行う,クライアントの代理となるソフトウェアです. これによって,ユーザによらず危険なサイトのアクセスを制限したり, 就業中の無意味なネットサーフィンを管理することもできるかもしれません. Http proxy を扱う有名なソフトウェアとして Squid があげられます.

 ですがユーザからみると,ソフトウェアのアップデートも行えないということもあるかもしれませんし, 確認しなければならないのにページが見られない,なんて状況もあるかと思います. 意味のわからない理由(特定の単語がURLに含まれる等)でブロッキングが行われていることもあります.

そこで今回は Http proxy をそのまま通って,確認したいのに見られないページを一時的に見る方法を考えてみます. (安全は保証できませんが Web Proxy なんかもありますので,とりあえずサイトを見たいというかたは検索してみてください)

事前準備

以下必要となるもの

  • グローバル IP アドレス(ドメイン)を持つ制限のない外部コンピュータ(サーバ,VPS,NATによって外部 port からのアクセス転送可能なLAN内コンピュータ)
    • Port 443 への外部からのアクセスが iptables や firewalld 及び環境で許可されていること
    • sshd (ssh の待受に必要, Port 443 で待受) のインストール
    • squid (見たいサイトへ行く際に使用するプロキシ) のインストール
  • クライアントとなるコンピュータ
    • ssh (クライアントとなるコンピュータ) のインストール
    • corkscrew (proxyを通るために必要) のインストール

クライアントは Linux が使用可能な状況を想定していますが,わかる方であればどのような環境でも構いません.

環境想定です.

Proxy domain: proxy.example.jp
Proxy port: 8080
Proxy username: proxyuser
Proxy password: proxyppap

Outside domain: outside.example.com
Outside ssh port: 443
Outside ssh username: outsideuser
Outside ssh password: outsideppap

Outside proxy port: 8888

鍵等があるのであれば設定は適宜読み替えてください.

設定

基本 Http proxy は Port 80 と 443 の http と https 以外の要件では外へ行かしてくれないので, https のふりをするために,外部コンピュータの ssh は 443 で待ち受けないといけません.

.ssh/config の設定

Host proxyoutside
    Hostname outside.example.com
    Port 443
    user outsideuser
    ProxyCommand corkscrew outside.example.jp 8080 %h %p ~/.ssh/proxy.config
    LocalForward 8888 localhost:8888

.ssh/proxy.config の設定

proxyuser:proxyppap

proxyoutside が設定の名称です. Hostnamesshの接続先, Port が待受ているポートを表します. ProxyCommand では ssh の通信を渡すプログラムを指定し, 今回であれば corkscrew が Http proxy を通した上で, ssh 先に接続してくれます. ここに ssh を指定すれば多段アクセスを行うことも可能です. 最後の LocalForwardssh で接続している間,指定したローカルのポートへのアクセスを接続先の指定したポートへ転送する設定です. 今回は squid を Port: 8888 で待受させるのでローカルの同じポートを設定しています.

proxy.config は Http proxy に接続する際に必要となるユーザ情報を入れます.

接続

これらの設定を行ったら,

$ ssh proxyoutside

として外部コンピュータへ接続します. また,ssh で接続している間, localhost:8888 へのアクセスを 外部コンピュータのlocalhost:8888 に転送してくれます.

次に /etc/squid/squid.conf の設定です.

acl outsideproxy src 127.0.0.1/32
http_access allow outsideproxy
http_port 8888

これによって,外部コンピュータの localhost:8888squid が待ち構えてくれます. あとは squid を起動した上でクライアントとなるコンピュータのプロキシ設定に localhost:8888 を指定すれば, Http proxy の壁を素直に通ることができます.

それでは,ご利用は計画的に.

ワザップみたいな文章になったな