Установка Squid 3.5.19 на Ubuntu 14.04.5 LTS с поддержкой HTTPS протокола
Первым делом обновляем систему до актуального состояния
sudo apt-get updatesudo apt-get upgrade | 
Устанавливаем необходимые для сборки пакетов инструменты
sudo apt-get -y install devscripts build-essential fakeroot debhelper dh-autoreconf cdbs | 
Устанавливаем зависимости для libecap и squid
sudo apt-get -y build-dep libecapsudo 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.dscwget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/libecap_1.0.1.orig.tar.gzwget 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.debsudo 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.dscwget http://jakondo.ru/wp-content/uploads/file-manager/squid_3.5.19/squid3_3.5.19.orig.tar.gzwget 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.debsudo dpkg --install squid_3.5.19-1_amd64.debsudo 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# Список портов, к которым разрешен доступ через прокси-сервер по протоколу HTTPacl Safe_ports port 80 # httpacl Safe_ports port 21 # ftpacl Safe_ports port 443 # httpsacl Safe_ports port 70 # gopheracl Safe_ports port 210 # waisacl Safe_ports port 1025-65535 # unregistered portsacl Safe_ports port 280 # http-mgmtacl Safe_ports port 488 # gss-httpacl Safe_ports port 591 # filemakeracl Safe_ports port 777 # multiling httpacl 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 managerhttp_access deny manager# Не ограничивать локальный доступ с сервераhttp_access allow localhost# Не ограничивать доступ администраторамhttp_access allow AdminsIP# Блокировать интернет конкретным пользователямhttp_access deny BlockInetExlWhite !WhiteList# Блокировать запрещенные сайтыhttp_access deny BlackList# Правила разрешающего доступ в интернет из локальной сети указанной в localnethttp_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 allsslproxy_cert_error allow allsslproxy_flags DONT_VERIFY_PEER# Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки ихacl blocked ssl::server_name "/etc/squid/BlackList.txt"# Устанавливаем защищенное соединение и считываем заголовок HTTPacl step1 at_step SslBump1ssl_bump peek step1# Закрываем соединение, если клиент заходит на ресурс указанные в blockedssl_bump terminate blockedssl_bump splice allsslcrtd_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 и GOPHERrefresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440# Нулевое время жизни для динамического контентаrefresh_pattern -i (/cgi-bin/|\?) 0 0% 0# Время жизни по умолчаниюrefresh_pattern . 0 20% 4320maximum_object_size 61440 KBminimum_object_size 3 KBcache_swap_low 90cache_swap_high 95# Максимальный размер объекта, сохраняемого в оперативной памятиmaximum_object_size_in_memory 512 KBmemory_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 taild -f /var/log/squid/access.log |