Статья описывает процесс настройки кэширующего прокси-сервера 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 &lt;[email protected]&gt;" --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
    

Статьи


Добавить комментарий