Squid С Https-Фильтрацией Без Подмены Сертификата, Интеграция С Active Directory 2012R2 + Wpad

Данная инструкция написана в связи с производственной необходимостью контролировать трафик (http и https) пользователей, а также распределять доступ по белым и черным спискам.

За основу были взяты следующие статьи: этот И Вот этот , в котором использовалась технология просмотр и сращивание .

В этих статьях конфигурация предполагает использование хоста со squid в качестве шлюза; после доработки конфига мы имеем полноценный прокси-сервер с возможностью раздавать права доступа группам из Active Directory. По завершению настройки встал вопрос о передаче настроек прокси-сервера пользователям.

Ввиду того, что в офисе ноутбуки часто забирают домой, вся затея зашла в тупик.

Изначально рассматривался вариант с выдачей настроек прокси-сервера по DHCP, но он не самый лучший, так как офисы находятся в разных подсетях и имеют разное оборудование.

WPAD стал выходом из этой ситуации.

Кратко об этой технологии можно сказать так: клиентские машины на ОС Windows ищут хост с именем wpad.example.ru (вплоть до доменов третьего уровня), чтобы запросить файл настроек для работы в сети.

Исходя из этого принципа, нужно поднять веб-сервер, который бы просто обслуживал файл wpad.dat. Можно поднять веб-сервер на хосте с прокси-сервером (что и было сделано), и создать имя wpad на прокси-сервер.

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

По некоторым консервативным соображениям было решено выбрать SARG. Он прост в настройке и имеет вполне приемлемую статистику для офиса до 100 сотрудников.

Содержание



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

— Клиент на ОС Windows обращается к DNS-серверу с запросом к хосту wpad.example.ru , а соответствующая запись имени DNS-сервера указывает, куда идти.

Далее клиент обращается к wpad.example.ru с запросом файла настроек.

Получив его, он начинает действовать согласно инструкциям в нем.



1.2 Чем хороша эта технология

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

1.3 Squid Peek-n-splice – как это работает

Сотрудник пытается зайти на сайт по https через прокси.

При установке зашифрованного соединения происходит «привет», который отправляется в открытом виде, прокси-сервер перехватывает его, и в зависимости от конфигурации squid разрешает или запрещает соединение.

Те.

перехватил, чтобы увидеть «приветствие», разрешил или разорвал соединение.



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

Плюсы: — Это не MITM-атака, и проблем с клиентами банка не будет — Отображение доменных имен в статистике сайтов, запрошенных по https Минусы: — К сожалению, невозможно полностью просмотреть, какая интернет-страница была открыта, как при MITM-атаке.

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

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

— Хост с Active Directory 2012R2 (метод авторизации пользователя — Kerberos) 10.0.0.9 — Хост с CentOS 7 (x64) (он же веб-сервер для отправки wpad.dat, он же прокси-сервер) 10.0.0.10 — Тестовый хост с ОС Windows для проверки работы 10.0.0.11
«Поехали» Гагарин Ю.

А.



2 Настройка операционной системы и установка Squid

Описывать процесс установки CentOS нет смысла.

Итак, давайте иметь в виду, что у нас только что установленная CentOS 7 x64. Итак, чтобы Squid одинаково хорошо работал с http и https трафиком, вам необходимо следующее:

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

кальмар -v $кальмар -v Кэш кальмара: версия 3.5.16 Имя службы: кальмар параметры настройки: '--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 -dependent-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 Или вы можете скачать архив с собранным кальмаром и его зависимостями.



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

Стоит отметить, что для установки squid требуются некоторые зависимости.

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

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

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

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



2.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

Если что-то не так, терминал покажет, чего не хватает.

2.4 Установка разрешений для каталога подкачки



# chown squid:squid /var/spool/squid



2.5 файл конфигурации /etc/squid/squid.conf

squid.conf ###согласование Kerberos auth_param программа согласования /usr/lib64/squid/negotiate_kerberos_auth -s HTTP/[email protected] auth_param согласовать детей 60 auth_param согласовать Keep_alive выключен external_acl_type inet_medium ttl=300 negate_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected] external_acl_type inet_full ttl=300 отрицательный_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected] external_acl_type inet_low ttl=300 отрицательный_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected] источник локальной сети acl 10.0.0.0/24 источник локальной сети ACL 192.168.0.0/24 acl my_full внешний inet_full acl my_medium внешний inet_medium acl my_low внешний inet_low acl auth proxy_auth ОБЯЗАТЕЛЬНО # в дополнение к стандартному 443, для серебряного бизнеса онлайн вам понадобятся дополнительные.

порт 9443 acl SSL_ports порт 443 9443 acl Safe_ports порт 80 # http acl Safe_ports порт 21 # ftp acl Safe_ports порт 443 # https acl Safe_ports порт 70 # gopher acl Safe_ports порт 210 # wais acl Safe_ports порт 1025-65535 # незарегистрированные порты acl Safe_ports порт 280 # http-mgmt acl Safe_ports порт 488 # gss-http acl Safe_ports порт 591 # создатель файлов acl Safe_ports порт 777 # multiling http метод acl CONNECT CONNECT #В данной конфигурации белый список - это список разрешенных сайтов для группы пользователей [email protected] (доступ только к тем сайтам, которые есть в whitelist.txt) #Ablock_http.txt - список заблокированных сайтов для группы [email protected] (доступны все сайты, кроме тех, что находятся в Blocked_http.txt) acl white_list dstdomain "/etc/squid/whitelist.txt" acl black_list dstdomain "/etc/squid/blocked_http.txt" DNS_nameservers 10.0.0.9 # правило доступа http_access Deny !Safe_ports http_access Deny CONNECT !SSL_ports http_access разрешить диспетчер локального хоста http_access менеджер запрета доступа http_access запретить!auth http_access запретить мой_средний черный_список http_access разрешить my_medium http_access разрешить мой_низкий белый_список http_access запретить my_low все http_access разрешить my_full # Разрешить локальный хост http_access разрешить локальный хост # Запрещаем все остальное http_access запретить все #Непрозрачный порт, через который клиентские хосты взаимодействуют с прокси-сервером http_port 10.0.0.10:3130 опции=NO_SSLv3:NO_SSLv2 Always_direct разрешить все sslproxy_cert_error разрешить все sslproxy_flags DONT_VERIFY_PEER #Эта опция необходима для корректной работы функции «peek-n-splice».

Сам файлblock_https.txt ни на что не влияет, но и пустым он быть не должен.

Магия.

# acl заблокировал SSL::server_name "/etc/squid/blocked_https.txt" acl шаг1 at_step SslBump1 ssl_bump просмотр шаг 1 #прерываем соединение, если клиент обращается к запрещенному ресурсу завершение ssl_bump заблокировано ssl_bump соединить все coredump_dir /var/spool/squid обновить_паттерн ^ftp: 1440 20% 10080 обновить_паттерн ^гофер: 1440 0% 1440 обновить_шаблон -i (/cgi-bin/|\?) 0 0% 0 обновить_шаблон.

0 20% 4320 cache_dir aufs /var/spool/squid 20000 49 256 max_object_size 61440 КБ min_object_size 3 КБ #httpd_suppress_version_string включен #visible_hostname ПРОКСИСЕРВЕР кэш_своп_low 90 cache_swap_high 95 max_object_size_in_memory 512 КБ Memory_replacement_policy лру logfile_rotate 4

2.6 Сначала необходимо предоставить файл /etc/хосты к этому контенту



127.0.0.1 localohost 10.0.0.10 sq.example.ru sq



2.7 Настройка Селинукса

В файле /etc/селинукс/конфигурация должно быть значение:

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



2.8 генерация подкачки



# squid -z



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



# systemctl enable squid # squid -k parse

Никаких предупреждений и ошибок быть не должно.

Если что-то есть, нужно проверить настройки.



2.10 Разрешить переадресацию трафика



# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Примените настройку «на лету»:

# sysctl -p



3 Интеграция с контроллером домена Active Directory 2012R2

Интеграция с контроллером домена необходима, чтобы пользователи домена могли проходить аутентификацию на прокси-сервере с использованием протокола Kerberos. Самое разумное решение — оставить только Kerberos, поскольку этот метод наиболее безопасный, авторизация происходит автоматически.

Что касается клиентских машин, находящихся вне домена, то и здесь проблем нет; логин и пароль можно ввести вручную во всплывающем окне авторизации.

