«Прозрачный» Squid с разграничением доступа

от автора

Как готовить кальмара, думаю что не я один сталкивался с задачей настройки Squid’а для разграничения доступа сотрудникам предприятия, но при этом он должен быть «прозрачным». Другими словами конфигурация показанная далее удовлетворяет трём условиям:

  • Имеется список запрещенных интернет-ресурсов, доступ к которым закрыт у всех пользователей (Пример: социальные сети);
  • Имеется список разрешенных интернет-ресурсов, доступ к которым открыт у всех пользователей (Пример: портал государственных услуг);
  • Имеется список ip-адресов пользователей которые должны иметь доступ ко всем интернет-ресурсам кроме входящих в список запрещенных.


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

В качестве базовой конфигурации использовались материалы из статьи «Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (x86). Так как установка и настройка компонентов в данной статье описаны достаточно подробно, я пропущу данную информацию.

Программное обеспечение использованное мной для тестирование конфигурации:

  • Gentoo Linux версии Base System release 2.2;
  • Squid 3.5.22;
  • OpenSSL 1.0.2j

Итак, файл /etc/squid/squid.conf:

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network  acl SSL_ports port 443 acl Safe_ports port 80          # http acl Safe_ports port 21          # ftp acl Safe_ports port 443         # https acl Safe_ports port 70          # gopher acl Safe_ports port 210         # wais acl Safe_ports port 1025-65535  # unregistered ports acl Safe_ports port 280         # http-mgmt acl Safe_ports port 488         # gss-http acl Safe_ports port 591         # filemaker acl Safe_ports port 777         # multiling http acl Safe_ports port 901         # SWAT  acl CONNECT method CONNECT  #Добавление в acl трёх списков: запрещенные, разрешенные и группа расширенного доступа acl denied_urls url_regex "/etc/squid/denied_urls" acl allowed_urls url_regex "/etc/squid/allowed_urls" acl extended_access_group src "/etc/squid/extended_access_group"  http_access deny !Safe_ports  http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager  #Ключевая строчка из-за которой долго ломали голову, так как без нее запрос сертификатов к сайтам  # на https не осуществляется. #Разрешаем осуществлять коннект к ресурсу, если https http_access allow localnet CONNECT #Запрещаем всем доступ на запрещенные сайты http_access deny denied_urls #Этим правилом разрешаем всем кто не в группе расширенного доступа ходить только на  #разрешенные сайты http_access deny !extended_access_group !allowed_urls  http_access allow localnet http_access allow localhost http_access deny all  #Обязательно один из портов должен быть в таком виде и являться заглушкой http_port 3130 http_port 3128 intercept https_port 3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem  always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER  #Правила доступа для ssl acl allowed_urls_ssl ssl::server_name_regex "/etc/squid/allowed_urls" acl denied_urls_ssl ssl::server_name_regex "/etc/squid/denied_urls" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate denied_ssl ssl_bump splice extended_access_group ssl_bump terminate !allowed_urls_ssl ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB  #cache_dir ufs /var/cache/squid 100 16 256  coredump_dir /var/cache/squid  refresh_pattern ^ftp:           1440    20%     10080 refresh_pattern ^gopher:        1440    0%      1440 refresh_pattern -i (/cgi-bin/|\?) 0     0%      0 refresh_pattern .               0       20%     4320 

Перед запуском Squid’а не забываем создать три файла в /etc/squid/. denied_urls и allowed_urls вида:

geektimes.ru habrahabr.ru toster.ru windowsupdate.microsoft.com 

И extended_access_group вида:

192.168.1.5     #Иванов И.И. 192.168.1.87    #Петров П.П. 192.168.1.108   #Сидоров С.С. 

При обращении по http на запрещенный сайт выдаст стандартную заглушку Squid’а, а по https — «ERR_SSL_PROTOCOL_ERROR».

Спасибо за прочтение статьи.
ссылка на оригинал статьи https://habrahabr.ru/post/314718/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *