socat で簡易プロキシサーバーを立てよう
スポンサーリンク
今日は socat コマンドのご紹介です。
表題の通り、コマンドラインだけで簡易プロキシサーバーを立てることができるというものです。
さっそく見ていきましょう。
インストール
今回は ubuntu 環境にインストールします。
$ sudo apt-get install socat
これだけで準備OKです。
起動してみる
その前に簡単に使い方を説明します。
$ socat <options> <address> <address>
一つ目の address が入力で、二つ目の address が出力と思ってもらえればいいです。
具体的には以下のように指定します。
$ socat tcp-listen:80,reuse,fork tcp-connect:localhost:8080
これだけで80番ポートで待ち受け、8080へ中継する動作となります。
reuse
や fork
のような属性を付与することで、細かく動作をカスタマイズすることも可能です。
実際に使う場合は、さらにオプションを指定することが多いですね。
以下は warn レベルのログをsyslogに出力するオプションを追加したものです。
$ socat -ly -d -d tcp-listen:80,reuse,fork tcp-connect:localhost:8080
-d を増やすごとにログレベルがより詳細になります。
SSLを試してみる
もちろん SSL にも対応しています。
さきほどは tcp-listen
を使いましたが、SSL を利用したい場合は openssl-listen
を指定します。
openssl-listen
と言っているくらいですから、openssl をインストールする必要があります。
コマンドでサクッとインストールしちゃいましょう。
$ sudo apt-get install openssl
次は、SSL ということなので当然サーバー証明書と秘密鍵が必要です。
サーバー証明書を持っていない方は、せっかくですのでこちらの記事を参考に自分で作ってみてもよいかと思います。
サーバー証明書が準備できたら、以下の socat コマンドを実行してみましょう。
$ socat -ly -d -d openssl-listen:443,reuse,fork,cert=<証明書ファイル>,key=<秘密鍵ファイル> tcp-connect:localhost:8080
openssl-listen
に対して cert
と key
属性を指定することで SSL で受け付けてくれるようになります。
たったこれだけで SSL を終端した上で 8080 ポートへプロキシしてくれるサーバーが起動できるなんていい時代ですね。
さらにログレベルを上げて通信すれば SSL ハンドシェイクの内容を確認することだって可能です。
わざわざ Wireshark を引っ張り出してきてパケットキャプチャする必要もありません。
いろんなパターンのパケットキャプチャを取って比較するのって、意外と手間なので助かりますね。
まとめ
socat はサービスの本番運用で使うようなことはあまりないかもしれませんが、ちょっとプロキシが必要になったときに大変重宝しますので、ぜひ一度お試しください!