Установка Squid 3.5 на Ubuntu с поддержкой HTTPS протокола


Появилась необходимость на работе анализировать трафик интернета, с возможностью выставлять всякого рода запреты на пользование интернета сотрудникам и посещении сайтов как по HTTP протоколу, так и по HTTPS. Использовать будем для всех этих дел Squid 3.5 и развернут он будет на Ubuntu 16.10.

Первым делом обновляем систему до актуального состояния

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 taild -f /var/log/squid/access.log


 
B файерволе

-A PREROUTING -s 192.168.5.0/24 -p tcp -m tcp —dport 80 -j REDIRECT —to-port 3128

-A PREROUTING -s 192.168.5.0/24 -p tcp -m tcp —dport 443 -j REDIRECT —to-port 3129

-A POSTROUTING -s 192.168.5.0/24 -o eth0 -j SNAT —to-source 10.0.88.12



Источник: http://jakondo.ru/ustanovka-squid-3-5-19-na-ubuntu-14-04-5-lts-s-podderzhkoj-https-protokola/#comment-380

Коментарии к статье (1):

Наконец-то нашёл действительно рабочее руководство по squid.Огромное спасибо автору. Если на всех серверах удастся запустить -можно будет отказаться от платных контент-фильтров.Ещё раз спасибо автору статьи. Николай

Оставить коментарий:

Авторизироватся через соц. сеть:
Ваш E-mail не будет опубликован.


Пожалуйста, введите буквы, изображенные на картинке выше. Буквы не чувствительны к регистру.