Установка Squid 3.5.19 на Ubuntu 14.04.5 LTS с поддержкой HTTPS протокола
Появилась необходимость на работе анализировать трафик интернета, с возможностью выставлять всякого рода запреты на пользование интернета сотрудникам и посещении сайтов как по HTTP протоколу, так и по HTTPS. Использовать будем для всех этих дел Squid 3.5.19 и развернут он будет на Ubuntu 14.04.5 LTS.
Первым делом обновляем систему до актуального состояния
sudo apt-get update sudo apt-get upgrade
Устанавливаем необходимые для сборки пакетов инструменты
sudo apt-get -y install devscripts build-essential fakeroot debhelper dh-autoreconf cdbs
Устанавливаем зависимости для libecap и squid
sudo apt-get -y build-dep libecap sudo apt-get -y build-dep squid3
Удаляем старую версию libecap
sudo apt-get -y --purge remove libecap2-dev libecap2
Устанавливаем необходимые дополнительные пакеты для сквида
sudo apt-get -y install nettle-dev libgnutls28-dev libssl-dev libdbi-perl
Создаем папки где будем собирать libecap (чтобы не захламлять home)
mkdir -p build/libecap
Перейдем в созданный каталог
pushd build/libecap
Скачиваем исходники libecap3
wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/libecap_1.0.1-3.dsc wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/libecap_1.0.1.orig.tar.gz wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/libecap_1.0.1-3.debian.tar.xz
Распаковываем
sudo dpkg-source -x libecap_1.0.1-3.dsc
Открываем текстовым редактором файл libecap-1.0.1/debian/control
sudo nano libecap-1.0.1/debian/control
находим строку
Build-Depends: debhelper (>= 8.0.0), autotools-dev, cdbs, dh-autoreconf, g++ (>= 4:5.2)
и заменяем ее на
Build-Depends: debhelper (>= 8.0.0), autotools-dev, cdbs, dh-autoreconf
Сохраняем документ и выходим
Ctrl+O, Ctrl+X
Входим в каталог
cd libecap-1.0.1
И запускаем процесс создания пакета
sudo dpkg-buildpackage -rfakeroot -b
Выходим из каталога
popd
Теперь установим полученные в ходе сборки пакеты. Войдем в каталог где они у нас сформировались
pushd build/libecap
Установим пакеты
sudo dpkg --install libecap3_1.0.1-3_amd64.deb sudo dpkg --install libecap3-dev_1.0.1-3_amd64.deb
Выходим из каталога
popd
Теперь перейдем к основной нашей цели, это сборка и установка Squid 3.5.19.
Создадим каталог где мы будем собирать Squid
mkdir -p build/squid3
Перейдем в созданный каталог
pushd build/squid3
Скачаем исходники
wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/squid3_3.5.19-1.dsc wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/squid3_3.5.19.orig.tar.gz wget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/squid3_3.5.19-1.debian.tar.xz
Распакуем исходный пакет
sudo dpkg-source -x squid3_3.5.19-1.dsc
Отредактируем файл правила сборки пакета rules. А конкретней добавим необходимые нам компоненты, для работы с HTTPS трафиком
sudo nano squid3-3.5.19/debian/rules
Ищем строку
--with-default-user=proxy
и вместо нее пишем
--with-default-user=proxy \ --with-openssl \ --enable-ssl \ --enable-ssl-crtd
Сохраняем документ и выходим
Ctrl+O, Ctrl+X
Перейдем в каталог для запуска сборки пакета
cd squid3-3.5.19
И запустим процесс сборки пакета Squid. (Процесс довольно продолжительный)
sudo dpkg-buildpackage -rfakeroot -b
После того как сборка пакета завершилась, выходим из каталога.
popd
Все готово для установки Squid. Перейдем в каталог где у нас находятся собранные пакеты Squid
pushd build/squid3
Сперва установим Squid langpack, чтобы была поддержка русского языка
sudo apt-get install squid-langpack
Устанавливаем пакеты Squid в очередности как указано ниже.
sudo dpkg --install squid-common_3.5.19-1_all.deb sudo dpkg --install squid_3.5.19-1_amd64.deb sudo dpkg --install squidclient_3.5.19-1_amd64.deb
Выходим из каталога.
popd
На этом установка Squid 3.5.19 завершена. Теперь нужно выполнить настройку его, создать сертификат для работы с HTTPS трафиком.
Файл конфигурации Squid находится /etc/squid/squid.conf. Файл огромный, главный его плюс это то что он очень хорошо комментирован, но редактирование его для меня не совсем удобное, поэтому я создаю бекап дефолтного файла конфигурации, удаляю оригинал и создаю новый текстовый файл в котором будем прописывать только нужные нам параметры для работы Squid. Поехали..
Создаем бекап дефолтного файла
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup
Удаляем оригинальный файл конфигурации
sudo rm /etc/squid/squid.conf
И создаем новый файл будущей конфигурации
sudo nano /etc/squid/squid.conf
Небольшое отступление перед написанием конфигурации. Файл конфигурации может быть различным и для каждого места индивидуальным. Я опишу свою схему работы Squid и напишу какой в итоге у меня получился конфиг.
Организация сети и получение интернета. Имеется роутер Mikrotik, в который приходит интернет, так же на этом роутере развернут DHCP, локальная подсеть 192.168.5.0/24. В этой же подсети находится и нас свеже установленный Squid, с адресом 192.168.5.2. Squid будет у нас работать в обычном режиме. (В идеале хотелось бы конечно работать по прозрачному протоколу, но как только не пытался, не удается завернуть трафик с Mikrotik на Squid на прозрачные порты 80, 443, поэтому я остановился на работе по обычному режиму работы Squid).
Желаемая работа Squid будет заключаться в раздаче интернета только в пределах локальной сети 192.168.5.0/24, а так же возможность блокировать любые неугодные нам сайты для пользователей, возможность блокировать доступ в интернет за исключением белого списка адресов сайтов, ну и конечно создать группу определенных адресов, которых не будут касаться никакие запреты.
В итоге моего плана у меня получился вот такой конфигурации
###################################### # Обслуживаемые прокси-сервером сети # ###################################### acl localnet src 192.168.5.0/24 ################################################# # Правила какие порты разрешены прокси-сервером # ################################################# # Порт 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 192.168.5.3 ######################################## # Правила ограничений доступа клиентов # ######################################## # Запретить доступ к портам, отсутствующим в списке выше 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 # Правила разрешающего доступ в интернет из локальной сети указанной в localnet http_access allow localnet # Блокирует все, что не было разрешено выше http_access deny all ############################################# # Правила подключений клиентов к прокси-серверу# ############################################# # Подключения через прозрачный порт http_port 192.168.5.2:3128 intercept options=NO_SSLv3:NO_SSLv2 # Подключение через указания прокси-сервера на стороне клиента http_port 192.168.5.2:3130 options=NO_SSLv3:NO_SSLv2 # Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата https_port 192.168.5.2: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@admin.ru
После того как конфиг Squid готов, нужно создать сертификат для работы с HTTPS протоколом
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout squidca.pem -out squidca.pem
Сертификат создан, почти все готово. Переместим созданный сертификат в папку Squid
sudo mv squidca.pem /etc/squid/squidca.pem
Т.к. в конфиге мы указывали правила по блокировки сайтов, создание белого списка сайтов и т. д. нам нужно создать эти файлы и по необходимости заполнить их, создаем
sudo touch /etc/squid/AdminsIP.txt — Список IP адресов без ограничений sudo touch /etc/squid/BlackList.txt — Список блокированных сайтов (прим.: .mail.ru) sudo touch /etc/squid/BlockInetExlWhite.txt - Список IP адресов которым запрещен интернет кроме белого списка sudo touch /etc/squid/WhiteList.txt — Список белых сайтов для посещения (прим.: .jakondo.ru)
После того как заполнили все необходимые списки, торжественно запускаем Squid
sudo service squid start
Проверим статус работы запущенного нами Squid
sudo service squid status
Если видим сообщение — * squid is running, то все отлично Squid работает успешно. Если же иная запись с надписью Failed, то смотрите вывод статуса, всегда пишет в чем проблема, исправляем ошибку и снова пробуем запустить.
В моем случае осталось прописать на ПК пользователей в Свойствах обозревателя, параметры прокси-сервера и проверить работу. Если все было сделано как по инструкции то все будет работать правильно.
Так же можно посмотреть работу Squid в режиме реального времени выполнив команду
sudo tail -f /var/log/squid/access.log
В следующей статье разберем как установить анализатор логов Squid и вывод его в приятный глазу вид, который можно и начальству показать для наглядности куда кто ходит и чем занимается в рабочее время.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Добрый вечер! При вводе команды $ sudo apt-get -y build-dep squid3
Выдает:
Чтение списков пакетов… Готово
E: Невозможно найти пакет с исходным кодом для squid3
Как можно это исправить?
Данная статья уже морально устарела.. пожалуйста воспользуйтесь вариантом установки более новой версии Squid — https://jakondo.ru/ustanovka-iz-ishodnikov-proksi-servera-squid-4-6-na-debian-9-stretch/
Добрый день! Спасибо огромное за ваши подробнейшие статьи:)
Подскажите пожалуйста, есть ли нюансы при обновлении squid 3.5.8 до 4.13?
Стоит Ubuntu 14.04
Добрый день! Рад что статьи приносят полезности для других 🙂
Не думаю что есть какие то ньюансы при апгрейде версии squid. Скачиваете новую версию, собираете ее, выполняете удаление старой версии Squid, устанавливаете новую. (да, предварительно файл конфигурации старого Squid рекомендую сохранить)
Рекомендую посмотреть мои свежие статьи:
https://jakondo.ru/ustanovka-iz-ishodnikov-proksi-servera-squid-4-6-na-debian-9-stretch/
https://jakondo.ru/perehvat-i-prosmotr-https-trafika-na-proksi-servere-squid-4-9/
«Squid будет у нас работать в обычном режиме. (В идеале хотелось бы конечно работать по прозрачному протоколу, но как только не пытался, не удается завернуть трафик с Mikrotik на Squid на прозрачные порты 80, 443, поэтому я остановился на работе по обычному режиму работы Squid).»
А что такое «обычный режим»? С указанием адреса прокси в браузерах?
Я так понял, что сквид у вас подключен либо к коммутаторы, либо к бриджу микротике, тому же самому, что и вся подсеть. А если пользователи уберут из конфигов браузеров указание ходить через прокси, они же пойдут без контроля? Ведь для этого не нужны права администратора компьютера (если только не используется ослик, а хосты с доменной политикой). При транспарентом режиме мы на бридже могли бы заблокировать обращение к портам 80 и 443, а здесь у нас такой возможности нет.
Вопрос такой, поставил систему Ubuntu 18.04 + squid Version 3.5.27 + поддержка https
все работает и все замечательно, но вот захотел я тут оплатить с сайта билеты и при клике на кнопку оплатить страница улетела в ошибку ))))
по логам смотрю нет с этого ip каких то ошибок и все сайты с кодом 200
Но подозреваю что проблема с ssl сертификтаом.
Какие могут быть нюансы с генерацией сертификата который мы создаем на сервере squid при работе с HTTPS/
Заранее спасибо!
Если честно, то я давно уже не использую https в кальмаре, т.к. мне на текущий момент хватает простого контроля посещения сайтов, а что делаю пользователи конкретно при запросах на https сайты мне не особо интересно.
Не смогу вам помочь в данном вопросе..
Хм.. почему то ругается на сертификат
admen@proxy:~$ /usr/sbin/squid -NCd1
2019/08/09 11:54:59| FATAL: No valid signing certificate configured for HTTPS_port 192.168.1.175:3129
2019/08/09 11:54:59| Squid Cache (Version 4.8): Terminated abnormally.
CPU Usage: 0.011 seconds = 0.008 user + 0.004 sys
Maximum Resident Size: 59328 KB
Page faults with physical i/o: 0
# Путь к списку IP-адресов пользователей, для которых не действуют запреты
acl AdminsIP src «/etc/squid/AdminsIP.txt»
Тут у вас указаны айпишники, а как указать группу из AD, чтобы рулить не конкретными машинами, а авторизованными пользователями?
Вы там выше в комментах где-то писали, что вы управляете группами из AD
Я немного не понял этот момент:
# Подключения через прозрачный порт
http_port 192.168.5.2:3128 intercept options=NO_SSLv3:NO_SSLv2
# Подключение через указания прокси-сервера на стороне клиента
http_port 192.168.5.2:3130 options=NO_SSLv3:NO_SSLv2
# Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
https_port 192.168.5.2:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidca.pem
# Принимаем сертификаты, даже если они не прошли проверку.
А дальше у вас: «В моем случае осталось прописать на ПК пользователей в Свойствах обозревателя, параметры прокси-сервера и проверить работу.»
Так у нас HTTPS заработал или нет?
Щас вот по статье делаю и через настройки на клиентах работает, а по-другому — нет.
Так у вас же за комментирована строка для блокировки сайтов из списка:
# Блокировать запрещенные сайты
# http_access deny BlackList
снимите комментарий перед
http_access deny BlackList
Вот тут:
Измените ковычки с «» на
""
И попробуйте
Замените пожалуйста предыдущий мой комментарий ( не хочу кэширования в яндексе) на
.odnoklassniki.ru
.ok.ru
.vk.me
.vk.com
.vk.ru
.vk.me
.vk.cc
.vkadre.ru
.vkuservideo.net
.facebook.com
.mycdn.me
А ковычкие нормальные , видимо такой текстовый редактор в вродпрессе
Покажите ACL-ы все в конфиге, с виду вроде правильно все.
.odnoklassniki.ru
.ok.ru
.vk.me
.vk.com
.vk.ru
.vk.me
.vk.cc
.vkadre.ru
.vkuservideo.net
.facebook.com
.mycdn.me