Настройка Squid прокси-сервера с фильтрацией HTTPS и интеграцией с Active Directory

Статья описывает настройку прокси-сервера Squid на CentOS 7 с следующими возможностями:

  • Фильтрация HTTPS-трафика без подмены сертификата (технология peek-n-splice)
  • Интеграция с Active Directory для аутентификации пользователей
  • Автоматическая настройка прокси на клиентских компьютерах через WPAD
  • Генерация статистики использования

Интересные особенности

  1. Использование технологии peek-n-splice для фильтрации HTTPS без MITM-атаки:

- Позволяет видеть доменные имена в статистике HTTPS-сайтов

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

  1. Интеграция с Active Directory:

- Аутентификация пользователей через Kerberos

- Распределение прав доступа по группам AD

  1. Автоматическая настройка прокси через WPAD:

- Клиенты Windows автоматически получают настройки прокси

- Упрощает администрирование, особенно для мобильных пользователей

  1. Сбор статистики с помощью SARG:

- Генерация ежедневных отчетов

- Веб-интерфейс для просмотра статистики с авторизацией

  1. Настройка SELinux для работы с Squid:

- Использование SELinux в режиме enforcing

- Добавление необходимых правил для работы прокси

Основные этапы настройки

  1. Установка и настройка Squid
  2. Интеграция с Active Directory
  3. Настройка WPAD
  4. Установка и настройка SARG для статистики
  5. Настройка групповых политик в AD

Заключение

Автор отмечает, что данная конфигурация успешно работает с весны 2016 года и хорошо себя зарекомендовала.


Ссылки на ресурсы:

  1. Оригинальная статья на Habr
  2. Squid Cache
  3. SARG - Squid Analysis Report Generator
  4. Web Proxy Auto-Discovery Protocol
  5. Active Directory

Предварительные требования

  • CentOS 8 или Rocky Linux 8 (как преемник CentOS)
  • Доступ к серверу с правами root
  • Доменный контроллер Active Directory (Windows Server 2019 или новее)

Шаг 1: Обновление системы и установка необходимых пакетов

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install squid httpd krb5-workstation msktutil gcc gd gd-devel make wget -y

Шаг 2: Настройка Squid

  1. Создайте резервную копию конфигурационного файла Squid:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

  1. Отредактируйте `/etc/squid/squid.conf`:

sudo nano /etc/squid/squid.conf

  1. Вставьте следующее содержимое (адаптируйте под свою сеть):

#  
http_port 3130
cache_dir ufs /var/spool/squid 100 16 256

# Kerberos 
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -s HTTP/sq.example.ru@EXAMPLE.RU
auth_param negotiate children 10
auth_param negotiate keep_alive on

# ACL   AD
external_acl_type ad_group ttl=60 negative_ttl=60 grace=0 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -p -g

acl ad_full external ad_group Internet-full
acl ad_medium external ad_group Internet-medium
acl ad_low external ad_group Internet-low

#  
http_access allow ad_full
http_access allow ad_medium
http_access allow ad_low
http_access deny all

# SSL Bump 
sslcrtd_program /usr/lib64/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5

acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

Шаг 3: Настройка Kerberos

  1. Создайте файл `/etc/krb5.conf`:

sudo nano /etc/krb5.conf

  1. Добавьте следующее содержимое (замените EXAMPLE.RU на ваш домен):

[libdefaults]
    default_realm = EXAMPLE.RU
    dns_lookup_realm = false
    dns_lookup_kdc = true

[realms]
    EXAMPLE.RU = {
        kdc = dc1.example.ru
        admin_server = dc1.example.ru
    }

[domain_realm]
    .example.ru = EXAMPLE.RU
    example.ru = EXAMPLE.RU

Шаг 4: Интеграция с Active Directory

  1. Присоединение к домену:

sudo msktutil -c -b "CN=COMPUTERS" -s HTTP/sq.example.ru -k /etc/krb5.keytab --computer-name sq-k --upn HTTP/sq.example.ru --server dc1.example.ru --enctypes 28

  1. Настройте автоматическое обновление пароля:

sudo crontab -e

Добавьте строку:

0 */4 * * * /usr/bin/msktutil --auto-update --computer-name sq-k

Шаг 5: Настройка WPAD

  1. Создайте файл `/var/www/html/wpad.dat`:

sudo nano /var/www/html/wpad.dat

  1. Добавьте следующее содержимое:

function FindProxyForURL(url, host) {
    if (isInNet(host, "192.168.0.0", "255.255.0.0") ||
        isInNet(host, "10.0.0.0", "255.0.0.0") ||
        isPlainHostName(host))
        return "DIRECT";

    return "PROXY sq.example.ru:3130";
}

  1. Настройте Apache для отдачи WPAD:

sudo nano /etc/httpd/conf.d/wpad.conf

Добавьте:

<Files wpad.dat>
    ForceType application/x-ns-proxy-autoconfig
</Files>

Шаг 6: Настройка SARG для статистики

  1. Установите SARG:

wget https://sourceforge.net/projects/sarg/files/latest/download -O sarg.tar.gz
tar -xzvf sarg.tar.gz
cd sarg-*
./configure
make
sudo make install

  1. Настройте SARG:

sudo nano /usr/local/etc/sarg.conf

Добавьте:

access_log /var/log/squid/access.log
output_dir /var/www/html/squid-reports
date_format e
overwrite_report yes

  1. Настройте ежедневную генерацию отчетов:

sudo crontab -e

Добавьте:

55 23 * * * /usr/local/bin/sarg -x

Шаг 7: Настройка SELinux

sudo setsebool -P squid_connect_any 1
sudo semanage port -a -t squid_port_t -p tcp 3130

Шаг 8: Запуск и включение служб

sudo systemctl enable --now squid httpd
sudo systemctl restart squid httpd

Шаг 9: Настройка групповых политик в Active Directory

  1. Создайте GPO для настройки прокси
  2. Настройте автоматическое обнаружение прокси:

- User Configuration > Policies > Administrative Templates > Windows Components > Internet Explorer

- Enable "Automatically detect intranet network"

Заключение

Эта конфигурация предоставляет современную настройку Squid с HTTPS-фильтрацией, интеграцией Active Directory и автоматической настройкой клиентов через WPAD. Не забудьте адаптировать все пути, имена доменов и IP-адреса под вашу конкретную среду.

Примечание: Всегда тестируйте конфигурацию в безопасной среде перед развертыванием в production.