Configure Linux to use NTLM authentication proxy (ISA Server) using CNTLM

 

About Cntlm proxy

Quoted from the official ctnlm sourceforge.net Website: "Cntlm is an NTLM / NTLM Session Response / NTLMv2 authenticating HTTP proxy intended to help you break free from the chains of Microsoft proprietary world. You can use a free OS and honor our noble idea, but you can't hide. Once you're behind those cold steel bars of a corporate proxy server requiring NTLM authentication, you're done with. The same even applies to 3rd party Windows applications, which don't support NTLM natively.

Here comes Cntlm. It stands between your applications and the corporate proxy, adding NTLM authentication on-the-fly. You can specify several "parent" proxies and Cntlm will try one after another until one works. All auth'd connections are cached and reused to achieve high efficiency. Just point your apps proxy settings at Cntlm, fill in cntlm.conf (cntlm.ini) and you're ready to do. This is useful on Windows, but essential for non-Microsoft OS's.

Cntlm integrates TCP/IP port forwarding (HTTP tunneling), SOCKS5 proxy mode, standalone proxy allowing you to browse intranet as well as Internet and to access corporate web servers with NTLM protection. There are many advanced features like NTLMv2 support, password protection, password hashing, completely mutliplatform code (running on just about every architecture and OS out there) and so much more. Cntlm eats up so little resources it can be used on embedded platforms as well - it's written in plain C without any external dependencies.

Cntlm has been tested against various ISA servers, WinGate, NetCache, Squid and Tinyproxy with and without NTLM auth."

About this tutorial

This tutorial assumes you have a clean install of Debian 7.

 

1. Install CNTLM

Update your sources:

apt-get update

Update your installation:

apt-get upgrade

Install application:

apt-get install cntlm

 

2. Configure CNTLM

Once installed edit the configuration file:

nano /etc/cntlm.conf

Set username, domain, remote proxy, and address with port which local proxy will listen to. Here will listen only in local interface:

Username        testuser
Domain          contoso.com
Proxy           10.0.0.41:8080
Listen          127.0.0.1:3128

Generate password hash:

cntlm -H

You will see something like this:

Password:
PassLM          7F4BB72132BAA2A01FA94BD623A70D3B
PassNT          2C27BB146F74625D159413FC1F30745F
PassNTLMv2      D3972609581D8260868ED588303F0FF0    # Only for user 'testuser', domain 'contoso'

Copy these lines to /etc/cntlm.conf

 

3. Configure Debian to use the CNTLM proxy:

Execute this line to configure system to use the local proxy:

export http_proxy=http://127.0.0.1:3128/

 

4. Configure CNTLM to listen external network:

If you need to use CNTLM as a proxy server, add this line to /etc/cntlm.conf (assuming 10.0.0.1 is the local address):

Listen          127.0.0.1:3128
Listen          10.0.0.1:3128

Links

CNTLM: http://cntlm.sourceforge.net/

NTLM Info: http://en.wikipedia.org/wiki/NT_LAN_Manager

Share this page:

2 Comment(s)