Проверено, работает.

3.1 Файл конфигурации /etc/krb5.conf

Конфигурационный файл /etc/krb5.conf необходимо привести к следующему виду: krb5.conf [libdefaults] default_realm = EXAMPLE.RU Ticket_lifetime = 24 часа default_keytab_name = /etc/krb5.keytab [царства] ПРИМЕР.

РУ = { kdc = dc1.example.ru admin_server = dc1.example.ru default_domain = example.ru } [область_домена] .

example.ru = EXAMPLE.RU example.ru = EXAMPLE.RU

3.2 Создание записи DNS

Всем прекрасно известно, что Active Directory тесно связана с DNS, и для корректной работы авторизации необходимо создать узел (А или ААА) с указанием имени хоста и его IP-адреса (Получается запись sq.example.ru с IP-адресом 10.0.0.10 ).



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

И так, есть два варианта интеграции с доменом.

Первый вариант — использование Windows ( ктпасс ), второй вариант — использование Linux ( Мсктутил ).

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

кальмар .

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



3.3.1 Интеграция с помощью Windows

Создаем пользователя в AD, например кальмар Теперь мы генерируем krb5.keytab .

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

C:\Windows\system32> ktpass -princ HTTP/[email protected] -mapuser [email protected] -crypto rc4-hmac-nt -pass Pa$$wd12 -ptype KRB5_NT_PRINCIPAL -out C:\

Сам файл krb5.keytab переместить (можно сделать с помощью WinSCP) в sq.example.ru в каталог /и т. д .



3.3.2 Интеграция с использованием Linux

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

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

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

# 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 --verbose --enctypes 28

В случае успеха вывод команды будет большим; Копировать сюда не вижу смысла.

Никаких ошибок и предупреждений быть не должно.

Стоит обратить внимание на --имя-компьютера sq-k это не опечатка.

Имя хоста должно быть другим.

Ввиду необходимости обновить пароль учетной записи компьютера, это можно сделать через cron.

# crontab -e

В него нужно добавить задачу:

00 3 * * * msktutil --auto-update --verbose --computer-name sq-k



3.4 Рекомендуемые разрешения для файла krb5.keytab

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

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



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

В ActiveDirectory в OU Users нужно создать три группы, по которым будет распределяться доступ в Интернет: Интернет-полный, Интернет-среда , Интернет-низкий .



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

Проверка авторизации в Active Directory с помощью файла /etc/krb5.keytab

# kinit -V -k -t /etc/krb5.keytab HTTP/[email protected]

Вывод команды должен быть примерно таким:

Using default cache: /tmp/krb5cc_0 Using principal: HTTP/[email protected] Using keytab: /etc/krb5.keytab Authenticated to Kerberos v5

А клист должно отображаться следующее: клист Кэш билетов: ФАЙЛ:/tmp/krb5cc_0 Участник по умолчанию: HTTP/[email protected]. Действительный начальный субъект службы Expires Service 09.10.2016 22:19:20 10.10.2016 08:19:20 krbtgt/[email protected] продлить до 10.10.2016 22:19:20 На этом этапе настройка Squid практически завершена; теперь перезагружаем хост, чтобы применить настройки.

После перезагрузки для теста можно вручную прописать прокси в настройках sq.example.ru указание порта 3130 .



4 ВПАД



4.1 Установка и настройка веб-сервера apache2

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

# yum install -y httpd

После установки включите в автозагрузку:

# systemctl enable httpd

Запустим:

# systemctl start httpd

