ちょいとクセのあるntlmapsを入れるには 2013年04月08日

firewall
“firewall” photo by ukaszSie

今回、ソンクラン休暇の作業として仕事用の自前PCの再セットアップを行ったが、初めてWindows8環境をインストール、いろいろ四苦八苦やってますが、その作業のひとつでntlmapというツールのインストールがあった。

このntlmapsというのは「NTLM Authorization Proxy Server」と言いまして、会社のネットワークなどでFirewallやプロキシがMicrosoft Forefront Threat Management Gateway(旧ISA Server)で組んである時などにDropboxやその他、HTTP/HTTPSでバックセッションを張るアプリがことごとく繋がらず、せっかくの便利なウェブサービスのいくつかが使えなくなってしまうことが多い。

それをこのプログラムがForefrontとの認証部分を肩代わりして行い、バックセッションはこのntlmaps経由で認証を必要としない通信経路で通信が可能になるというもの。これをセットアップするのだ。

とりあえずこのntlmaps、プログラムの実態はPythonスクリプトなんでPythonの実行環境をインストールしないといけない。なのでPythonのページからとりあえずインストーラーをダウンロード、インストール。その際必ず2.xのバージョンのものを。3.xでインストールしてntlmapsでエラーが出まくり、原因切り分けにすごい時間かかったが結局僕の環境の場合2.7でちゃんと動きました。Pythonは1.5.2 or higherで動くと書いてあるのに。。どこまでテストしてるんだろう?

その後、ntlmapsをダウンロード。ntlmapsは.exe形式のインストーラーパッケージもあるんだが、これはPythonを使ってないのかPythonのインストールを必要とせず、単体で動く、、、はずなんだが、MSVCR71.dllが見つかりませんというエラーが出る。どこかからこのMSVCR71.dllをコピーしてきてインストールしても、エラーは出続ける。。というわけでこちらは使えません。

んで本来のスクリプトで配布されているものは基本的にスクリプトなのでzipかtar.gzで提供されていて、インストーラーはない。なので解凍後、フォルダをまるごとProgram Filesなどの中にコピペし、server.cfgファイルを編集。ほとんどの環境は以下のNTLM_AUTHの項目の修正だけで動くんじゃないかな。

PARENT_PROXY_PORT: プロキシサーバーのポート番号
NT_HOSTNAME: PCのコンピュータ名
NT_DOMAIN: 参加しているドメイン名(FQDNではなくNTドメイン名)
USER: ログインユーザ名
PASSWORD: パスワード(平文で保存されるので注意。ここに記入しなければ立ち上げ時に毎回手入力することになる)

んで、main.pyを実行するんだが、runserver.batが用意されている。中身は

@echo off
“C:\program files\python\python.exe” main.py

という単純にmain.pyをPythonに読み込ませるだけのスクリプトだが、Pathが間違っている。これを

@echo off
C:Python27\python.exe” main.py

という風に入れたPythonのモジュールのパスに合わせてノートパッドはその他のテキストエディタで修正。この条件でとりあえず動くはず。後は毎回PC起動のたびに自動起動してくるようにstartupのメニューの中などにこのrunserver.batのショートカットを放り込んでおけばとりあえず完了。

という手はずをよくよく考えたら半年ほど前にOSインストールしなおした際にやったはずなのにすっかり忘れてて1日なぜ動かないのかと悩みまくりました。。なのでちゃんと備忘録をココに。


※ 2013/04/09 update!
上記でセットアップしてもちゃんと外部とつながらないという人は以下の部分を編集してみるといいかも。

# These two options replace old FULL_NTLM option.
# NTLM authentication consists virtually of two parts: LM and NT. Windows95/98 use
# only LM part, WindowsNT/2000 can use NT and LM or just NT part.
# Almost always using just LM part will be enough. I had several reports
# about LM and NT requirement and no about just NT.
# So try to setup 1, 1 only if you have enough reasons to do so and when you understand
# what you are doing.
# 0, 0 is an illegal combination
# NOTE: if you change these options then you have to setup flag option accordingly.
LM_PART:1
NT_PART:0

# Highly experimental option. See research.txt for details.
# LM – 06820000
# NT – 05820000
# LM + NT – 07820000
NTLM_FLAGS: 06820000

こちら、Windows95/98の使ってた方式だとLM、WindowsNT/2000からだとNTで認証を行うようです。ISA Serverなどのバージョンの古いものだと、ntlmaps標準のLM_PARTのフラグが立っている状態で通信できるんだろうけど多分ForefrontTMGぐらいのバージョンになるとLMの方式を切り捨ててるのじゃないかと推測。なのでNT_PARTのフラグを立てたり、両方立てたりで試してみてうまく動作しないかの確認をするのが吉だと。

ちなみに上のLM_PART、NT_PARTを編集したら下のNTLM_FLAGSも一緒に変更すること。書いてあるようにLMだけ1にしてフラグを立てた時は06820000、NTだけ1にした場合は05820000、LM+NTの両方の場合は07820000を書いておくこと。繋がらない時はこれを全部の組み合わせで一度試してみる事をオススメします。