macOSでcntlmを使う

# 認証Proxy越えのために

忌々しいですね。
NTLM認証Proxy。
毎回忘れる（定期的にパスワードを変えろポリシーが以前あったせいです）ので、忘備録です。

## インストール

Homebrewを使ってお手軽インストールします。
（今回はマシン切替のために、brew自体入っていませんでしたが…）

```shell
$ brew install cntlm
==> Downloading https://homebrew.bintray.com/bottles/cntlm-0.92.3.high_sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring cntlm--0.92.3.high_sierra.bottle.1.tar.gz
==> Caveats
Edit /usr/local/etc/cntlm.conf to configure Cntlm

To have launchd start cntlm now and restart at startup:
  sudo brew services start cntlm
==> Summary
🍺  /usr/local/Cellar/cntlm/0.92.3: 9 files, 144.6KB
```

## 設定ファイル

上記のインストール時に書いてある通り、/usr/local/etc/cntlm.confを弄ります。

```shell
$ sudo vi /usr/local/etc/cntlm.conf
```

## 自動起動

これまた上記のインストール時に書いてある通り、brew servicesコマンドで自動起動させることができます。
（これは、正常処理されたときの状態）

```shell
$ sudo brew services start cntlm
==> Successfully started `cntlm` (label: homebrew.mxcl.cntlm)
```

ところがですね。
最初に書いたとおりbrewも未インストールだったもんで **servicesってコマンドがわからん** とか怒られまして。
上記が正常に動くようにするには、servicesをインストールする必要があります。

```shell
$ brew services
==> Tapping homebrew/services
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 14 (delta 0), reused 7 (delta 0), pack-reused 0
Unpacking objects: 100% (14/14), done.
Tapped 1 command (43 files, 55.2KB).
brew services command:
    Integrates Homebrew formulae with macOS' launchctl manager.

    [sudo] brew services list
    List all running services for the current user (or root)

    [sudo] brew services run formula|--all
    Run the service formula without starting at login (or boot).

    [sudo] brew services start formula|--all
    Start the service formula immediately and register it to launch at login (or boot).

    [sudo] brew services stop formula|--all
    Stop the service formula immediately and unregister it from launching at login (or boot).

    [sudo] brew services restart formula|--all
    Stop (if necessary) and start the service immediately and register it to launch at login (or boot).

    [sudo] brew services cleanup
    Remove all unused services.

    If sudo is passed, operate on /Library/LaunchDaemons (started at boot).
    Otherwise, operate on ~/Library/LaunchAgents (started at login).
```

というわけで、パスワードを変更したなどでcntlmを再起動させる場合は、以下になります。

```shell
$ sudo brew services start cntlm
Stopping `cntlm`... (might take a while)
==> Successfully stopped `cntlm` (label: homebrew.mxcl.cntlm)
==> Successfully started `cntlm` (label: homebrew.mxcl.cntlm)
```

### なお。

一応、[総務省はパスワードの定期的な変更は必要ない](http://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/privacy/01-2.html)ということで。
そういう運用は無くなったので、そうそうパスワードを変えることも無くなったのは僥倖です。


## 追記

ローカルにインストールしたcntlmを使おうとすると、

```shell
$ export http_proxy=http://localhost:3128
$ export https_proxy=http://localhost:3128
$ curl http://www.yahoo.co.jp/
curl: (52) Empty reply from server
```

つれない返答だ…。

tcpdumpで見てみれば、IPv6で繋いでくださってる。

```shell
$ sudo tcpdump -i lo0 -n port 3128
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
13:30:30.956497 IP6 ::1.51393 > ::1.3128: Flags [S], seq 1694240149, win 65535, options [mss 16324,nop,wscale 5,nop,nop,TS val 75433652 ecr 0,sackOK,eol], length 0
13:30:30.956514 IP6 ::1.3128 > ::1.51393: Flags [R.], seq 0, ack 1694240150, win 0, length 0
```

この場合、eth0をIPv4オンリーにして、そちらにプロキシ設定する、という手を使った。

```shell
$ sudo networksetup -setv6off Ethernet
$ export http_proxy=http://192.168.0.1:3128
$ export https_proxy=http://192.168.0.1:3128
```

## 追記２

追記を書いた後に、localhostではなくて127.0.0.1でいいんでね？と気が付いた。

```shell
$ export http_proxy=http://127.0.0.1:3128
$ export https_proxy=http://127.0.0.1:3128
$ curl http://www.yahoo.co.jp/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
```

というわけで、うっかりうっかり。