Если вы попытаетесь открыть доменное имя sq.example.ru в браузере, должна открыться тестовая страница apache2. Далее вам нужно создать/ вар/www/html/wpad.dat файл следующего содержания: wpad.dat функция FindProxyForURL(url, хост) { // вар ip_host = dnsResolve(хост); // var localnet = "192.168.0.0"; // var localhost = "127.0.0.0"; // var localnet = "10.0.0.0"; if (isInNet(хост, "192.168.0.0", "255.255.255.0") || isInNet(хост, "10.0.0.0", "255.255.255.0") || isInNet(хост, "127.0.0.0", "255.0.0.0") || shExpMatch(хост, "*.

example.ru")) { вернуть "ПРЯМОЕ"; } if (dnsDomainIs(host, "*.

inet-example.ru" )) { вернуть "ПРЯМОЕ"; } вернуть «ПРОКСИ sq.exmaple.ru:3130»; }

4.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") ||

Это означает, что обращения к хостам в подсетях 192.168.0.0/24, 10.0.0.0/24 и 127.0.0.0/8 (последнее необходимо для корректной работы сервисов при обращении к локальному хосту) передаются напрямую, а прямое подключение к Хосты домена .

example также сделаны .

ru: Линии:

if (dnsDomainIs( host, "*.

inet-example.ru" )) { return "DIRECT"; }

Укажите, что при доступе к доменному имени .

inet-example.ru Если запрошенный ресурс не подпадает под вышеуказанные условия, происходит следующее:

return "PROXY sq.exmaple.ru:3130";



4.3 Создание CNAME

На DNS-сервере Active Directory необходимо создать имя wpad (полное доменное имя wpad.example.ru) на sq.example.ru. Для проверки нужно открыть его в браузере wpad/wpad.dat и файл wpad.dat должен загрузиться автоматически.

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

Для загрузки файла рекомендуется перерегистрировать или перезагрузить все компьютеры в домене под управлением ОС Windows.

5 Статистика



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

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

# yum install -y gcc gd gd-devel make wget # wget http://liquidtelecom.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.10/sarg-2.3.10.tar.gz # tar -xvzf sarg-2.3.10.tar.gz # cd sarg-2.3.10 # .

/configure # make

В файле po/Makefile.in.in версия gettext указана как 0.18, чтобы не было ошибок при make install, нужно изменить ее на 0.19:

# make install



5.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



5.3 Расписание создания отчетов с помощью cron



# crontab -e

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

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

В этой строке указано, что отчеты будут формироваться каждый день и за текущий день в 23:55.

5.4 Конфигурация веб-сервера

Ранее установленному веб-серверу также можно поручить задачу отображения отчетов, с просьбой ввести логин и пароль для авторизации.

Создать файл /etc/httpd/conf.d/sarg.conf со следующим содержанием: sarg.conf Псевдоним /reports /var/www/html/squid-reports/ Тип аутентификации Базовый AuthName «Базовая аутентификация» AuthUserFile /etc/httpd/conf/.

htpasswd требуется действительный пользователь Добавить по умолчаниюCharset UTF-8

5.5 Авторизация на сайте со статистикой

Генерация файла логина и пароля для авторизации

# htpasswd -c /etc/httpd/conf/.

htpasswd administrator

Перезапуск apache2 :

# systemctl restart httpd

Когда вы пытаетесь открыть sq.example.ru/reports Вам будет предложено ввести имя пользователя и пароль.

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



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

Здесь все неоднозначно и может зависеть от некоторых особенностей.

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



6.1 Редактирование объекта групповой политики

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

Создаём и связываем групповую политику с OU, например офисом.

Редактирование групповой политики:

Пользователь → Политики → Административные шаблоны → Компоненты Windows → Internet Explorer.
В этом каталоге найдите параметры и измените их на статус.

"Включено" :

«Запретить изменение настроек прокси» «Отключить изменение автоматических настроек»
В заключение могу сказать следующее: данная конфигурация успешно работает по сей день с весны 2016 года и отлично зарекомендовала себя.

Буду рад ответить на все вопросы.

УПД №1: 12.11.16 1 Из конфига сквида убраны лишние строки портов 3128 и 3129. 2 включил selinux и добавил правила.

3 Из мануала убрана генерация сертификата (работает и без него) 4 Мелкие исправления УПД №2: 20.11.16 1 Из конфига krb5.conf удалены лишние строки 2 Добавлен метод интеграции с AD через Msktutil. 3 Добавлена переадресация 4 Обновлен архив со сквидом и зависимостями В опросе могут участвовать только зарегистрированные пользователи.

Войти , Пожалуйста.

Вам помогла данная статья? 67,39% Да, это то, что я давно искал! 31 26,09% Интересно, но сам не буду 12 8,7% Нет 4 Проголосовали 46 пользователей.

4 пользователя воздержались.

Теги: #Системное администрирование #Конфигурация Linux #active каталог #Active Directory #squid #wpad

Вместе с данным постом часто просматривают: