2014年10月27日

透過SOCKS-SSHプロキシ

前回の多段プロキシの試行はHTTPSの前にあえなく撃沈。
問題点は、プロトコルに対するプロキシでは暗号化に対して微妙なんじゃないか?ということ。
透過でなければ(ようはプロトコルをうまく中継してくれれば)問題ないのだけれども。

そこでRedsocksというHTTPSをうまくやってくれるらしいと書いてあるプロキシを試

ちょっとまて、それじゃ本当にHTTPSしかできない。
できれば、いろんなプロトコルを通したい。俺は使っていないけれどLINEとかLINEとかSteamとか。
学生が互いの連絡に使うのだよ、LINE。俺は使ってないけれど。
結局それでは微妙に終わるのだ。

SOCKSプロキシを前回確かめたのは、SOCKSさえあれば一通りのことができるからだ。
そういえばSSHは通るんだったか・・・
ポートフォワード・・・
ふと、SOCKSのまねごとできないの?という疑問が湧いた。

調べたら、-DでほぼSOCKSプロキシとして動作するという。
これに透過プロキシを組み合わせれば解決?といろいろ試行。
結果、できた。構成はこんな感じ。
クライアント--(ゲートウェイ扱い)-->サーバー--(iptablesによるredirect)-->redsocks--(redsocksによる透過プロキシ)-->ssh--(ポートフォワード)-->外部サーバー-->(外部)
結論としては、危険きわまりないので、事情分からない人は絶対に真似をしないこと。

以下、実現の際に詰まった部分のメモ書き。

詰まった点その1:大体の情報源において、ssh -Dはlocalhostでやっている(安全性考えれば当たり前か)。
localhostならいいのだが、他のマシンから送るには、ポートフォワードのために-gを付けなければならない。(そうでないとconnection refused)
結果として、ssh -Nf -g -D 1080というコマンドに。オプションだらけだ。
まあよしとしよう。

詰まった点その2:大体の情報源において、redsocksはlocalhostでやっている(以下略)。
今回は外部に置いているわけだが、そうなると当然透過プロキシにするためのiptablesの設定が微妙に変わる。
もっともきつかったのは、なぜかINPUTチェインのポリシーをACCEPTにしないと通らなかったことだ。
怖いよこの設定!!

改めて見ると、外部でやるような内容じゃない。
セキュリティのずさんさが目に余る・・・
真面目にいろいろ向上させたいところだが、原因がわからないからなあ。
なんにせよ、とりあえず目標の達成をかくにん。
よかった♡(時代に乗り遅れた)

なお、この記事の真似をしてハッキング被害に遭ったとしても私は「ばーか」としか言いませんのであしからず。
危険だともセキュリティずさんだと言っているし。
posted by chiguri at 20:55| Comment(0) | 雑多

2014年10月24日

Squid、透過多段プロキシの試行

今いる研究室は、大学のネットワークポリシーの関係上、直接ではなく大学のプロキシを通してしかインターネットにアクセスできない。
ああ面倒くさい、家のネットワークと大学のネットワークで切り替えなければならんのか、と思いながら過ごして半年、嫌になってプロキシの自動検出(WPAD、DNSの方)を導入した。
これで良いか、楽になったな、などと思っていたら、なぜかFirefoxが「ネットワークが切り替わったとき」に自動判別をしないという非常にアホな仕様だったので、やはり不便が微妙に解消されない。
本気でChromeとかIEにしてやろうか、などと思ったりもした(これらはネットワークが切り替わると自動で判別しにいく)。
え、FirefoxからIEの情報を見に行け?使ってみれば分かるが、自動検出はプロキシの設定をしないのと同じ扱いになる。無用の長物もここに極まれり。

とりあえずブラウザの切り替えは悩むとして、他にないのかと考えることにした。
幸い、研究室のインフラ自体はそれなりに自由に動かして問題ないので(だからWPADを導入した)、ルーター付近で何かできないか、と思ったりした。
いろいろ調べると、透過プロキシというのがあるという。
なるほど、来たリクエストをプロキシとして通す。これなら自分でプロキシの設定がなどといわなくて良い。ゲートウェイがうまくやってくれるわけだ。

ふと気づくと、透過プロキシは直接そのサーバーがアクセスを行うものだった。調べども調べどもその用例ばかり。
これはどうだろうと考えたが、昔そういえば多段串とか聞いた。透過プロキシが多段プロキシとして動作するならどうだろうか?

というわけで、仮想サーバーとしてUbuntu、その上にSquidをインストールし、試してみることにした。
Squidの設定は普通に調べれば出る。
透過プロキシの設定は、待ち受けポートにtransparentを付けるだけ。あとはiptablesで80番ポート行きのパケットをむりやりその待ち受けポートへ投げる。
多段プロキシの設定は、親のプロキシの設定及びアクセス方法を親のプロキシ経由のみに限定。
やってみたところ・・・ビンゴ!
透過多段プロキシによって、プロキシを設定しなくてもHTTPアクセスができるようになった。

・・・80番ポート?あれ、HTTPSは?

調べたら、Squidでの透過プロキシはHTTPSに対応できない、とのこと。
夢、絶たれる・・・

redsocksという(透過)SOCKSプロキシに、なにかHTTPSプロキシがどうの、と書かれているのを見つけたので、機会を見つけてそちらもチャレンジしてみよう。
あ、ちなみに大学のプロキシはSOCKSプロキシではないので、いろんなSOCKSプロキシ通すもの(widecapとかいろいろあるらしいが)は全て使えない。
redsocksも当然SOCKSプロキシとしては使えないわけだが・・・HTTPS使えればだいぶ違うし・・・


おまけ:SOCKSプロキシかどうかはcurl -x socks5://hogehoge という感じでcurlを使ったproxy設定をすることで確かめた。便利だ。覚えておこう。
posted by chiguri at 00:03| Comment(0) | PC