Squid с фильтрацией HTTPS без подмены сертификата, интеграция с Active Directory 2012R2 WPAD / Хабр

Содержание
  1. 5 И так, теперь стоит отметить что дано
  2. 2 Описание файла wpad.dat
  3. 1 Упрощенная схема работы WPAD
  4. 2 Чем хороша данная технология
  5. 4 Плюсы и минусы Peek-n-splice
  6. 1 Squid должен быть собран с такими параметрами
  7. 2 Установка необходимых пакетов из официальных репозиториев
  8. 3 Ручная установка Squid и дополнительных пакетов
  9. 4 Установка прав доступа для каталога swap
  10. 7 Настраиваем selinux
  11. 8 генерация swap
  12. 9 Включение демона squid, проверка конфигурационного файла
  13. 1 Конфигурационный файл /etc/krb5.conf
  14. 2 Создание DNS-записи
  15. 3 Варианты интеграции с доменом
  16. 3.1 Интеграция средствами Windows
  17. 3.2 Интеграция средствами Linux
  18. 4 Рекомендуемые права на файл krb5.keytab
  19. 5 Группы доступа AD
  20. 6 Проверка авторизации
  21. 1 Установка и конфигурирование web-сервера apache2
  22. 3 Создание CNAME
  23. 1 Установка SARG из исходников
  24. 2 Конфигурирование SARG
  25. 3 Расписание генерации отчетов при помощи cron
  26. 6 групповые политики
  27. 1 Редактирование GPO
  28. Возможные ошибки
  29. Настройка dhcp и кеширующего dns
  30. Настройка nat и брандмауэра
  31. Настройка прокси-сервера squid3 с поддержкой ssl
  32. Настройка сети

5 И так, теперь стоит отметить что дано

— Хост с Active Directory 2021R2 (метод авторизация пользователей — Kerberos)10.0.0.9

— Хост с CentOS 7 (x64) (он же веб-сервер для отдачи wpad.dat, он же прокси-сервер) 10.0.0.10

— Тестовый хост с ОС Windows для проверки работы 10.0.0.11

«Поехали» Гагарин Ю.А.

2 Описание файла wpad.dat


По дефолту в каталоге /var/www/html/wpad.dat файл отдается всем без дополнительных настроек apache2, а это как раз необходимо для корректного взаимодействия с клиентскими машинами на ОС Windows.

Строчки

