Jeśli zdarzyło Ci się pracować (lub aktualnie pracujesz) dla korporacji, w której korzystacie z proxy do sieci firmy Microsoft, pracujące po protokole NTLM (NT Lan Manager) i do tego korzystasz z systemu Linux, bo jesteś np. administratorem, to z pewnością nie raz spotkasz się z problemem komunikacji jakiejś aplikacji poza środowisko lokalne. Problemem jest fakt, że przy tych wszystkich mocnych restrykcjach, narzuconych korporacyjnie, serwery z reguły nie wychodzą na świat bezpośrednio lub w jakiś inny prosty sposób. Najczęściej w korporacjach korzysta się z całego inwentarza i dobrodziejstwa MS Active Directory. Pomijając pozostałe kwestie, protokół NTLM to właśnie protokół uwierzytelniania typu „wyzwanie-odpowiedź”, który jest używany do autoryzacji, czy też uwierzytelniania danego pracownika, klienta w Active Directory.

Mając systemy Linux pracujące razem z Active Directory z pewnością często spotkasz się z koniecznością ich komunikacji ze światem, lub chociażby spotkasz się z problemem aktualizacji systemu operacyjnego, który pobiera paczki np. z jakiegoś dozwolonego, zewnętrznego repozytorium, ale w dalszym ciągu konieczne jest skorzystanie z serwera proxy z autentykacją. Niestety, nie wszystkie aplikacje czy usługi systemowe potrafią obsługiwać tego rodzaju serwery proxy i komunikacja będzie niemożliwa. Na szczęście jest kilka fajnych narzędzi, dzięki którym możemy ten problem obejść i skorzystać z połączenia, wykorzystując NTLM pośrednio, a do aplikacji lokalnie wystawiając końcówkę bez autentykacji.

Przygotowanie obejścia problemu

Aby móc skorzystać z dobrodziejstwa tego rozwiązania potrzebny jest oczywiście serwer linux z systemem, który ma połączenie do serwera proxy, udostępnionego przez administratora, dział cybersec itd.

Instalacja niezbędnych pakietów

Nie mając dostępów do repo, może być z tym problem, ale można też przygotować wcześniej obraz bazowy lub zainstalować lokalnie, skompilować aplikację itd. Dla uproszczenia procesu zakładam, że do standardowego repozytorium systemu dostęp jest przyznany. Jak zawsze zaleca się zaktualizowanie uprzednio całego systemu operacyjnego.

apt-get install cntlm

apt-get install cntlm

Konfiguracja cntlm proxy

Zanim zaczniemy konfigurować nasze proxy do działania ważne jest, aby było ono bezpieczne. Jest to jeden z argumentów do pracy właśnie z tym narzędziem. Nie ma konieczności przechowywania haseł w formie odkrytej, nieszyfrowanej, clear-textem.

W tym celu zahaszujmy nasze hasło, które uprawnia nas do dostępu do proxy firmowego. Cntlm udostępnia do tego odpowiednie narzędzie, które lokalnie zahaszuje nasze hasło i ten hasz będziemy mogli użyć w pliku konfiguracyjnym. Dzięki temu hasło dostępowe będzie bezpieczne, a nie otwartym tekstem wpisane w plik konfiguracyjny.

cntlm -H -d DOMENA -u KONTO

DOMENA – to nasza domena firmowa, do której logujemy się do AD
KONTO – to nasz użytkownik

W powyższym przykładzie pokazuję jakieś losowe, randomowe hasło, które po wprowadzeniu na prompcie zostaje zahaszowane. Ten hasz będziemy mogli wkleić w konfigurację.

Edytujemy plik konfiguracyjny:
vim /etc/cntlm.conf

Edytujemy sekcje odpowiedzialne za dostęp do proxy Microsoft:

Username – tu wpisujemy nasze konto Microsoft, jakim logujemy się do proxy, domeny
Domain – nasza domena z Active Directory
Proxy – tu podajemy adres proxy NTLM z Windowsa
Password – tu wklejamy hasz naszego hasła

Co istotne, jeśli w naszej firmowej sieci funkcjonuje więcej serwerów proxy w modelu np. failover, możemy linijka po linijce wpisać kilka adresów, hostów.

Możemy także ustawić adresy dla no_proxy, dzięki czemu część IP nie będzie przechodzić przez nasze proxy, a bezpośrednio po sieci firmowej.

Restartujemy proxy cntlm:
systemctl restart cntlm

Wygląda w porządku, więc możemy już zacząć korzystać z naszego proxy.

Korzystanie z proxy sieciowego cntlm

Aby skorzystać z proxy, które lokalnie jest połączone z siecią AD i pozwoli aplikacjom, które nie wspierają tego typu połączeń na korzystanie z sieci, możemy wrzucić konfigurację proxy w globalne zmienne:
/etc/environments

Albo exportować każdorazowo do konsoli:

export http_proxy=http://127.0.0.1:3128

export https_proxy=https://127.0.0.1:3128

export ftp_proxy=http://127.0.0.1:3128

lub, jeśli aplikacja wspiera zwykłe proxy bez autoryzacji, dopisać do pliku konfiguracyjnego konieczność przejścia przez proxy lokalne 127.0.0.1 na porcie 3128.

W ten prosty sposób otrzymaliśmy możliwość korzystania z sieci zewnętrznej na ograniczonym środowisku, najczęściej korporacyjnym, w którym z reguły nie ma możliwości bez monitorowanego i zabezpieczonego proxy przejścia do sieci zewnętrznej. Często jednak jest ono potrzebne i warto wiedzieć jakich narzędzi do tego użyć, aby aplikacja całkiem legalnie (jeśli jej repozytoria przez proxy MS zostaną dopuszczone) mogła z nich korzystać wewnątrz sieci lokalnej, na serwerze Linux.