Статья описывает процесс настройки кэширующего прокси-сервера Squid в Ubuntu 16 для организации контролируемого доступа пользователей в Интернет
Процесс настройки будет состоять из следующих этапов:
- базовая настройка Squid
- настройка аутентификации посредством Active Directory
- настройка авторизации на основании членства в группах Active Directory
- настройка фильтрации трафика
- окончательная настройка Squid (безопасность, кэширование и т.д.)
- настройка ежедневной рассылки отчетов посредством SARG
Базовая настройка
- устанавливаем Squid из репозитория Ubuntu
- apt-get install squid3
- переименовываем файл /etc/squid/squid.conf в squid.conf.sample и создаем новый файл squid.conf следующего содержания
-
http_port 3128 acl local_area_network src 192.168.1.0/24 http_access allow local_area_network
- назначаем папке /etc/squid и ее содержимому в качестве владельца пользователя и группу proxy
- chown -R proxy:proxy /etc/squid
- Замечание: этих же владельцев необходимо будет назначать всем файлам и папкам, создаваемым внутри данной папки
- устанавливаем на папку «/etc/squid» права полного доступа для владельца
- chmod 700 /etc/squid
- Замечание: без права выполнения используемый далее модуль negotiate_kerberos_auth не сможет получить доступ к файлу squid.keytab, вследствие чего будет происходить сбой аутентификации пользователей
- устанавливаем на содержимое папки "/etc/squid" права чтения и записи для владельца
- chmod 600 /etc/squid/*
- Замечание: такие же права доступа необходимо будет устанавливать на файлы и папки, создаваемым внутри данной папки
- проверяем правильность конфигурации
- /usr/sbin/squid -k check
- перезапускаем Squid
- service squid restart
- настраиваем браузер на работу через прокси и пробуем посетить какие-нибудь сайты
Настройка аутентификации
- создаем в AD учетную запись пользователя squid со следующими параметрами: «запретить смену пароля пользователем», «срок действия пароля неограничен», «данная учетная запись поддерживаем 256-разрядное шифрование»
- в AD регистрируем SPN для учетной записи squid и создаем соответствующий keytab-файл, для чего на контроллере домена выполняем команду
- ktpass -princ HTTP/[email protected] -mapuser [email protected] +rndpass /crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -out C:\squid.keytab
- Замечание 1: SPN чувствителен к регистру
-
Замечание 2: проверить, что SPN было успешно зарегистрировано, а также то, какие SPN зарегистрированы для учетной записи, можно командой
setspn -l <имя_учетной_записи> - перемещаем созданный keytab-файл с контроллера домена на proxy.domain.local в папку /etc/squid
- устанавливаем пакет krb5-user
- apt-get install krb5-user
- Замечание: в процессе установки в качестве имени области Kerberos по умолчанию указываем «DOMAIN.LOCAL»
- добавляем в самое начало файла /etc/init.d/squid
- export KRB5_KTNAME=/etc/squid/squid.keytab
- переименовываем файл /etc/krb5.conf в krb5.conf.sample и создаем новый krb5.conf следующего содержания
-
[libdefaults] default_realm = DOMAIN.LOCAL dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true default_tkt_enctypes = aes256-cts-hmac-sha1-96 default_tgs_enctypes = aes256-cts-hmac-sha1-96 permitted_enctypes = aes256-cts-hmac-sha1-96
- добавляем в файл /etc/squid/squid.conf
-
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -d -s HTTP/[email protected] auth_param negotiate children 25 startup=1 idle=1 auth_param negotiate keep_alive on acl authenticated_users proxy_auth REQUIRED http_access allow authenticated_users http_access deny all
- Замечание: добавленное ранее в файл конфигурации определение ACL для хостов локальной сети, а также соответствующее правило доступа - удаляем
- проверяем, что пользователи успешно аутентифицируются (/var/log/squid/cache.log), после чего удаляем ключ «-d» из списка параметров вызова negotiate_kerberos_auth в файле /etc/squid/squid.conf
Настройка авторизации
- создаем на DNS-серверах локальной сети зону обратного просмотра и добавляем в нее PTR-записи для контроллеров домена
- устанавливаем модуль для SASL/GSSAPI
- apt-get install libsasl2-modules-gssapi-mit
- добавляем в файл /etc/krb5.conf
-
default_keytab_name = /etc/squid/squid.keytab
- проверяем, что членство в группах определяется успешно, для чего выполняем указанную ниже команду и вводим имя тестового пользователя (в результате программа должна вернуть OK или ERR)
- /usr/lib/squid/ext_kerberos_ldap_group_acl -d -g test_group -D DOMAIN.LOCAL
- создаем в AD три группы пользователей:
- Internet (unrestricted) – доступ к любым Интернет-ресурсам
- Internet (blacklist) – доступ ко всем ресурсам, отсутствующим в черном списке
- Internet (whitelist) – доступ только к ресурсам из белого списка
- Замечание: в названии групп можно использовать только латинские буквы (кириллицу плагин ext_kerberos_ldap_group_acl не воспринимает)
- создаем файл /etc/squid/unauthenticated_domains со списком доменов, доступных неавторизованным пользователям
-
.domain.local .microsoft.com .autodesk.com
- Замечание 1: точка в начале имени каждого домена означает "данный домен и все его поддомены"
- Замечание 2: данный список доменов необходим потому, что, например, MS Word при запуске пытается обратится к различным Интернет-ресурсам. Однако, по всей видимости, в нем не реализована поддержка Kerberos-аутентификации на прокси-сервере, в результате чего пользователю на экран несколько раз выводится окно с запросом учетных данных, при указании которых появляется сообщение о том, что введенные учетные данные недействительны
- Замечение 3: домен Active Directory («.domain.local») указываем потому, что некоторые приложения могут обращаться к сервисам локальной сети через прокси-сервер, при этом они скорее всего не будут поддерживать Kerberos-аутентификацию
- создаем файл /etc/squid/whitelist_domains с «белым» списком доменов, например
-
.grundfos.ru .abok.ru
- создаем файл /etc/squid/blacklist_domains с «черным» списком доменов, например
-
.ok.ru .vk.com
- добавляем в файл /etc/squid/squid.conf определения типов списков контроля доступа, используемых для создания списков контроля доступа, соответствующих группам пользователей AD
-
external_acl_type internet_unrestricted_acl_type children-startup=1 children-idle=1 children-max=20 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -g "Internet (unrestricted)" -D DOMAIN.LOCAL external_acl_type internet_whitelist_acl_type children-startup=1 children-idle=1 children-max=20 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -g "Internet (whitelist)" -D DOMAIN.LOCAL external_acl_type internet_blacklist_acl_type children-startup=1 children-idle=1 children-max=20 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -g "Internet (blacklist)" -D DOMAIN.LOCAL
- в файл /etc/squid/squid.conf добавляем списки контроля доступа (созданные ранее – удаляем)
-
acl authenticated_users proxy_auth REQUIRED acl internet_unrestricted_users external internet_unrestricted_acl_type acl internet_whitelist_users external internet_whitelist_acl_type acl internet_blacklist_users external internet_blacklist_acl_type acl unauthenticated_domains dstdomain "/etc/squid/unauthenticated_domains" acl whitelist_domains dstdomain "/etc/squid/whitelist_domains" acl blacklist_domains dstdomain "/etc/squid/blacklist_domains"
- в файл /etc/squid/squid.conf добавляем правила доступа (созданные ранее правила http_access, разрешающие трафик аутентифицированных пользователей и запрещающие остальной трафик, удаляем)
-
http_access allow unauthenticated_domains http_access allow authenticated_users internet_unrestricted_users http_access allow authenticated_users internet_whitelist_users whitelist_domains http_access deny authenticated_users internet_blacklist_users blacklist_domains http_access allow authenticated_users internet_blacklist_users http_access deny all
- Замечание: правило действует при действии всех перечисленных через пробел списков контроля доступа
Настройка фильтрации трафика
- создаем файл /etc/squid/blacklist_mime со списком запрещенных MIME-типов, например
-
audio/mpeg video/mp4 application/x-shockwave-flash
- добавляем в файл /etc/squid/squid.conf определение ACL для запрещенных MIME-типов
-
acl blacklist_mime rep_mime_type "/etc/squid/blacklist_mime"
- добавляем в файл /etc/squid/squid.conf правила доступа для ответов
-
http_reply_access deny !unauthenticated_domains !internet_unrestricted_users blacklist_mime http_reply_access allow all
Окончательная настройка
- в файле /etc/squid/errorpage.css редактируем класс "titles"
- изменяем значение параметра "margin-left" на "0px"
- изменяем значение параметра "padding-left" на "10px"
- удаляем параметр "background"
- Замечание: данные изменения удаляют со страницы с сообщением об ошибке, отображаемой, например, при доступе к запрещенным ресурсам, логотип Squid; это необходимо потому, что настраиваемые далее ACL не позволяют получить доступ к этому изображению, в результате чего оно не отображается
- в файле /etc/squid/squid.conf добавляем перед всеми другими ACL
-
acl safe_ports port 21 acl safe_ports port 80 acl safe_ports port 443 acl ssl_ports port 443 acl connect_method method CONNECT
- добавляем перед другими правилами доступа
-
http_access deny !safe_ports http_access deny connect_method !ssl_ports http_access deny to_localhost
- Замечание: использование последнего правила рекомендуется в документации
- в самое начало файла добавляем общие настройки
-
append_domain .domain.local cache_mgr [email protected] httpd_suppress_version_string on visible_hostname proxy.domain.local coredump_dir /var/spool/squid
- после общих настроек добавляем настройки кэширования
-
cache_mem 1024 MB maximum_object_size_in_memory 50 MB memory_replacement_policy heap LFUDA maximum_object_size 50 MB cache_replacement_policy heap LFUDA cache_dir ufs /var/spool/squid 10240 16 256 refresh_pattern . 0 20% 4320
Настройка ежедневной рассылки отчетов
- устанавливаем SARG из репозитория
- apt-get install sarg
- назначаем в качестве владельцев папок /etc/sarg и /var/lib/sarg и их содержимого пользователя и группу "proxy"
-
chown -R proxy:proxy /etc/sarg
chown -R proxy:proxy /var/lib/sarg - назначаем папкам /etc/sarg и /var/lib/sarg и их содержимому права полного доступа для владельца
-
chmod -R 700 /etc/sarg
chmod -R 700 /var/lib/sarg - Замечание: если установить на указанные папки только права чтения и записи, то SARG, будучи запущенным под учетной записью "proxy", не будет иметь доступ к файлам конфигурации и не сможет создавать файлы отчетов
- в файле /etc/sarg/sarg.conf изменяем следующие параметры
-
charset UTF-8 (для поддержки русских символов) date_format e (для отображения даты в виде дд/мм/гггг) font_size 12px header_font_size 12px title_font_size 12px resolve_ip yes (для преобразования IP-адресов в DNS-имена) records_without_userid ignore (для исключения из отчетов данных о неаутентифицированных пользователях) top_sites_sort_order BYTES D (для сортировки списка наиболее популярных сайтов по объему загруженных данных) bytes_in_sites_users_report yes (для отображения объема данных, полученных с сайтов в отчетах "Sites & Users") last_log 1 (для хранения в выходном каталоге только последнего отчета) download_suffix "7z,rar,dwg,pdf,docx,xls,xlsx,odt,zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"
- Замечание: поскольку созданный при установке SARG конфигурационный файл имеет небольшой размер, а большая часть его параметров нас вполне устраивает, мы вносим необходимые изменения непосредственно в этот файл
- проверяем, что отчеты успешно формируются
- su proxy -s /bin/sh -c "/usr/bin/sarg"
- Замечание: без указания используемой оболочки (/bin/sh) появляется сообщение об ошибке: "This account is currently not available"
- устанавливаем пакет для отправки писем и пакет для преобразования вложений в MIME-формат
- apt-get install ssmtp mime-construct
- в файл /etc/ssmtp/ssmtp.conf вносим указанные ниже изменения, а все остальное - комментируем
-
root= mailhub=mail.domain.local:25 hostname=proxy.domain.local FromLineOverride=YES
- создаем файл /usr/local/bin/sarg-report.sh следующего содержания
-
#!/bin/sh /usr/sbin/sarg-reports today && tar --create --bzip2 --directory /var/lib/sarg/Daily . | \ mime-construct --header "From: SARG <[email protected]>" --attachment daily_report.tar.bz2 \ --type application/x-bzip2 --file - --subject "Daily Report" --to [email protected] && \ /usr/sbin/squid -k rotate
- назначаем файлу /usr/local/bin/sarg-report.sh нужных владельцев и устанавливаем необходимые права
-
chown root:root /usr/local/bin/sarg-report.sh
chmod 700 /usr/local/bin/sarg-report.sh - удаляем файл sarg из всех папок /etc/cron.*
- Замечание: в указанных папках размещаются скрипты, автоматически выполняемые с соответствующей частотой
- в crontab добавляем следующее задание
-
30 23 * * * /usr/local/bin/sarg-report.sh >/dev/null 2>&1
- в файл /etc/squid/squid.conf после настроек кэширования добавляем настройки журналирования
-
logfile_rotate 1 sleep_after_fork 100000
Статьи
- https://technet.microsoft.com/en-us/library/cc772815(WS.10).aspx – информация про Kerberos и, в частности, SPN
- https://technet.microsoft.com/ru-ru/library/cc753771(v=ws.10).aspx – описание утилиты ktpass