if (isInNet( host, "192.168.0.0", "255.255.255.0") ||
isInNet( host, "10.0.0.0", "255.255.255.0") ||

1 Упрощенная схема работы WPAD

— Клиент на ОС Windows обращается к DNS-серверу с запросом на хост

2 Чем хороша данная технология


Плюсы:

— нет необходимости через GPO прописывать всем клиентам адрес-прокси— Мобильность сотрудников (доступ к интернету вне офиса)— Чтобы отключить использование данной технологии, достаточно отключить в «Свойствах браузера» — «Автоматическое получение настроек»

Минусы:

— «Автоматическое получение настроек» можно отключить любому пользователю, поэтому данную функцию лучше оставить включенной и запретить ее изменение через GPO

4 Плюсы и минусы Peek-n-splice


Плюсы:

1 Squid должен быть собран с такими параметрами

squid -v

$ squid -v
Squid Cache: Version 3.5.16
Service Name: squid
configure options: ‘–build=x86_64-redhat-linux-gnu’ ‘–host=x86_64-redhat-linux-gnu’ ‘–program-prefix=’ ‘–prefix=/usr’ ‘–exec-prefix=/usr’ ‘–bindir=/usr/bin’ ‘–sbindir=/usr/sbin’ ‘–sysconfdir=/etc’ ‘–datadir=/usr/share’ ‘–includedir=/usr/include’ ‘–libdir=/usr/lib64’ ‘–libexecdir=/usr/libexec’ ‘–sharedstatedir=/var/lib’ ‘–mandir=/usr/share/man’ ‘–infodir=/usr/share/info’ ‘–verbose’ ‘–exec_prefix=/usr’ ‘–libexecdir=/usr/lib64/squid’ ‘–localstatedir=/var’ ‘–datadir=/usr/share/squid’ ‘–sysconfdir=/etc/squid’ ‘–with-logdir=$(localstatedir)/log/squid’ ‘–with-pidfile=$(localstatedir)/run/squid.pid’ ‘–disable-dependency-tracking’ ‘–enable-follow-x-forwarded-for’ ‘–enable-auth’ ‘–enable-auth-basic=DB,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,getpwnam,fake’ ‘–enable-auth-ntlm=smb_lm,fake’ ‘–enable-auth-digest=file,LDAP,eDirectory’ ‘–enable-auth-negotiate=kerberos,wrapper’ ‘–enable-external-acl-helpers=wbinfo_group,kerberos_ldap_group,LDAP_group,delayer,file_userip,SQL_session,unix_group,session,time_quota’ ‘–enable-cache-digests’ ‘–enable-cachemgr-hostname=localhost’ ‘–enable-delay-pools’ ‘–enable-epoll’ ‘–enable-icap-client’ ‘–enable-ident-lookups’ ‘–enable-linux-netfilter’ ‘–enable-removal-policies=heap,lru’ ‘–enable-snmp’ ‘–enable-storeio=aufs,diskd,ufs,rock’ ‘–enable-wccpv2’ ‘–enable-esi’ ‘–enable-ssl-crtd’ ‘–enable-icmp’ ‘–with-aio’ ‘–with-default-user=squid’ ‘–with-filedescriptors=16384’ ‘–with-dl’ ‘–with-openssl’ ‘–with-pthreads’ ‘–with-included-ltdl’ ‘–disable-arch-native’ ‘–enable-ecap’ ‘–without-nettle’ ‘build_alias=x86_64-redhat-linux-gnu’ ‘host_alias=x86_64-redhat-linux-gnu’ ‘CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic’ ‘LDFLAGS=-Wl,-z,relro ‘ ‘CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC’ ‘PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig’ —enable-ltdl-convenience

Про сертификаты:  Сертификация Эмали пф-115 в ЕСК

2 Установка необходимых пакетов из официальных репозиториев

Стоит отметить, что для установки кальмара нужны некоторые зависимости. К сожалению, у CentOS довольно скудные официальные репозитории, поэтому некоторые пакеты надо качать с неофициальных. Установка необходимых пакетов из оф.репозиториев:

# yum install -y libtool-ltdl perl-DBI perl-Digest-MD5 cyrus-sasl-gssapi krb5-workstation

3 Ручная установка Squid и дополнительных пакетов

# rmp -Uvh squid-3.5.8-4.el7.centos.x86_64.rpm libecap-1.0.0-3.el7.centos.x86_64.rpm squid-helpers-3.5.8-4.el7.centos.x86_64.rpm perl-Crypt-OpenSSL-X509-1.803-4.el7.x86_64.rpm

Если что-то не так, в терминале отобразится чего не хватает.

4 Установка прав доступа для каталога swap

# chown squid:squid /var/spool/squid

7 Настраиваем selinux

В файле

/etc/selinux/config

должно быть значение:

SELINUX=enforcing


Устанавливаем пакет для работы с selinux:

# yum install policycoreutils-python

Добавляем правила selinux

Разрешаем подключения к кальмару:

# setsebool -P squid_connect_any on

Разрешаем kerberos:

# setsebool -P allow_kerberos  on


Разрешаем подключения к кальмару на 3130 порту:

# semanage port -a -t squid_port_t -p tcp 3130

После изменения параметров selinux, необходимо перезагрузить систему для их применения.

# reboot

8 генерация swap

# squid -z

9 Включение демона squid, проверка конфигурационного файла

# systemctl enable squid
# squid -k parse

Варнингов и эрроров не должно быть. Если же что-то есть — необходимо проверить настройки.

1 Конфигурационный файл /etc/krb5.conf

Конфигурационный файл

/etc/krb5.conf

необходимо привести к следующему виду:

2 Создание DNS-записи


Всем отлично известно, что Active Directory тесно завязан с DNS, и для корректной работы авторизации, необходимо создать узел (A или ААА) c указание имени хоста и его ip-адреса (Получается запись

3 Варианты интеграции с доменом

И так,

есть два стула

варианта интеграции с доменом. Первый вариант — средствами Windows (

ktpass

), второй вариант — средствами Linux (

Msktutil

). Windows вариант хорош тем, что можно отключить срок действия пароля для пользователя

squid

. Версия Linux хороша тем, что можно вводить в домен через создание учетной записи компьютера.

3.1 Интеграция средствами Windows


Создаем пользователя в AD, например

squid

Теперь генерируем

krb5.keytab

. В командной строке на контроллере домена с правами администратора необходимо выполнить данную команду:

3.2 Интеграция средствами Linux

В архиве со сквидом и зависимостями также приложен msktutil, устанавливаем его:

# rpm -Uhv msktutil-0.5.1-2.el7.x86_64.rpm

Теперь выполняем следующую команду:

4 Рекомендуемые права на файл krb5.keytab

После перемещения

krb5.keytab

, рекомендуется понизить права доступа к файлу

# chown squid:squid /etc/krb5.keytab && chmod 644 /etc/krb5.keytab

5 Группы доступа AD

В ActiveDirectory в

OU

6 Проверка авторизации


Проверка авторизации в Active Directory при помощи файла

/etc/krb5.keytab

1 Установка и конфигурирование web-сервера apache2

Установка web-сервера:

3 Создание CNAME

На DNS-сервере Active Directory необходимо создать

Про сертификаты:  Срок давности исполнительного листа и срок осуществления исполнительного производства, их особенности

cnamewpad

1 Установка SARG из исходников


Если не был установлен gcc ранее, сейчас самое время:

2 Конфигурирование SARG

Стандартный файл конфигурации

/usr/local/etc/sarg.conf

лучше забекапить:

# mv /usr/local/etc/sarg.conf /usr/local/etc/sarg.conf.default


Теперь создаем файл

sarg.conf

со следующим содержанием:

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

3 Расписание генерации отчетов при помощи cron

# crontab -e

Добавляем строчку:

55 23 * * * /usr/local/bin/sarg -xd day-0


Данная строчка указывает, что отчеты будут генерироваться каждый день и за текущий день в 23:55

6 групповые политики

Здесь все неоднозначно и может зависит, от каких-то особенностей. В текущей задаче было разумным решением исключить возможность установки прокси-сервера пользователя, или же отключения «Автоматического определения параметров».

1 Редактирование GPO

Для запрета ввода прокси-сервера или изменения настроек по автоматическому определению параметров, можно воспользоваться групповой политикой. Создаем и связываем групповую политику с

OU

например,

office

Редактируем групповую политику:

Пользователь → Политики → Административные шаблоны → Компоненты Windows → Internet Explorer

В данном каталоге найти параметры и перевести в статус

«Включено»«Запретить изменение параметров прокси»
«Отключить изменение параметров автоматической»

В заключение сказать могу вот что, данная конфигурация успешно работает по настоящее время с весны 2021-го, и отлично себя зарекомендовала. На все вопросы буду рад ответить.

UPD №1: 12.11.161 Были убраны из конфига сквида лишние строки портов 3128 и 3129.2 включил selinux и добавил правила.3 Была убрана генерация сертификата из мануала(без него работает)4 Мелкие исправленияUPD №2: 20.11.

Возможные ошибки

На некоторых сайтах будут возникать ошибки связанные с невозможностью проверки корневого сертификата. В данном случае необходимо либо добавить данные корневые сертификаты в файл cabundle.file либо отключить проверку сертификатов в squid.conf (ЭТО НЕБЕЗОПАСНО!):

sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

Настройка dhcp и кеширующего dns

В наших решениях эту роль обычно исполняет dnsmasq, не будем отступать от традиций и в этот раз. Установим данный пакет:

apt install dnsmasq

Для настройки откроем файл /etc/dnsmasq.conf и внесем некоторые изменения. Прежде всего ограничим адреса, которые будут слушать наши службы:

listen-address=127.0.0.1, 192.168.187.1

Затем зададим пул для выдачи адресов через DHCP и срок аренды:

dhcp-range=192.168.187.120,192.168.187.199,255.255.255.0,12h

Для одноранговой сети будет неплохо указать DNS-суффикс, чтобы избежать сложностей с разрешением плоских имен:

local=/interface31.lab/

Перезапустим службу:

service dnsmasq restart

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

squid-acl-ssl-002.pngПросмотреть список выданных в аренду адресов можно командой:

cat /var/lib/misc/dnsmasq.leases

Настройка nat и брандмауэра

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

Про сертификаты:  Диагностические карты в электронном виде теперь оформляются официально — Российская газета

Откроем созданный нами файл /etc/nat и внесем в него следующие строки:

Настройка прокси-сервера squid3 с поддержкой ssl

К сожалению, в репозиториях нет пакета squid с поддержкой SSL, поэтому потребуется собрать его самому, как это сделать мы рассказывали в статье Сборка Squid 3.5 с поддержкой SSL из исходных кодов для Debian / Ubuntu, поэтому будем считать, что вы уже выполнили эту процедуру, либо используете уже собранные нами пакеты.

Будем считать, что собранные пакеты squid скачаны и располагаются в отдельной директории. Перейдем в нее и установим пакеты командой:

dpkg -i squid*.deb

В процессе установки вы получите сообщения о неудовлетворенных зависимостях, поэтому разрешим их командой:

apt install -f 

Чтобы наши пакеты не были перезаписаны пакетами из репозитория при обновлении их следует зафиксировать:

apt-mark hold squid
apt-mark hold squid-common
apt-mark hold squidclient

Если у вас был уже установлен squid, то просто удалите его и установите наши пакеты, все настройки при этом будут подхвачены автоматически, хотя на всякий случай сохраните куда-нибудь файл конфигурации:

cp /etc/squid/squid.conf /root/squid.conf.back

Установив пакеты с поддержкой SSL, перейдем к конфигурированию нашего прокси. Для этого откроем файл /etc/squid/squid.conf, все указанные ниже опции надо либо найти и раскомментировать, приведя к указанному виду, либо создать.

Следующий блок, задающий стандартные ACL-элементы присутствует по умолчанию:

Настройка сети

В данном примере у нас будет статическая настройка внешнего сетевого интерфейса, если же вы используете динамические подключение, такие как PPPoE или PPTP, то для их настройки обратитесь к соответствующим инструкциям (по ссылкам).

Для настройки сети откроем файл /etc/network/interfaces:

nano /etc/network/interfaces

И внесем в него следующие изменения (названия интерфейсов и адреса указаны только для примера):

auto ens33
iface ens33 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-nameservers 172.18.0.1
auto ens34
iface ens34 inet static
address 192.168.187.1
netmask 255.255.255.0
post-up /etc/nat

Если внешний интерфейс получает настройки по DHCP, то используйте следующие настройки:

auto ens33
allow-hotplug ens33
iface ens33 inet dhcp

Сразу создадим файл для хранения настроек брандмауэра и сделаем его исполняемым:

touch /etc/nat
chmod x /etc/nat

Перезапустим сеть:

service networking restart

После чего у вас на сервере должен появиться интернет, сразу следует обновить систему и установить необходимый минимум утилит для администрирования:

apt update
apt upgrade
apt install mc ssh

Оцените статью
Мой сертификат
Добавить комментарий