cntlmでまたまたMSのプロキシ認証越え 2013年10月10日

Networking
“Networking” photo by ivanx

私物のMacやモバイル端末で社内のWiFiを使いたい。って普通に思うから前々からいろいろつないだりしておりました。WinPCではDropbox使うためにntlmapsというツールを使ってみたり、AndroidではProxyDroidというようなツールを使ってつないでみたりしておりましたが、最近は今年の半ばに買ったMacbook Airを社内で使いたいがどうもインターネットに出る通信のFirewallでの認証が不安定で出れる時と出れない時があったり。これが急ぎの場合にインターネット見れない状況だと非常にイライラしてたのでどうにかならんかと久しぶりに時間のある日にいろいろネットを見ていた。そしたら、

Cntlm: Fast NTLM Authentication Proxy in C

というツールがリリースされているのがわかった。これは全部C言語で書かれたMicrosoftのNTLM認証を使ったFirewall認証を超えるためのツール。
これ、不正にFirewallを超える、という意味ではなく、Windows端末以外だと大概うまく認証が動かない非常にクセのあるMicrosoftのNTLM認証を台替りして受け持ってくれるツールです。

んで、上記のサイトでDOWNLOADからファイルをダウンロードしてみると、exe? rpm? あら?Mac用のバイナリがない?オープンソース・ソフトウェアらしいがMacでコンパイルまでするのもめんどくさい。。。と考えていたところ以下のようなサイトが。

How to set cntlm on mac OS X – OHO’s Blog

ここのサイトを読んでみると、コンパイルまでしなくともHomebrewというコマンドラインのパッケージ管理ツールを入れれば単純にMacのターミナルから一行コマンド撃ちこむだけでcntlmをインストールできるとのこと。てなわけで早速Linuxで言うとyumやaptに相当するパッケージ管理ツールHomebrewをインストールします。ちなみにMacにはこのHomebrew以外にもMacPortsというパッケージ管理ツールもあります。

Homebrew — MacPorts driving you to drink? Try Homebrew!
Macを便利にするパッケージマネージャ「Homebrew」 | マイナビニュース

Homebrew自体のインストールも簡単。ネットにつながっている状態でMacのターミナルから

ruby -e “$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)”

を入力するだけ。その後

brew install cntlm

と入力することでcntlmがMacにインストールされる。そしてcntlm.confの設定ファイルを編集していかなければならないのだが、先のリンクの先にある”Configure cntlm.conf”の例のように設定ファイルを編集すればいい。このcntlmのいいところはNTLM認証に使うパスワードを平文で設定ファイル内に記載する必要がないところ。以前のntlmapsは毎回起動時にパスワードを手動入力するか、設定ファイル内にパスワードを平文であらかじめ記載しておく必要があった。こちらのcntlmはパスワードにhashをかけてから記載する。なので他の人に見られて覚えられてしまうという危険性は多少なりとも減った。このhashを作成するには、

cntlm -H -c /usr/local/etc/cntlm.conf

と入力することでcntlm側でhashをかけてくれて、設定ファイルにコピペできるフォーマットで出力してくれる。出力された3行をコピペでcntlm.confに追記する。後、Passwordで始まる行を#でコメントアウトするのを忘れずに。

そしてユーザ名とドメイン名の入力。ドメイン名は.localや.comを除いたWindows Domainのドメイン名で入力してうまくいってます。Proxyのところは認証処理をしている上位のプロキシサーバのIPアドレスとポート番号を指定します。No Proxyの項目はご自分のネットワーク構成に合わせて、、、多分そのままでも機能します。ListenはMacにインストールしたcntlmが稼働するポート番号を記入します。特に問題なければデフォルトのTCP/3128で問題ないかと思います。ここまで記載できればとりあえずcntlmは動くと思います。設定ファイルを保存した後、

cntlm -f

で起動すればフォアグラウンドでデバッグログを出力しながら動いてくれるのでちゃんと動くかどうかのテストをします。SafariやChromeのプロキシ設定を、localhostのTCP/3128へ接続するように設定します。認証の設定をする必要はありません(ただ、ブラウザ起動直後に一度だけ必ずパスワードを聞いてきます。一度入れるとそれ以降は入れる必要がなかったですが、設定ファイル内にパスワード記載されてるのになんで??)。動くようなら単純に

cntlm

で起動するのでターミナルから起動して使うか、~/Library/LaunchAgents/にcom.oho.cntlm.daemon.plistのようなファイル名でこのプログラムのサービス起動の設定ファイルを作ってあげると毎回Macの起動時に自動的にこのcntlmが立ち上がるようになります。サービス起動の設定ファイルは上記のリンクの”Using LaunchAgent for automatic service launch at start”のところにある設定ファイルの記載内容をそのままコピペして保存すれば動くようになるかと思います。

これでcntlmのインストールは終了。自分の使っているFirefoxのプロキシ設定をcntlmに接続するよう設定変更して、、、つないでみると早い早い。結構しっかり安定して繋がってくれる。こりゃあいいわ。暫くこれでいきます。