Прокси Squid с авторизацией в домене Active Directory

Nov 20, 2016 21:48


Как то раз мы рассматривали настройку прокси squid для начинающих в среде Windows. Потом мы настраивали squid в «роутере из коробки» - pfSense. А сегодня мы покажем как создать мощный прокси сервер в Linux Debian. Зачем? Дело в том, что даже в pfSense мы не можем раскрыть всю мощь squid без бубна. Поэтому, если перед вами стоит задача сделать бескомпромиссный прокси сервер - Linux единственный вариант.



Что мы будем делать? Ну… например заставим работать Squid сразу в двух режимах: прозрачном (transparent) и обычном. Это нужно на тот случай, если в вашей организации есть отдельная гостевая сеть для приходящих людей и вы хотите фильтровать трафик, но при этом лишние логины и пароли для каждого гостя создавать/вести/выдавать нет никакого желания. При этом все сотрудники будут правильно учитываться, потому что мы настроим взаимодействие прокcи сервера с Active Directory. В заключении еще прикрутим анализатор логов, чтобы всегда знать кто и как использует интернет.

Первое что нам понадобится - это установленный Debian с настроенной сетью. Для будущего прокси-сервера на роутере должен быть открыт доступ в интернет. Как вариант, можно совместить роутер и прокси-сервер в одной машине, но это уже другая история, которую мы тоже как нибудь затронем. А пока на всех этих мелочах мы останавливаться не будем, просто приведем ссылки на нужные обзоры:

1. Установка Linux Debian

2. Настройка сети в Linux Debian

Присоединение к Active Directory

Нам нужно присоединить нашу Linux машину к домену Active Directory. Для этого нужно выполнить ряд подготовительных действий.

Сначала нам нужно научить наш будущий прокси сервер синхронизировать время с домен-контроллером. Устанавливаем NTP командой apt-get install ntp

После этого вносим некоторые коррективы в файл /etc/ntp.conf добавляем строку server IP_адрес_домен-контроллера. Остальные строки, начинающиеся со слова server лучше закоментировать, поставив символ # перед ними. В итоге должно получиться вот так:




Затем правим файл /etc/resolv.conf - здесь указываются адреса DNS-серверов. Для примера мой домен Active Directory будет называться mydomain.local, а домен-контроллер просто dc. По философии MS домен-контроллер является DNSом. Поэтому в первой строке указываем сам домен, во второй строке IP домен-контроллера:




После этих манипуляций лучше всего перезагрузиться.

Для проверки правильности наших действий даем команду ping dc. dc в данном случае это именно имя домен-контроллера, а не его адрес. Если все сделали правильно, то имя должно автоматически преобразоваться в адрес и пинги побегут…

Теперь нужно установить несколько пакетов для корректного взаимодействия с Active Directory. Выполняем команду apt-get install samba winbind krb5-admin-server krb5-clients krb5-config krb5-doc krb5-kdc krb5-user

После установки опять правим конфиг-файлы. Начнем с самбы.

Открываем файл /etc/samba/smb.conf, стираем из него все нафиг и пишем заново следующие строки:

[global]

workgroup = MYDOMAIN

netbios name = PROXY

realm = MYDOMAIN.LOCAL

server string =

security = ads

encrypt passwords = true

password server = dc.mydomain.local

winbind enum users = yes

winbind enum groups = yes

winbind use default domain = yse

winbind uid = 10000-20000

winbind gid = 10000-20000

Если вы внимательно посмотрели этот листинг, то заметили, что в строке server string после знака равенства стоит пробел - это не случайно. Добавляйте там пробел, иначе самба сама будет заполнять этот параметр на свое усмотрение, что не всегда хорошо.

Перезагружаемся.

Правим следующий файл /etc/krb5.conf В конечном итоге он должен выглядеть как показано на скриншоте ниже. Вместо mydomain.local и dc подставляете свои названия. Обратите внимание, что в разных частях файла эти названия написаны в разном регистре - это очень важно!




Перезагружаемся.

Выполняем команду kinit admin где вместо admin указываем логин администратора домена. Нас должны будут спросить пароль этого админа.

Теперь выполняем команду net ads join -U admin где вместо admin пишем логин администратора домена. После выполнения этой команды может появиться ошибка DNS сервера. Смело можно проигнорировать.

Еще выполним команды wbinfo -p и wbinfo -t

Обе команды должны завершиться успешно. Если так оно и получилось, то не поленитесь перезагрузить комп прокси-сервера.

Важное замечание: с описанными выше командами просто так лучше не играться. При подготовке этого обзора я от нефига делать выполнил эти команды на своем боевом прокси сервере. Сами команды выполнились успешно, но прокси после этого перестал воспринимать доменных пользователей. Помогла только перезагрузка машины.

Устанавливаем squid командой apt-get install squid

Настройка squid

Открываем файл /etc/squid/squid.conf

Можно стереть там все, мы напишем заново только нужные нам вещи.

Затем добавляем вот такие строки (собственно благодаря им squid обращается к Active Directory):

auth_param ntlm program /usr/bin/ntlm_auth -helper-protocol=squid-2.5-ntlmssp

auth_param ntlm children 5

external_acl_type nt_group %LOGIN /usr/lib/squid3/ext_wbinfo_group_acl
authenticate_ttl 10 minutes

Теперь укажем, что наш прокси будет работать в двух режимах (192.168.17.6 - IP-адрес прокси):

http_port 192.168.17.6:3128

http_port 192.168.17.6:3127 transparent

В Active Directory можно сделать несколько уровней доступа к интернету для разных сотрудников. Для этого на домен-контроллере создайте к примеру 3 группы. Одну назовем Internet_Full, другую Internet_Medium, третью Internet_Low. Первая группа будет иметь доступ куда угодно без всяких ограничений, во вторую группу можно добавить всех пользователей, они будут иметь доступ куда угодно за исключением черного списка сайтов. Третья группа для всяких неувязков, им будет доступ только на сайты из белого списка.

Сначала сделаем ссылки на списки белых и черных ресурсов (это будут отдельные файлы, которые мы создадим сами)

acl white_list url_regex -i «/etc/squid/white_list»

acl black_list url_regex -i «/etc/squid/black_list»

в конфиге пропишем ссылки на эти группы:

acl Full external nt_group Internet_Full

acl Medium external nt_group Internet_Medium

acl Low external nt_group Internet_Low

Далее пропишем сети и гостей (в моем примере сегмент гостевой сети имеет адресацию 192.168.18.0/24):

acl all src 0.0.0.0/0.0.0.0

acl guests src 192.168.18.0/255.255.255.0

Делаем проверку сотркдников через домен обязательной:

acl nt_group proxy_auth REQUIRED

Чтобы наши гости не съели всю пропускную способность интернет-канала надо «зарезать» их по скорости. Для этого создается «пул задержек» в терминологии прокси-сервера. Этому пулу назначается ограничение скорости и к кому это дело применяется. В итоге мы напишем такие строки:

delay_pools 1

delay_class 1 1

delay_parameters 1 128000/128000

delay_access 1 allow guests

В delay_parameters указывается номер нашего пула и ограничение скорости на хводящий и исходящий траффик через дробь в байтах/сек. В моем примере для гостей получится скорость 1 Мбит/с.

Теперь пишем сами правила доступа.

Для гостевой сети доступ без ограничений:

http_access allow guests

для доменных групп:

http_access allow Low white_list

http_access deny Low deny

http_access deny Medium black_list

http_access allow Medium

http_access allow Full

Теперь добавим несколько строк по логированию доступа в интернет (это нам понадобится чуть позже):

access_log /var/log/squid/access.log

logfile_rotate 100

Сохраняем этот конфиг, про тонкую настройку и некоторые другие моменты мы расскажем в отдельном обзоре.

Создайте файлы /etc/squid/white_list и /etc/squid/black_list

В этих файлах в столбик можно просто писать названия сайтов. В файл черного списка - плохие сайты, в белый - хорошие

Перезагружаемся.

Для того чтобы все гости ходили тоже через прокси-сервер, на роутере необходимо «завернуть» гостевой трафик. В случае, если у вас роутер на базе linux, то это делается простой командой  iptables -t nat -A PREROUTING -s 192.168.18.0/24 -p tcp -dport 80 -j DNAT -to 192.168.17.6:3127

Если вы сквид устанавливали прямо на роутер, то еще проще:

iptables -t nat -A PREROUTING -s 192.168.18.0/24 -p tcp -dport 80 -j REDIRECT -to-port 3127

С вероятностью 99% ваш итоговый конфигурационный файл будет отличаться от нашего примера, вам захочется что-то изменить, добавить или удалить. Так вот, есть одна замечательная консольная команда, которая пишется так: squid -k reconfigure Работает она как кнопка «Применить» после того как вы внесли изменения в конфиг.

Анализ логов

Для анализа доступа в интернет нам нужно установить apache и lightsquid. Делается это простой командой apt-get install apache2 lightsquid

Для просмотра статистики нужно просто через браузер зайти на адрес прокси-сервера. В нашем примере вот так:

http://192.168.17.6/lightsquid

Картина будет следующая:




По умолчанию статистика обновляется раз в пять минут, что в принципе достаточно. Всех пользователей можно разбить на группы дабы облегчить восприятие. Можно узнать кто когда и куда ходил. В целом если ставите сквид, то анализатор логов lightsquid - маст хэв!

разные опции
https://www.opennet.ru/base/net/squid_conf.txt.html
http://libreportal.net/advice/Squid-NCSA.html
http_port 13001 #порт, к которому клиенты будут подключаться

icp_port 0 #это номер порта, который SQUID будет использовать для отправки и приёма ICP запросов к соседским кэшам и от них. но поскольку соседей нет, отключаем, повышаем, хоть на очень маленькую долю, но всё таки производительность

cache_mem 100 MB #кол-во оперативной памяти для SQUID. НО! SQUID использует память для нескольких видов данных, а не только для кэшированных объектов, поэтому, если SQUID’у понадобится больше, он возьмёт больше! (читаем FAQ от разработчиков)

maximum_object_size 8192 KB #максимальный размер объекта, который будет закеширован и сохранён на диск
minimum_object_size 4 KB # минимальный размер объекта, который будет закеширован и сохранён на диск

cache_dir ufs /tmp/squid3-cache 5120 16 256 # 5120 мегабайт под хранилище для кеша, с 16 каталогами первого уровня и 256 каталогами второго уровня для каждого каталога первого уровня (рекомендую вам использовать формат кэша ufs, это стандартный формат для SQUID. если необходимо использовать другой формат, то SQUID нужно собирать из исходников, с дополнительными параметрами для компиляции)

cache_swap_high 98 # колв-во в процентах, после которого SQUID начнёт освобождать кэш
cache_swap_low 90 # кол-во в процентах, после которого SQUID закончит удаление файлов из кэша

access_log /var/log/squid3/access.log #один из важных файлов, в который записываются все события (время, объект, кем и от куда скачан, взят из кэша или напрямую)

cache_log none #логи о том, как используется наш кэш. Анализировать его обычно ненужно, поэтому выключаем, экономим процессорное время
cache_store_log none #какие объекты у нас хранятся в кеша, как долго и как часто их используют. опять же, экономим наше процессорное время
emulate_httpd_log off #отключаем эмуляцию ведения логов httpd, SQUID по умолчанию, использует свой родной формат

logfile_rotate 12 #это кол-во ротаций логов SQUID’а, после которого, старые логии будут удаляться. здесь указано кол-во не во времени, а в кол-ве запрошенных ротаций. т.е. если вы в cron сделаете выполнение команды squid -k rotate раз в месяц, то у вас будут логии лежать за последние 12 месяцев, а те, кто старше, будут удаляться.

error_directory /usr/share/squid3/errors/Russian-1251 #Фирменные страницы SQUID с ошибками показываем юзерам по русски
positive_dns_ttl 5 hours #жизнь успешных dns запросов
negative_dns_ttl 10 minutes #жизнь ошибочных dns запросов

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users #используем метод аутентификации NCSA, данные о пользователях брать в файле users

auth_param basic children 15 #кол-во процессов, которые занимаются аутентификацией пользователей. т.е. если 16 человек одновременно откроют браузеры, одновременно введут имя и пароли и запросят авторизации, то последний из них получит ошибку, а после того, как SQUID обработает 15 пользователей и 16й пользователь повторит попытку, то тоже авторизируется.

authenticate_ttl 10 hour #сколько часов мы помним введенный пароль. т.е. если пользователь открыл браузер и ввёл пароль, то через 10 часов SQUID ещё раз попросит авторизацию.

auth_param basic realm Web-proxy #то, что будет написано в шапке окна авторизации браузера
acl god proxy_auth src "/etc/squid3/god" #имена пользователей, которые находятся в данном файле являются богами и ограничения на них не действуют
acl users proxy_auth REQUIRED #кто не попал к богам, попадают в юзеры
acl speed url_regex "/etc/squid3/speed-url" #файл, в котором адреса сайтов, скорость для которых будем резать
acl all-ports port 80 443 #список разрешённых портов
acl connect method CONNECT #разрешаем устанавливать соединение CONNECT (для асек и агентов)
acl bad proxy_auth src "/etc/squid/speed-url"

#описываем пулы. В первый пул входят все пользователи, кроме богов (god), второй разрешает богам пользоваться интернетом без ограничений

delay_pools 2

delay_class 1 2
delay_access 1 deny god
delay_access 1 allow speed
delay_parameters 1 1000/1000 1000/1000

delay_class 2 2
delay_access 2 allow users
delay_access 2 deny all
delay_parameters 2 -1/-1 -1/-1

http_access allow users all-ports
http_access allow god all-ports
http_access deny all

PS у автора косяк с конфигом, работоспособный тут


http://macrodmin.ru/2012/07/proksi-squid-s-avtorizaciej-v-domene-active-directory
http://www.k-max.name/linux/squid-proxy-v-linux/
http://www.k-max.name/linux/squid-auth-kerberos-ldap-grupp-active-directory/

https://ru.bmstu.wiki/Squid
Установка Squid в Ubuntu 16.04
SQUID и NTLM-авторизация через Active Directory
CentOS 6 Squid Kerberos LDAP Active Directory Windows Server 2008 R2
Авторизация на SQUID через Active Directory

https://serveradmin.ru/nastroyka-proksi-servera-na-centos-7-squid-ad-sams2/ (ввод в домен)
https://docs.diladele.com/administrator_guide_6_4/active_directory/index.html

РЕД ОС Настройка автоматической авторизации доменных пользователей IPA в squid
Справка Kaspersky Настройка интеграции сервиса Squid с Active Directory
Настройка прокси сервера на CentOS 7 (squid+AD+sams2)
squid.conf по-русски

https://3proxy.ru/documents/
Настройка pfSense в качестве корпоративного Прокси Сервера
Настройка шлюза на базе Pfsense. Часть 1

config, права, windows, www, browser, linux, скрипты, работа, безопасность, squid, proxy, ad, сисадм

Previous post Next post
Up