Безкоштовний проксі-сервер для підприємства з доменною авторизацією

Безкоштовний проксі-сервер для підприємства з доменною авторизацією

pfSense+Squid з фільтрацією https + Технологія єдиного входу (SSO) з фільтрацією за групами Active Directory

Коротка передісторія

На підприємстві виникла необхідність у впровадженні проксі-сервера з можливістю фільтрації доступу до сайтів (у тому числі https) по групах з AD, щоб користувачі не вводили ніяких додаткових паролів, а адмініструвати можна було з веб-інтерфейсу. Непогана заявочка, чи не так?

Правильним варіантом відповіді було б купити такі рішення як Kerio Control або UserGate, але, як завжди, грошей немає, а потреба є.

Тут то до нас і приходить на допомогу старий добрий Squid, але знову ж таки - де взяти інтернет інтерфейс? SAMS2? Морально застарів. Тут і приходить на допомогу pfSense.

Опис

У цій статті буде описано спосіб налаштування проксі-сервера Squid.
Для авторизації користувачів використовуватиметься Kerberos.
Для фільтрації доменних груп буде використовуватися SquidGuard.

Для моніторингу буде використано Lightsquid, sqstat та внутрішні системи моніторингу pfSense.
Також буде вирішена часта проблема, пов'язана з впровадженням технології єдиного входу (SSO), а саме додатки, які намагаються ходити в інтернет під обліком компасвою системною обліком.

Підготовка до встановлення Squid

За основу буде взято pfSense, Інструкція із встановлення.

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

Дуже важливо!

Перед початком встановлення Squid необхідно налаштувати DNS сервера в pfsense, зробити для нього запис A та PTR запису на нашому DNS сервері та налаштувати NTP так, щоб час не відрізнявся від часу на контролері домену.

А у вашій мережі надати можливість WAN інтерфейсу pfSense ходити в інтернет, а користувачам у локальній мережі підключатися на LAN інтерфейс, у тому числі по порту 7445 та 3128 (у моєму випадку 8080).

Все готово? З доменом зв'язок LDAP для авторизації на pfSense встановлено і час синхронізовано? Чудово. Час приступати до основного процесу.

Встановлення та попереднє налаштування

Squid, SquidGuard та LightSquid встановимо з менеджера пакетів pfSense у розділі «Система/Менеджер пакетів».

Після успішної установки переходимо в «Сервіси/Squid Proxy server/» і в першу чергу у вкладці Local Cache налаштовуємо кешування, я виставив усе по 0, т.к. не бачу особливого сенсу кешувати сайти, з цим і браузери чудово справляються. Після налаштування натискаємо клавішу «Зберегти» внизу екрана і це дасть нам можливість виконувати основні налаштування проксі.

Основні налаштування наводимо до наступного виду:

Безкоштовний проксі-сервер для підприємства з доменною авторизацією

Стандартний порт 3128, але я волію використовувати 8080.

Вибрані параметри у вкладці Proxy Interface визначають, які інтерфейси буде слухати наш проксі сервер. Так як цей міжмережевий екран побудований таким чином, що в інтернет він дивиться WAN інтерфейсом, навіть при тому, що LAN і WAN можуть бути в одній локальній підмережі, рекомендую для проксі використовувати саме LAN.

Лупбек потрібний для роботи sqstat.

Нижче ви знайдете налаштування Transparent (прозорого) проксі, а також SSL Filter, але вони нам не потрібні, наш проксі буде не прозорим, а для фільтрації https ми не будемо займатися заміною сертифіката (адже у нас документообіг, банк-клієнти і тд), а просто подивимося на рукостискання.

На цьому етапі нам необхідно перейти в наш контролер домену, створити в ньому обліковий запис для аутентифікації (можна використовувати і те, що налаштували для аутентифікації на сам pfSense). Тут дуже важливий фактор — якщо ви маєте намір використати шифрування AES128 або AES256 — проставте відповідні галочки у налаштуваннях облікового запису.

Якщо ваш домен є дуже складним лісом з великою кількістю каталогів або ваш домен .local, то МОЖЛИВО, але не точно, вам доведеться використовувати для цього облікового запису простий пароль, баг відомий, але зі складним паролем може просто не працювати, треба перевіряти на конкретному окремому випадку.

Безкоштовний проксі-сервер для підприємства з доменною авторизацією

Після цього формуємо файл ключів для кербероса, на контролері домену відкриваємо командний рядок з правами адміністратора і вводимо:

# ktpass -princ HTTP/[email protected] -mapuser pfsense -pass 3EYldza1sR -crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} -ptype KRB5_NT_PRINCIPAL -out C:keytabsPROXY.keytab

Де вказуємо свій FQDN pfSense, обов'язково дотримуючись регістру, в параметр mapuser вводимо наш доменний обліковий запис та його пароль, а в crypto вибираємо спосіб шифрування, я використовував rc4 для роботи і в полі -out вибираємо куди відправимо наш готовий файл ключів.
Після успішного створення файлу ключів відправимо його на наш pfSense, я використав для цього Far, але також можна зробити цей як командами, так і putty або через веб-інтерфейс pfSense у розділі «Діагностика Командний рядок».

Тепер ми можемо відредагувати створення /etc/krb5.conf

Безкоштовний проксі-сервер для підприємства з доменною авторизацією

де /etc/krb5.keytab - це створений нами файл ключів.

Обов'язково перевірте роботу кербероса за допомогою kinit, якщо не працює – далі немає сенсу читати.

Налаштування автентифікації Squid та списку доступу без автентифікації

Успішно налаштувавши керберос прикрутимо його до нашого Squid`у.

Для цього перейдіть в Сервіси Squid Proxy Server і в основних налаштуваннях опустіться вниз, там знайдемо кнопочку «Розширені налаштування».

У полі Custom Options (Before Auth) введемо:

#Хелперы
auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME -k /usr/local/etc/squid/squid.keytab -t none
auth_param negotiate children 1000
auth_param negotiate keep_alive on
#Списки доступа
acl auth proxy_auth REQUIRED
acl nonauth dstdomain "/etc/squid/nonauth.txt" 
#Разрешения 
http_access allow nonauth 
http_access deny !auth
http_access allow auth

uде auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth - Вибирає необхідний нам хелпер керберос аутентифікації.

Ключ -s зі значенням GSS_C_NO_NAME - Визначає використання будь-якого облікового запису з файлу ключа.

Ключ -k зі значенням /usr/local/etc/squid/squid.keytab - Визначає використовувати саме цей кейтаб файл. У моєму випадку це той самий сформований нами кейтаб файл, який я скопіював у директорію /usr/local/etc/squid/ і перейменував, тому що з тією директорією сквід дружити не хотів, мабуть, прав не вистачало.

Ключ -t зі значенням -t none - відключає циклічні запити до контролера домену, що сильно знижує навантаження на нього, якщо у вас більше 50 користувачів.
На час тесту можна додати ключ -d - тобто діагностика, більше логів буде виводитися.
auth_param negotiate children 1000 — визначає скільки одночасних процесів авторизації може бути запущено
auth_param negotiate keep_alive on - не дає розірвати зв'язок під час опитування ланцюжка авторизації
acl auth proxy_auth REQUIRED — створює і вимагає список контролю доступу, що включає користувачів, які пройшли авторизацію
acl nonauth dstdomain "/etc/squid/nonauth.txt" — повідомляємо сквіду про список доступу nonauth, в якому містяться домени призначення, до яких завжди буде дозволено доступ всім. Сам файл створюємо, а всередину нього вписуємо домени у форматі

.whatsapp.com
.whatsapp.net

Whatsapp не дарма використовується як приклад — він дуже вибагливий до проксі з автентифікацією і не буде працювати, якщо його не дозволити до автентифікації.
http_access allow nonauth - дозволяємо доступ до цього списку всім
http_access deny !auth — забороняємо доступ неавторизованим користувачам до інших сайтів
http_access allow auth - Дозволяємо доступ авторизованим користувачам.
Все, сам сквід у вас налаштований, тепер саме час приступити до фільтрації груп.

Налаштування SquidGuard

Переходимо до Сервісів SquidGuard Proxy Filter.

У LDAP Options вводимо дані нашого облікового запису, який використовується для керберос аутентифікації, але в наступному форматі:

CN=pfsense,OU=service-accounts,DC=domain,DC=local

Якщо є прогалини або латинські символи весь цей запис варто укласти в одинарні або подвійні лапки:

'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"

Далі обов'язково ставимо ці галочки:

Безкоштовний проксі-сервер для підприємства з доменною авторизацією

Щоб відрізати непотрібні DOMAINpfsense Домен.LOCALк яким вся система дуже чутлива.

Тепер переходимо в Group Acl і прив'язуємо наші доменні групи доступу, я використовую прості назви в дусі group_0, group_1 і т.д. до 3, де 3 доступ тільки в білий список, а 0 можна все.

Прив'язуються групи таким чином:

ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0%2cOU=squid%2cOU=service-groups%2cDC=DOMAIN%2cDC=LOCAL))

зберігаємо нашу групу, переходимо в Times, там я створив один проміжок, що означає працювати завжди, тепер переходимо в Target Categories і створюємо списки на свій розсуд, після створення списків повертаємося в наші групи і всередині групи кнопочками вибираємо хто куди може, а хто куди — ні .

LightSquid та sqstat

Якщо в процесі налаштування ми вибрали лупбек в налаштуваннях сквіда і відкрили можливість заходити на 7445 у фаєрволлі як у нашій мережі, так і на самому pfSense, то при переході в діагностику Squid Proxy Reports ми без проблем зможемо відкрити і sqstat і Lighsquid, для останнього потрібно буде там же вигадати логін і пароль, а також є можливість вибрати оформлення.

Завершення

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

Сподіваюся, дана стаття допоможе комусь вирішити досить актуальне для середніх і великих підприємств завдання.

Джерело: habr.com

Додати коментар або відгук