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

Как то раз мы рассматривали настройку прокси 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

Теперь укажем, что наш прокси будет работать в двух режимах (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 — маст хэв!

На этом пока всё. Продолжение следует…

admin

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

Вы можетеоставить отзыв или Обратную ссылку эта запись.
  1. Вячеслав - 3 июля, 2014

    Спасибо! Завтра буду пробовать)))

  2. Константин - 26 марта, 2015

    Не получается настроить керберос. Говорит, что служба сконфигурена неправильно. При запуске kinit говорит: Improper format of Kerberos configuration file

  3. Michael - 6 апреля, 2015

    Несколько непонятно. В дефолтовом smb.conf есть такой комментарий
    # password server = only use this option when the «security = server»

    А в нашем случае security = ads

    # option is set, or if you cannot use DNS to locate a Domain Controller.

    То есть, на контроллерах AD DNS не поднят? Или в каких случаях он не может быть использован?

    # Use «password server = *» to automatically locate Domain Controllers

    А если контроллеров домена более одного (что в принципе — как раз нормально), вышеуказанная строка сработает?

  4. Michael - 6 апреля, 2015

    Да, и ещё. Для того, чтобы wbinfo работало, надо установить ещё пакет samba4-winbind-client, в противном случае не находит команду wbinfo

  5. vovik - 31 августа, 2016

    Добрый день, делал все как у вас написано, при squid -k reconfigure выходит ошибка
    Bungled /etc/squid3/squid.conf line 10: acl Full external nt_group internet_full
    Squid Cache (Version 3.4.8): Terminated abnormally.

  6. Аноним - 1 марта, 2017

    Конфиг не работает!

Нужно войти чтобы оставить комментарий.