Настройка SQUID авторизации по логину и паролю. NCSA-авторизация
Появилась необходимость настроить Squid 3.5.19 с авторизацией по логину и паролю. Т.е. чтобы при попытке посетить какой либо интернет ресурс пользователю выдавался запрос авторизации, в случае успешной авторизации доступ в интернет предоставлялся, в ином случае, пользователь получал бы отказ доступа. В Squid реализовать такой метод авторизации можно с помощью basic_ncsa_auth.
При данном методе авторизации имя пользователя и пароль будут хранится в текстовом файле. Логин и пароль будем создавать при помощи утилиты htpasswd входящую в состав apache-utils. Пароли будут хранится в хешированном виде.
Итак все действия ниже я буду производить на Ubuntu server 14.04.5 x64 с установленным Squid 3.5.19 по данной статье.
Создание списка пользователей
Установим apache-utils в состав которой входит утилита htpasswd, с помощью который мы будем создавать список пользователей
sudo apt-get install apache2-utils
htpasswd -c /etc/squid/internet_users jakonda New password: ******* Re-type new password: ******* Adding password for user jakonda
[note]Информация: Ключ с — указывает, что необходимо создать новый файл с паролями. Если файл с таким именем уже существует, то он будет перезаписан.[/note]
Посмотрим что у нас получилось
cat /etc/squid/internet_users jakonda:$apr1$Mgz6BK.x$vkApJxeLf5OoyUb8ibm.d0
Видим что все успешно создалось. jakonda — имя пользователя, а $apr1$Mgz6BK.x$vkApJxeLf5OoyUb8ibm.d0 — хеш пароля.
Добавим нового пользователя в существующий файл:
htpasswd -b /etc/squid/internet_users user1 Aa1234567 Adding password for user user1
Еще раз посмотрим все ли успешно прошло
cat /etc/squid/internet_users jakonda:$apr1$Mgz6BK.x$vkApJxeLf5OoyUb8ibm.d0 user1:$apr1$zySOW9Lr$JHThT2Vz5hye8jQx8yGBh1
Все отлично, новый пользователь добавлен. С создание файла паролей и добавлением в него пользователей разобрались.
Конфигурация Squid с запросом авторизации по логину и паролю
Теперь необходимо настроить Squid чтобы запрашивался логин и пароль доступа в интернет. Как писал выше, реализовывать это будем с помощью basic_ncsa_auth. Ниже я представляю свой вариант настройки Squid (/etc/squid/squid.conf). Конфиг с комментариями, поэтому разобраться в нем не составит труда.
################################# # Настройка авторизации в Squid # ################################# # Параметры авторизации в Squid для доступа в интернет через basic_ncsa_auth auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/internet_users # Количество одновременных подключений auth_param basic children 5 # Сообщение в окне запроса авторизации auth_param basic realm =Jakonda Proxy-Server= # Время жизни сессий подключившихся пользователей auth_param basic credentialsttl 8 hours ###################################### # Обслуживаемые прокси-сервером сети # ##################################### # Правило указывающее доступ в интернет только через авторизацию acl internet_users proxy_auth REQUIRED ################################################# # Правила какие порты разрешены прокси-сервером # ################################################# # Порт SSL для подключений по HTTPS-протоколу acl SSL_ports port 443 # Список портов, к которым разрешен доступ через прокси-сервер по протоколу HTTP 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 CONNECT method CONNECT ################################################################ # Пути к файлам запрещающих, разрешающих определенные действия # ################################################################ # Путь к списку IP-адресов пользователей, для которых не действуют запреты acl AdminsIP src "/etc/squid/AdminsIP.txt" # Путь к черному списку сайтов acl BlackList dstdomain "/etc/squid/BlackList.txt" # Путь к списку адресов которым запрещен интернет acl BlockInetExlWhite src "/etc/squid/BlockInetExlWhite.txt" # Путь к белому списку сайтов acl WhiteList dstdomain "/etc/squid/WhiteList.txt" ######################### # Параметры DNS записей # ######################### # Список DNS серверов(IP адреса), которые будут использоватся вместо тех, что определены в /etc/resolv.conf файле dns_nameservers 10.7.7.118 ######################################### # Правила ограниченией доступа клиентов # ######################################### # Запретить доступ к портам, отсутствующим в списке выше http_access deny !Safe_ports # Запретить метод CONNECT не на SSL-порт http_access deny CONNECT !SSL_ports # Разрешить только локальное управление кэшем http_access allow localhost manager http_access deny manager # Не ограничивать локальный доступ с сервера http_access allow localhost # Не ограничивать доступ администраторам http_access allow AdminsIP # Блокировать интернет конкретным пользователям http_access deny BlockInetExlWhite !WhiteList # Блокировать запрещенные сайты http_access deny BlackList # Правила разрешающего доступ в интернет только прошедшим авторизацию пользователям http_access allow internet_users # Блокирует все, что не было разрешено выше http_access deny all ################################################ # Правила подключений клиентов к прокси-серверу# ################################################ # Подключения через прозрачный порт http_port 10.7.7.87:3128 intercept options=NO_SSLv3:NO_SSLv2 # Подключение через указания прокси-сервера на строне клиента http_port 10.7.7.87:3130 options=NO_SSLv3:NO_SSLv2 # Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата https_port 10.7.7.87: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 # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их acl blocked ssl::server_name "/etc/squid/BlackList.txt" # Устанавливаем защищенное соединение и считываем заголовок HTTP acl step1 at_step SslBump1 ssl_bump peek step1 # Закрываем соединение, если клиент заходит на ресурс указанные в blocked ssl_bump terminate blocked ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB ######################################### # Дополнительные параметры конфигурации # ######################################### # Путь для дискового кеширования cache_dir aufs /var/spool/squid 20000 49 256 # Путь сохранения дампов аварийного завершения coredump_dir /var/spool/squid # Время жизни объектов для протоколов FTP и GOPHER 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 maximum_object_size 61440 KB minimum_object_size 3 KB cache_swap_low 90 cache_swap_high 95 # Максимальный размер объекта, сохраняемого в оперативной памяти maximum_object_size_in_memory 512 KB memory_replacement_policy lru # Количество ротаций лог-файлов (0 - отключена ротация, 15 - максимальное количество) logfile_rotate 0 # E-mail адрес Cache менеджера, для отправки уведомлений и отображении в страницах ошибок cache_mgr it@test.ru
Обязательно перезапускаем Squid
sudo service squid restart
Теперь проверим работу Squid с запросом авторизации. Запускаем браузер и пытаемся зайти на какой либо сайт. Появится запрос на необходимость авторизации.
Вот так просто мы решили задачу. Надеюсь статья будет полезной.
Установка и настройка Squid на Ubuntu
Обновлено: 11.11.2021 Опубликовано: 30.07.2020
Используемые термины: Squid, Ubuntu. Данную инструкцию можно также применять для установки SQUID на Debian. В качестве клиентов могут использоваться Windows, Linux, Mac OS и любые браузеры.
Установка и базовая настройка
Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:
* кавычки обязательны
** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса. С точки зрения безопасности, лучше закомментировать все подсети, которые не используются в нашей локальной сети, например:
# TAG: acl
.
#acl localnet src 0.0.0.1-0.255.255.255
#acl localnet src 10.0.0.0/8
#acl localnet src 100.64.0.0/10
#acl localnet src 169.254.0.0/16
#acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
#acl localnet src fc00::/7
#acl localnet src fe80::/10
* в данном примере мы оставили только подсеть 192.168.0.0/16. Разрешаем доступ для локальных сетей, которые заданы опцией acl localnet:
* данную опцию нужно либо раскомментировать, либо вставить выше опции http_access deny all. Настраиваем директорию для кэша:
* где ufs — файловая система (ufs для SQUID является самой подходящей); /var/spool/squid — директория хранения кэша; 4096 — объем пространства в мегабайтах, которое будет выделено под кэш; 32 — количество каталогов первого уровня, которое будет создано для размещение кэша; 256 — количество каталогов второго уровня, которое будет создано для размещение кэша. Останавливаем squid:
Проверка
Заходим в настройки браузера и настраиваем использование прокси-сервера. Например, в Mozilla Firefox настройки нужно выставить такими: * где 192.168.163.166 — IP-адрес моего прокси-сервера. Теперь открываем сайт 2ip.ru. После его загрузки мы увидим внешний IP-адрес — он должен соответствовать той сети, от которой работает настроенный SQUID.
Прозрачный прокси
Прозрачный прокси позволяет автоматически использовать прокси-сервер, не настраивая при этом браузер компьютера. Пользователи могут даже не знать, что трафик идет через squid. Открываем конфигурационный файл:
* порт 3128 будет для прозрачного проксирования. Порт 3129 должен быть указан в качестве прокси. И перезапускаем конфигурацию squid:
Для работы прозрачного проксирования. необходимо, чтобы шлюз перекидывал запросы по нужным портам на наш прокси. Это выполняется разными способами в зависмости от реализации шлюза. Для примера, если нашим шлюзом будет наш сервер со squid, то нужно выполнить команды:
Авторизация по логину и паролю
# TAG: auth_param
.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/auth_users
auth_param basic children 25
auth_param basic realm SQUID PROXY
auth_param basic credentialsttl 3 hours
* где /usr/lib/squid/basic_ncsa_auth — расположение ncsa_auth (в зависимости от системы может находиться в другом каталоге); /etc/squid/auth_users — файл с логинами и паролями; children 25 разрешает 25 одновременных подключений; SQUID PROXY — произвольная фраза для приветствия; credentialsttl 3 hours будет держать сессию 3 часа, после потребуется повторный ввод логина и пароля. Создаем acl для пользователей, которые прошли регистрацию. Сделаем регистрацию обязательной:
Слушаем на определенном интерфейсе
По умолчанию, squid будет слушать запросы на всех сетевых интерфейсах, которые доступны серверу. Чтобы указать конкретный, добавляем его IP к http_port:
* в данном примере squid будет слушать на адресе 192.168.1.15. И перечитываем конфигурацию squid:
Исходящий сетевой интерфейс
На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим:
acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33
acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34
* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34. Перечитываем конфигурацию squid:
Настройка цепочки прокси-серверов
- hostname — другой сервер, на который мы будем передавать запрос.
- type — тип «родства» другого сервера. Могут быть варианты:
- parent
- sibling
- multicast
* более подробное описание можно найти в самом конфигурационном файле SQUID.
Если на прокси, к которому мы подключаемся, необходима авторизация, добавляем опцию login:
cache_peer 10.11.12.13 parent 3128 3128 proxy-only login=loginname:password
Запрещаем использование нашего прокси-сервера напрямую (не через cache_peer):
# TAG: never_direct
.
never_direct allow allПеречитываем конфигурацию squid: