Використання cntlm як ntlm аутентифицирующей http proxy

Напевно більшість з вас на робочому місці виходить в інтернет через корпоративний проксі. І в принципі це не створює ніяких проблем, проте в разі якщо

то в цьому випадку може виникнути проблема. Справа в тому, що деякі програми не вміють працювати з NT-шной системою аутентифікації через проксі.

Проблема ця виникає не часто, і в тому випадку, якщо ви використовуєте який-небудь специфічний або не дуже софт. Та й то, варто оновити ПЗ, як проблема може піти. У разі якщо ж оновлення не допомагає і робочих альтернатив використовуваному софту немає, то використання Cntlm - ваш вибір.

установка Cntlm

Cntlm - це, як вже має бути зрозуміло, NTLM / NTLM Session Response / NTLMv2 HTTP проксі, що дозволяє програмам і сервісів без підтримки протоколу NTLM зв'язуватися із зовнішнім світом через існуючий корпоративний проксі.

Або згідно офіційній документації (файл cntlm_manual.pdf доступний після установки в кореневій директорії Cntlm):

cntlm - authenticating HTTP (S) proxy with TCP / IP tunneling and acceleration

На сторінці проекту на sourceforge.net можна скачати версії як для Windows (на увазі бінарного exe файлу і zip архіву), так і для * nix систем (представлені пакети rpm, deb, а також bz2 і gz архіви). Оскільки я Cntlm ставив на Windows, то частина тексту буде трохи нерелевантні по відношенню до того ж Linux'у (наприклад, різні шляхи і різні розширення конфігураційних файлів), однак більшість моментів і загальна ідея роботи Cntlm відрізнятися не будуть.

Налаштування проксі

Як приклад буду расматривать Git Bash старої версії - налаштуємо його роботу через проксі.

Отже, після успішної установки, в системі з'явиться новий системний сервіс "Cntlm Authentication Proxy" поки не запущений, але автоматично стартуемий. Для того, щоб схема на малюнку нижче повністю заробила, необхідно коректно заповнити налаштування ini файлу (у мене він лежить в директорії "C: \ Program Files \ Cntlm").

Розглянемо опції файлу cntlm.ini

В офіційному довідковому керівництві є допомога по усі прапори. І я раджу прочитати його. Також варто поглянути на посилання в кінці поста. Але давайте розберемо параметри необхідні для роботи з сервісом.

  • Username і Domain. нічого складного, просто доменний пароль або пароль на робочий проксі і робочий домен

Використання cntlm як ntlm аутентифицирующей http proxy

У разі, коли незрозуміло який тип протоколу NTLM використовується, є опція "NTLM dialect detection" запуск якої дозволить определеии існуючі налаштування. Щоб її запустити запустіть cntlm.exe з ключами:

  • -M - якраз опція "NTLM dialect detection"
  • -I - опція інтерактивного введення пароля і її слід запускати тільки з консолі, причому значення пароля в конфігураційному файлі або задаються за командного рядка ігноруються.

Це означає, що проксі-сервер використовує протокол NTLMv2.

Є ще один варіант отримання хешу з пароля. При цьому слід викликати cntlm.exe з ключами:

Після виконання команди

і введення пароля, програма виведе на консоль щось на кшталт:

Залишиться лише скопіювати необхідні хеши в ini файл.

Proxy - тут слід вказати ваш робочий проксі через який ви і працюєте в форматі proxy_ip: proxy_port. Можна вказувати кілька проксі і cntlm буде перебирати їх всіх до тих пір, поки не знайде робочий.

NoProxy - в разі, коли для деяких ресурсів потрібні виключити зі схеми з cntlm, їх слід додати сюди через кому (можна використовувати * і. Як заміщають символів (wildcards)). наприклад:

NoProxy localhost, 127.0.0. *, 10. *, 192.168. *

NoProxy localhost, 127.0.0. *, 10. *, 192.168. *, 172.16., .yourcompany.com, * .another.company.ua

Listen - порт який буде слухати cntlm і на який будуть стукати всі програми налаштовані на роботу через cntlm. Можете залишити дефолтний 3128. Тобто проксі тепер буде localhost: 3128.

This option is rater delicate and I do not recommend to change the default built-in values ​​unless you had no success with parent proxy auth and tried magic autodetection (-M) and all possible values ​​for the Auth option (-a). Remember that each NT / LM hash combination requires different flags. This option is sort of a complete "manual override" and you'll have to deal with it yourself.

Робота cntlm сервісу

Отже, всі необхідні опції налаштовані, можна перезапустити сервіс і спробувати попрацювати з налаштованими програмами. Спрощена схема роботи з проксі з використанням cntlm виглядає так:

Використання cntlm як ntlm аутентифицирующей http proxy

На малюнку чітко видно місце яке займає сервіс cntlm - його роль в перенаправлення запитів від програм до сервера. Після отримання запиту (request) з боку клієнта (Git Bash), cntlm першим запитом намагається отримати анонімний (anonymous request) доступ. У разі якщо це не проходить, наступний запит уже з даними для аутентифікації (NTLM credentials).

Крім згаданих, cntlm має низку функцій, які не згаданих тут:

  • прозоре TCP / IP тунеллірованія (transparent TCP / IP port forwarding (tunneling))
  • підтримка інтерфейсу SOCKS5

І інші фічі, про які можна прочитати з керівництва і хелпа.

Таким чином, якщо раніше настройка проксі була: proxy_ip: proxy_port. то тепер для програма вона зміниться: localhost: 3128 (якщо порт не змінений). Наприклад, так можна змінити налаштування в Git Bash:

Або у випадку з класичної linux'ой консоллю:

До речі, для тих хто забув, ось так можна гальмувати і запускати сервіс в консолі: