- «прозрачный» squid с разграничением доступа
- Openssl
- Squid
- Техническое задание
- Генерируем self-signed сертификат
- Решение задачи
- 1. Установка и настройка Ubuntu 18.04
- 3. Мониторинг состояния сервера и настройка Firewall
- 4. Настройка роутера MikroTik для перенаправления трафика на Proxy
- 5. Альтернативная настройка для MikroTik и других роутеров
- Настраиваем squid
- Список источников
- Примечания автора
- Firefox
- Yandex browser
- Настройка dhcp и кеширующего dns
- Настройка nat и брандмауэра
- Настройка squid или как не купить платное решение
- Настройка прокси-сервера squid
- Настройка прокси-сервера squid3 с поддержкой ssl
- Настройка сертификата в windows 7
- Настройка сети
- Обновление системы
- Подмена сертификатов
- Редакторский дайджест
- Сборка squid из исходников.
«прозрачный» squid с разграничением доступа

Как готовить кальмара, думаю что не я один сталкивался с задачей настройки Squid’а для разграничения доступа сотрудникам предприятия, но при этом он должен быть «прозрачным». Другими словами конфигурация показанная далее удовлетворяет трём условиям:
Хотелось бы уточнить по последнему пункту, так как шлюз «прозрачный», то использовать доменную авторизацию пользователей мы не можем, по данной причине выбрано разграничение именно по ip-адресам.
В качестве базовой конфигурации использовались материалы из статьи «Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (x86). Так как установка и настройка компонентов в данной статье описаны достаточно подробно, я пропущу данную информацию.
Программное обеспечение использованное мной для тестирование конфигурации:
Итак, файл
/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_urls_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».
Спасибо за прочтение статьи.
Openssl
Итак, для начала нам надо собрать свой openssl. Тут всё довольно просто и никакой магии:
wget www.openssl.org/source/openssl-1.0.0k.tar.gztar -zxf openssl-1.0.0k.tar.gzcd openssl-1.0.0k
Что бы не было конфликтов с уже установленной версией openssl, указываем новый путь:
./config shared –prefix=/opt/squid/openssl –openssldir=/opt/squid/opensslmakemake installВсё, openssl собран и готов к использованию.
Squid
Сборка прокси сервера аналогична сборке любой программы (configure && make && make install), единственное это указание определённых ключей при компиляции:
wget www.squid-cache.org/Versions/v3/3.2/squid-3.2.7.tar.gztar -zxf squid-3.2.7.tar.gzcd squid-3.2.7./configure –prefix=/opt/squid –enable-ssl –enable-ssl-crtd –with-openssl=/opt/squid/openssl
—enable-ssl — включает поддержку ssl режима—enable-ssl-crtd — генерацией сертификатов занимается отдельный процесс, а не сам прокси сервер.—with-openssl — путь куда был установлен кастомный openssl
make allmake installТак, squid прокси сервер собран.
Техническое задание
Дано:
436-ФЗ и школа, в которой множество компьютеров, объединенных в сеть и подключенных к интернету через роутер MikroTik или любой другой.
Генерируем self-signed сертификат
Сертификат будет использоваться прокси сервером для создания динамических сертификатов веб сайтов.
cd /opt/squid/etc/openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
Так как файл squidCA.pem содержит приватный ключ, делаем его читаемым только для пользователя root:chmod 400 squidCA.pem
Решение задачи
Был найден неиспользуемый стационарный компьютер с двух-ядерным Intel-ом, 1 Гб ОЗУ и жестким на 80 Gb.
Для решения будет сделано следующее:
1. Установка и настройка Ubuntu 18.04
Процесс установки прост. Качаем дистрибутив Ubuntu Server 18.04 с официального сайта. Рекомендую качать со старым установщиком, так как новый, лично у меня, ушел в бесконечную загрузку во время установки. Записываем образ на флешку/диск любым удобным способом.
Для записи на флешку рекомендую использовать Rufus и в начале записи выбрать «Запись DD-образа». Далее, следуя информации на экране, устанавливаем систему. Остановимся только на выборе компонентов, где можно выбрать сразу OpenSSH и всё. Нам много не нужно, а что нужно, установим сами.
Итак, Ubuntu установлена. Сеть, если у вас DHCP, уже настроена. Войдем в режим суперпользователя, чтобы каждый раз не добавлять sudo к командам.
sudo -sВведем свой пароль и обновим систему.
apt-get update
apt-get upgradeУстановим текстовый редактор и файловый менеджер.
apt-get install nano mc
Чтобы сохранить файл в
nano
, необходимо нажать
Ctrl O
и следом
Y
. Выход из редактора осуществляется нажатием
Ctrl X
. Можно сохранить файл сразу перед выходом, нажав
Ctrl X
и следом
Y
Чтобы открыть файловый менеджер, введите
mc
. Откроется типичный DOS-овский NortonCommander или в Windows TotalCommander/FAR с двумя панелями. Хотя я привык работать с консолью, файловый менеджер тоже иногда помогает, например, найти нужный файл быстрее.
Если же у вас не DHCP или вы хотите отдельный IP-адрес для своего сервера, как этого захотел я, то перейдем к настройке.
В отличии от предыдущих версий Ubuntu, в новой 18.04 сеть настраивается уже не в привычном всем нам
/etc/network/interfaces
, а через netplan в файле
/etc/netplan/*.yaml
. Файл может называться по разному, но он там один. Сам же /etc/network/interfaces пишет нам следующее:

Также, если вы захотите обновиться с версии старше до 18.04, настройки сети останутся там, где и были. Netplan актуален только для чистой установки 18.04.
Приступим, все-таки, к настройке сети.
Для начала посмотрим название сетевого интерфейса, присвоенное ОС, и запомним его.
ifconfigТеперь откроем файл с настройками.
nano /etc/netplan/*.yamlВ нем уже должна быть настройка DHCP. Приведем файл к следующему виду.
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
название сетевого интерфейса:
dhcp4: no
dhcp6: no
addresses: [адрес/24]
gateway4: шлюз
nameservers:
addresses: [77.88.8.7, 77.88.8.3]
Вписываем свои интерфейс, адрес и шлюз. DNS рекомендую оставить эти — Яндекс.DNS Детский будет как дополнительная защита. Такой же DNS настроен у меня в роутере. В любом случае, необходимо указывать тот DNS, который раздает роутер.
Здесь необходимо обратить внимание на пробелы (именно пробелы, а не табуляция). Каждый, своего рода, пункт отделяется от предыдущего пробелом. К примеру, если после nameservers строку addresses не отделить пробелом, а выровнять со строкой выше, то, при попытке применения настроек, netplan выдаст ошибку.
Применим настройки.
netplan applyПерезагрузим сервер, на всякий случай.
rebootТакже, добавил альтернативный вариант настройки сети, как для DHCP, так и для статического IP, если не устраивает netplan.
Теперь необходимо включить прохождение пакетов сквозь наш сервер. Открываем файл /etc/sysctl.conf
nano /etc/sysctl.confИщем в нем строку
net.ipv4.ip_forward=1
и раскомментируем ее. Если стоит значение
0
, то меняем на
1
Введем команду для применения настройки
sysctl -p /etc/sysctl.confПосле настройки сети, рекомендую перейти сразу в терминал, и продолжать работу уже в нем. Для этого, если вы не выбрали на этапе установки OpenSSH, установим его.
apt-get install sshПо умолчанию SSH уже настроен на вход по пользователю/паролю на 22 порте, но вы можете настроить его для себя через, например, ключ авторизации и с другим портом в целях защиты сервера от атак извне. Как это сделать полно информации в интернете.
В качестве терминала я использую XShell. Вы можете использовать тот, который вам больше по душе.
DHCP-сервер и вторая сетевая карта нам не нужны, так как мы будем перенаправлять запросы пользователей на наш Proxy с помощью самого роутера.
Основа заложена. Теперь перейдем к установке и настройке Squid.
3. Мониторинг состояния сервера и настройка Firewall
Для мониторинга состояния нашего сервера установим утилиту
Webmin
, с помощью которой и настроим наш Firewall. Помимо этого, через нее можно следить за состоянием ЦП, ОЗУ и тд, обновлять пакеты, добавлять и настраивать компоненты и еще очень много всего. В ней есть свой терминал, правда корявый. Работает утилита через любой браузер, следовательно, можно подключиться к нашему серверу с любого компьютера внутри сети, что достаточно удобно, хоть и не безопасно. При желании, подключение можно ограничить только отдельными IP-адресами в «Управлении доступом по IP» в самом Webmin.
Перед началом установки, добавим репозиторий Webmin. Открываем sources.list.
nano /etc/apt/sources.listИ добавляем внизу строку.
4. Настройка роутера MikroTik для перенаправления трафика на Proxy
Будем считать, что вы уже скачали утилиту
WinBox
для удаленного управления, интернет и локальная сеть настроены, firewall на роутере чистый. вы знаете название интерфейса локальной сети (посмотреть можно в
IP — DHCP Server — DHCP
а) Заходим в WinBox, идем в IP — DHCP Server — Leases. В списке ищем IP компьютеров, для которых фильтрация не будет работать (директор, управление), жмем на них правой кнопкой и в меню выбираем Make Static.
Рядом с ними должна пропасть буква «D», что означает Dynamic. Теперь эти адреса будут сразу статически присваиваться данным компьютерам, вне зависимости от времени аренды, по MAC-адресу. Если ноутбук, который используется по Wi-Fi и по кабелю, то необходимо выбрать Make Static на оба MAC-адреса.
5. Альтернативная настройка для MikroTik и других роутеров
Данный вариант подойдет как для роутера MikroTik, так и для любого другого, даже самого простого (за исключением провайдерских арендованных кусков сами знаете чего). В этом случае мы реализуем разделение доступа в интернет не на роутере, а на самом Squid. Итак, начнем.
а)
Будем считать, что вы дошли до этого пункта, выполнив все вышестоящие, включая настройку перенаправления на Proxy в MikroTik. Для беспроблемной работы описываемого варианта, нам необходимо отменить подпункт
е)
пункта
3.4
настоящей статьи. Можно отменить весь пункт 3.4 (оставив, пожалуй, подпункт
а)
для того, чтобы наши IP не изменялись), но это по желанию — нам важно отменить саму маршрутизацию. Для этого идем в
IP — Routes
, ищем наш маршрут, выделяем его и жмем на
красный крестик
(не плюсик, а крестик, который рядом с галочкой). Маршрут станет серым => он отключен. Фильтрация также отключилась, теперь все клиенты идут в интернет напрямую через роутер.
б) Теперь заходим на наш сервер и переходим в папку со Squid
cd /etc/squid/
Открываем файл конфигурации
nano squid.confИ добавляем в него по блокам:
В первый блок
сразу после строки с acl localnet…
Настраиваем squid
Добавим следующие строки в squid.conf файл
Список источников
При создании статьи были использованы различные материалы с сайтов
, а также личные знания и опыт.
При редактировании и дополнении статьи очень помогли следующие пользователи:
. Огромная благодарность им за содействие и помощь.
Примечания автора
- Любые работы с сервером нужно производить в режиме суперпользователя, добавляя sudo перед командой, или один раз введя команду sudo -s.
- Squid открываетзакрывает доступ ко всему ресурсу целиком, так что одну статью, например, на Википедии заблокировать не получится. Но никто не мешает вам изучить регулярные выражения и тестировать.
- Списки сайтов могу скинуть, обращайтесь. Сюда вписывать не стал, так как в одном белом списке более 1000 сайтов.
К сожалению, данный вариант настройки не дает сделать раздельные списки для отдельных IP-адресов в Squid. В логах Squid только один IP-адрес — сам Mikrotik. Если хотите раздельные списки, то надо поднимать на сервере DHCP и делать его шлюзом, но это тема для другой статьи. Надеюсь, в комментариях гуру подскажут, что поправить в статье, чтобы в логах были IP компьютеров.— решено благодаря подсказке пользователя Barsook- Для работы Squid с большим количеством клиентов (более 50) необходимо минимум 1 Гб ОЗУ. Желательно больше, так как Squid ест память. Вы можете проверить состояние памяти, введя команду top.
- Я рекомендую использовать оба варианта настройки роутера, так как, если в сетевых настройках явно указать другой шлюз (сам роутер), то обойти блокировку можно.
UPD1: добавил альтернативную настройку сети и FirewallUPD2: добавил альтернативный вариант настройки роутера, где исправлены проблемы с отображением адресов в логах Squid.UPD3: добавил исправление в 3.1 — включение прохождения пакетов сквозь сервер, которое забыл добавить изначально. Иначе не работает интернет. Спасибо Dmitry1986 за тестирование статьи.
Firefox
Сейчас большинство сайтов используют технологию HSTS для предотвращения MiTM атак, поэтому если вы хотите настроить Squid для фильтрации трафика в своей организации, вам следует добавить сертификат squid.der сгенерированный на предыдущем шаге в браузер.
Затем нажмите кнопку Импортировать и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.
Yandex browser
Откройте Настройки -> Системные -> Управление сертификатами -> Центры сертификации.
Затем нажмите кнопку Импорт и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.
Настройка dhcp и кеширующего dns
В наших решениях эту роль обычно исполняет dnsmasq, не будем отступать от традиций и в этот раз. Установим данный пакет:
apt install dnsmasqДля настройки откроем файл /etc/dnsmasq.conf и внесем некоторые изменения. Прежде всего ограничим адреса, которые будут слушать наши службы:
listen-address=127.0.0.1, 192.168.187.1Затем зададим пул для выдачи адресов через DHCP и срок аренды:
dhcp-range=192.168.187.120,192.168.187.199,255.255.255.0,12hДля одноранговой сети будет неплохо указать DNS-суффикс, чтобы избежать сложностей с разрешением плоских имен:
local=/interface31.lab/Перезапустим службу:
service dnsmasq restartТеперь проверим получение адреса на клиенте и возможность доступа с него в интернет, если вы не допустили ошибок, то все должно работать.
Просмотреть список выданных в аренду адресов можно командой:
cat /var/lib/misc/dnsmasq.leasesНастройка nat и брандмауэра
Существуют разные взгляды на настройку брандмауэра, но общепринятой является схема с нормально открытым брандмауэром для внутренней сети (разрешено все, что не запрещено) и нормально закрытым для внешней (запрещено все, что не разрешено). Ниже будет приведена минимально достаточная конфигурация.
Откроем созданный нами файл /etc/nat и внесем в него следующие строки:
Настройка squid или как не купить платное решение
Всем привет!
Часто в организациях используем разного рода прокси, прокси как составляющая программного шлюза или самостоятельный классический вариант squid анализатор логов и т.п.
Мы пытались внедрить решение от Ideco и ИКС, в итоге остановились на squid. Под катом история пути и техническая информация по настройке старого доброго кальмара.
Начну пожалуй с того, что конечно странно на habr в 2021 году видеть статью про настройку squid, но тем не менее, даже в нынешние время платные продукты могут уступать по некоторым пунктам open source софту который так или иначе лежат в основе платного продукта с красивым интерфейсом.
Всё началось с того, что руководство дало ясно понять что мы можем позволить себе купить интернет биллинг.
Требования следующие: интеграция в Windows AD, полное управление пользователями из AD, шейпер скорости, фильтрация по типу контента, по спискам сайтов, возможность дать доступ всей сети к локальным ресурсам компании.
В сети компании насчитывается свыше 550 компьютеров. Большинству из них нужен доступ к внутренним ресурсам.
Все разворачивалось в виртуальной среде, сервер виртуализации Hyper-v core — Неверный выбор, о причинах изложу в конце статьи.
Немного о выборе конкурсантов, UserGate помню его из времен начала работы в IT, по старой памяти приложение windows — по умолчанию не подходит.
Интернет Контроль Сервер (ИКС)- дело дошло до тестов. Удалось корректно загрузить из 10 только 2 раза, отмечая его отличную нестабильность пошли дальше. К стати, не могу не отметить юмор разработчиков, кто в курсе тот поймет! Продукт развивается, может быть уже проблем нет, но и задача решена.
Ideco — мне понравилось, отличное решение, но в функционал включен не только интернет биллинг, это полноценный шлюз со всеми плюшками, для нас лишнее. Но тем не менее он прошел полный тест, возникло 2 непреодолимых препятствия:
1. Невозможно дать доступ к определенным ресурсам всей сети или всем пользователям домена — по умолчанию не считая таких пользователей за пользователя которого нужно лицензировать.
1.1 — Из пункта 1 вытекает немалая цена, т.к. у нас в компании довольно много компьютеров которым необходимо подключение к внутренним web сервисам и не нужен доступ в интернет, покупать лицензии для использования внутренних ресурсов мы не планировали, также не планировали разводить зоопарк серверов раздающих интернет.
2. IP адрес компьютера жестко привязывается к имени пользователя который первый прошел аутентификацию на прокси, так при смене сотрудника нужно было в админ. панели удалять привязку в ручном режиме, что конечно не отвечает требованию управлять всем через AD.
Кстати, шлюз ideco доступен в бесплатной версии до 40 пользователей и без привязки к AD. Также появился IDECO SELECTA, или я не заметил его выпуска или он был выпущен уже после всех тестов.
После всех пройденных этапов было решено своими силами сделать все на squid но с поправкой на наши технические требования, что из этого получилось читайте далее.
Начнем с того, что корректных и полных мануалов в сети нет, есть некоторые части, но все инструкции сводились на нет новыми релизами сквида.
Мы используем ubuntu server, следовательно следующая информация актуальна для этой ОС и с другими ОС может серьёзно различаться.
Все в командной строке нужно делать из под sudo, далее дописывать перед каждой командой sudo не буду.
Настройка OS ubuntu server 16.04:
apt-get update
apt-get upgrade
apt-get install mc g libecap3-dev libdb-dev libldap2-dev libpam0g-dev libldb-dev libsasl2-dev libkrb5-dev gcc libssl-dev krb5-user libpam-krb5 libkrb5-3 libsasl2-modules-gssapi-mit linux-virtual-lts-xenial linux-tools-virtual-lts-xenial linux-cloud-tools-virtual-lts-xenial linux-image-virtual linux-tools-virtual linux-cloud-tools-virtual squid3
Т.к. мы используем Hyper-v виртуализацию то мы установили необходимые пакеты.
Качаем с оф сайта сквид, в данном посте разбираем версию 3.5.26, для других версии возможно будет неактуально. UPD в докере настроил 3.5.28 полет нормальный.
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.26.tar.gz
Распаковываем в home или любой другой каталог.
tar xzf squid-3.5.26.tar.gz
cd /home/squid-3.5.26/chmod x configure Указываем какие пакеты нам нужны, можете ненужное удалить или что-то добавить. Кому-то покажется что тут куча лишнего. Список взять из установленной версии сквида и добавлены дополнительные пакеты.
./configure '--enable-ssl' '--with-openssl=/usr/lib/ssl/' '--disable-ipv6' '--enable-ssl-crtd' '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' 'BUILDCXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-build-info=Ubuntu linux' '--enable-linux-netfilter' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'
make
make install
–with-openssl=/usr/lib/ssl/ — указываем путь до openssl, указан дефолтный путь в ubuntu server.
–disable-ipv6 — выключаем ipv6 — о причинах читайте ниже.
–enable-ssl-crtd — это для связки генерации ssl сертификатов для bump.
Возможно будут зависимости, нужно их установить.
По умолчанию все устанавливается в /etc/squid/
Создаем папку внутри /etc/squid для ssl сертификатов:
mkdir /etc/squid/ssl/privateСоздаем сертификат:
Переходим в каталог
cd mkdir /etc/squid/ssl/privateСоздаем ключ
openssl genrsa -aes256 -out private.pem 2048Создаем сертификат
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout private.pem -out public.pemКонвертируем сертификат в понятный для браузера формат
openssl x509 -outform der -in public.pem -out squid3domainlocal.derСоздаем базу сертификатов:
/usr/lib/squid/ssl_crtd -c -s /etc/squid/ssl/ssl_db/Назначаем доступ:
chown root:proxy -R /etc/squid/ssl
chmod 640 -R /etc/squid/ssl/private
chmod 660 -R /etc/squid/ssl/ssl_db
Обращаю Ваше внимание на то, что имя прокси сервера и имя указанное при создании сертификата должно быть одинаковое. Формат squid3.domain.local.
Полученный squid3domainlocal.der через групповые политики или вручную вносим в доверенные центры сертификации. Прокси сервер в браузере указываем не ip а полное имя компьютера, к примеру squid3.domain.local.
Создаем обычного пользователя в домене, пусть будет squid3.
Для прохождения аутентификации через kerberos нам нужен keytab пользователя squid3 для principal HTTP/squid3.DOMAIN.LOCAL@DOMAIN.LOCAL, при стандартном входе в домен через net ads создается keytab /etc/krb5.keytab, но в нем указаны principal не http а host. Что делает невозможным проходить аутентификацию пользователей через web браузер. Если Вы расположили keytab в /etc/krb5.keytab и после вводите в домен саму машину, то keytab просто будет дополнен новыми principal.Но обращаю Ваше внимание на то, что устанавливать пакет samba и вводить машину в домен не нужно, достаточно сгенерированного keytab для пользователя.
Далее идем на домен контроллер и выполняем нехитрую команду:
ktpass -princ HTTP/squid3.DOMAIN.LOCAL@DOMAIN.LOCAL mapuser squid3@DOMAIN.LOCAL -crypto AES128-SHA1 -pass XXXXXXXXXXXXXX -ptype KRB5_NT_PRINCIPAL -out c:krb5.keytabПереносим полученный файл на прокси сервер и далее помещаем в удобное расположение, я выбираю /etc/krb5.keytab.
Если Вы хотите сделать авторизацию еще и для web сайта, статистика или внутренний портал компании то нужно создать группу и включить туда пользователей proxy и www-data.
Создаем группу:
groupadd allowreadkeytabДобавляем необходимых пользователей в группу:
adduser proxy allowreadkeytab
adduser www-data allowreadkeytabНазначаем владельцев на krb5.keytab
chown root:allowreadkeytab /etc/krb5.keytabЕсли нет необходимости дополнительным сервисам давать доступ, то группу не создаем, просто выставляем владельцев и права:
chown root:proxy /etc/krb5.keytabНазначаем доступ:
chmod 640 /etc/krb5.keytabПолучаем:
-rw-r----- 1 root allowreadkeytab /etc/krb5.keytabИли
-rw-r----- 1 root proxy /etc/krb5.keytabЧтение и запись для root, только чтение для allowreadkeytab и без доступа для остальных.
Настраиваем krb5.conf
mcedit /etc/krb5.confСохраняем.
Обращаю Ваше внимание, что ниже squid.conf не будет содержать все acl и все правила, будут лишь по 1 примеру настройки, полная настройка acl и листами доступа к сайтам и т.п. будет слишком объемной. Ниже приведенный конфиг можно рассматривать как требующий доработки под свои нужды.
Переходим к настройке squid:
mcedit /etc/squid/squid.conf
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow purge localhost
http_access deny purge
http_access deny CONNECT !SSL_portsТут важный момент, есть сайты которые поднимают соединение непосредственно с «компьютером», и аутентификация пользователя не производится. Как следствие происходит блокировка соединения. Для обхода этой проблемы дается доступ конкретному ip к конкретному сайту.
!!! Важное примечание !!! Правило должно быть расположено выше правил с аутентификацией basic, ntlm, kerberos и др.
acl authip src "/etc/squid/pools/ip.txt"
acl domainautip dstdomain "/etc/squid/exceptions/domain.txt"
http_access allow authip domainautip
http_reply_access allow authip domainautipОпределяем aclы:
→ Документация
Acl для определения типа контента:
acl application_mime rep_mime_type application/octet-stream
acl video_mime rep_mime_type “/etc/squid/ban/mime_type_video.txt”
Также фильтровать некоторый контент можно по url, для этого создаем acl:
acl blockextention urlpath_regex -i “/etc/squid/ban/blockextention.txt”
Есть еще любопытный acl allowerrorsert, т.к. мы не разрешаем по умолчанию доступ к сайтам с кривыми сертификатами, я использую allowerrorsert для определения перечня разрешенных сайтов с «кривыми» ssl. Об этом не много ниже.
acl banksites dstdomain "/etc/squid/allow/bank.txt"
acl allofficesites dstdomain "/etc/squid/allow/alloffice.txt"
acl manual dstdomain "/etc/squid/ban/manual.txt"
acl allowerrorsert dstdomain "/etc/squid/exceptions/allowerrorsert.txt"
Также есть возможность управлять доступом к сайтам на основе ssl правил, но на мой взгляд эффективнее управлять через http_access. Вот пример acl для использования в правилах ssl:
acl sslproxy ssl::server_name "/etc/squid/ban/proxy.txt"Ниже мы еще вернемся к этому типу acl и их применению.
Позволяет видеть в расширенном режиме запросы POST и mime.
strip_query_terms off
log_mime_hdrs onАутентификация и авторизация пользователя в группе active direcory через kerberos:
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -s HTTP/squid3.domain.local@DOMAIN.LOCAL
auth_param negotiate children 20 startup=10 idle=10
auth_param negotiate keep_alive on
Тут следует остановиться и разобрать подробнее, children — максимальное количество процессов доступные для запуска, startup количество процессов которые запущены всегда, idle максимальная очередь к помощнику при превышении указанного числа будет запускаться новый процесс помощника.
Небольшое отступление по работе авторизации:
Тут есть особенность, дело в том, что некоторые сайты пытаются подключить вагон разных ресурсов и картинок с других сайтов, собрать кучу статистики и прочее, каждый запрос проходит авторизацию это может вызвать большую очередь к процессу помощника авторизации, можно просто увеличить children, увеличить idle… но это только на первый взгляд, запросов от 1 пользователя может быть несколько десятков тысяч, что за собой несет большую очередь. При появлении большой очереди нагрузка на CPU зашкаливает. В условиях большого количества пк и малой доли пользователей с полноценным доступом в интернет, установленный на пк chrome создавал прям удивительное количество соединений — 500 тыс. запросов на clients1.google.com в сутки. Как следствие были пики очередей.
Подробности решения в конце статьи, где будут описаны некоторые технические моменты решение возникших проблем в процессе отладки.
Поиск пользователя в группе:
external_acl_type domainusers ttl=300 negative_ttl=60 ipv4 %LOGIN /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -T d09fd0bed0bbd18cd0b7d0bed0b2d0b0d182d0b5d0bbd0b820d0b4d0bed0bcd0b5d0bdd0b0 -D DOMAIN.LOCAL
external_acl_type allow-all ttl=300 negative_ttl=60 ipv4 %LOGIN /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g internet-allow-all -D DOMAIN.LOCALДве строки выше выполняю 1 функцию, загружают помощника для поиска пользователя в группе, можете сами выполнить в командной строке /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g internet-allow-all -D DOMAIN.LOCAL жмем enter и набираем имя пользователя, если пользователь будет найден в указанной группе, то ответ будет OK если нет то ERR. Обращаю внимание на то, что указанная группа internet-allow-all создана в AD.
Если Вы обратили внимание, то две строки отличаются, в 1 непонятный набор букв и цифр во второй все ясно… В первой строке указана группа «Пользователи домена», не желая разбираться с кириллицей в конфиге сквида и работе хелпера, я решил сделать так, это единственная группа в AD которая связана с этим сервисом имя которой написано кириллицей. Синтаксис тоже изменен, с g что означает группу на T.
Обещал рассказать почему отключил ipv6, это была длинная история, не шла авторизация у пользователя потому что я не указал в строке external_acl_type…….ipv4 т.к. мы не используем ipv6 да и мало кто использует в локальных сетях решено было вообще отключить чтобы избежать подобных проблем. На сёрфинге интернета это тоже никак не отражается.
Группы для ограничения скорости:
external_acl_type disable-speed ttl=300 negative_ttl=60 ipv4 %LOGIN /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g internet-deny-speed -D DOMAIN.LOCAL
external_acl_type allow-speed ttl=300 negative_ttl=60 ipv4 %LOGIN /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g internet-allow-speed -D DOMAIN.LOCALinternet-allow-speed — Группа созданная в AD.
Так как группы и пользователей мы получаем из внешнего хелпера, нам нужно определить acl в синтаксисе squid для работы http_access и т.д.
acl domainusers external domainusers
acl allow-all external allow-all
acl allow-speed external allow-speed
acl disable-speed external disable-speed
Далее следуют разрешающие и блокирующие правила. Правила работают как обычно по цепочке, все что cверху имеет большее значение.
http_access allow localhost
http_access deny manual
http_reply_access deny application_mime
http_access allow allow-all
http_reply_access allow allow-all
http_access allow domainusers banksites
http_access deny domainusersТут начинается bump, в строке http_port указываем порт и указываем функцию ssl-bump далее включаем генерацию сертификатов, далее размер кеша, далее указываем сам сертификат к слову который добавлен в качестве доверенного центра сертификации на компьютерах домена, далее ключ.
Схема работы следующая, клиент заходит на сайт google.com, клиент устанавливает соеденение ssl с прокси, а прокси в свою очередь с сайтом, прокси поднимает ssl с сайтом и отдельно ssl с клиентом выступая при этом посредником.
эта схема при полном бампе соединения, можно разбирать не полностью, а только для 1 из сторон, я не нашел этому применения, поэтому мы это не используем. К тому же чтобы видеть весь трафик открыто, как http, подходит только эта схема.
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/private/public.pem key=/etc/squid/ssl/private/private.pemнастройки помощника который генерирует ssl сертификаты для сайтов:
sslcrtd_program /usr/lib/squid/ssl_crtd -s /etc/squid/ssl/ssl_db -M 16MB
sslcrtd_children 20 startup=10 idle=10
visible_hostname = squid3.domain.localCоздаем acl с шагами bump, существует всего 3 шага, sslbump1 смотрит на открытую информацию в сертификате, та которая доступна всем.
sslbump2 создает соединение с сайтом sslbump3 создает соединение с клиентом.
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
Указываем acl которые будут внесены в исключения при работе с sslbump
acl sslbanksites ssl::server_name "/etc/squid/exceptions/bank.txt"
acl allowsplice ssl::server_name "/etc/squid/exceptions/allowsplice.txt"В bank.txt и allowsplice.txt находятся имена доменов.
Это правило разрешает принимать сертификаты с ошибкой, т.e. просроченный, самоподписанный, выданных на другой хост и т.п. Мы создавали acl для этого правила выше.
sslproxy_cert_error allow allowerrorsertsplice — пропустить все последующие действия т.е. не делать bump пропустить как есть.
peek — подсмотреть доступную инфу без полного бампа
terminate — закрыть соединение, не используем, фильтруем через http_access
bump — «влезает» в соединение, делает https видимым как http
ssl_bump splice allowsplice
ssl_bump splice sslbanksites
ssl_bump peek step1 all
ssl_bump bump step2 all
ssl_bump bump step3 allЗакрываем доступ всем.
http_access deny all
icp_access deny all
htcp_access deny all
Прочие настройки
cache deny all
error_directory /etc/squid/errors/
forwarded_for off
Режем скорость, указываем сколько пулов задержки мы используем:
delay_pools 3VIP-пользователи, избранные сайты без ограничений по скорости
delay_class 1 1
delay_access 1 allow allow-speed
delay_access 1 allow banksites
delay_parameters 1 -1/-1
delay_access 1 deny all
В нерабочее время — Интернет отключается (до 100КБ/сек.)
delay_class 2 2
delay_access 2 allow !workhours
delay_parameters 2 -1/-1 10000/10000
delay_access 2 deny all
Ограничение на закачку — до 10MB загружают весь канал без ограничений, свыше только 100 КБ/С
delay_class 3 2
delay_access 3 allow disable-speed
delay_parameters 3 -1/-1 32000/10485760
delay_access 3 deny all
В синтаксисе лога изменена буква a на большую A, вот тут: %6tr %>A. Это дает возможность в логах видеть имя компьютера вместо его IP адреса, что конечно удобней.
logformat squid %ts.tu %6tr %>A %Ss/>Hs %<st %rm %ru %[un %Sh/%<a %mtНе много о проблемах и об особенностях которые возникали.
Прокси сервер выведен в отдельную dmz, файрволом жестко ограничен доступ в dmz и из нее. Т.к. сквид постоянно опрашивает dns и kerberos по udp преимущественно, то он незамедлительно превышал допустимое количество подключений с 1 ip, на сервер AD который находится в другой dmz, соединения сбрасывались. Проблема была неочевидная, хелпер авторизации падал, клиент получал окно аутентификации.
Ошибка выглядит так:
support_krb5.cc(64): pid=36139 :2021/10/24 08:53:51| kerberos_ldap_group: ERROR: Error while initializing credentials from keytab: Cannot contact any KDC for realm ‘DOMAIN.LOCAL’
Решили проблему подняв bind на прокси сервере, количество запросов значительно уменьшилось. В целом можно было отключить ограничения на файрволе, что собственно и сделали, но bind всё же хорошая идея позволяющая значительно снизить количество соединений.
Была еще 1 ошибка:
support_sasl.cc(276): pid=8872 :2021/10/24 06:26:31| kerberos_ldap_group: ERROR: ldap_sasl_interactive_bind_s error: Local error
support_ldap.cc(957): pid=8872 :2021/10/24 06:26:31| kerberos_ldap_group: ERROR: Error while binding to ldap server with SASL/GSSAPI: Local error
В bind нужно скопировать обратную зону.
UPD — Самое интересное
Возникла проблема с высокой нагрузкой на cpu и io, проц грузил в основном negotiate_kerberos io грузил ext_kerberos_ldap_group_acl, понятное дело что negotiate_kerberos запускал ext_kerberos_ldap_group_acl, нагрузка была не постоянная, два раза в день по 30 минут.
Изменение соотношения количества children и idle нужного результата не дало. В процессе отладки была ясная картина, при любой конфигурации в период пиков запускалось максимальное количество процессов аутентификации. Был проанализирован access.log, как результат анализа было выделено то, что в момент пиковой нагрузки было очень много ssl соединений, это натолкнуло на мысль что проблема кроется не в авторизации а в ssl_bump, для эксперимента был отключен ssl_bump, как результат было полное отсутствие нагрузки на протяжении всего дня. В целом в течении дня работа кальмара и его помощников не вызывала нарекании, но в определенные моменты приходило огромное количество соединений, сухие цифры: от 1 компьютера в единицу времени (5-15 мин) пришло 10000 запросов на ssl соединение которое попадает под правило bump. В другой день тоже самое с другого компьютера на .*whatsapp.net.
В конечном итоге ssl_bump включен, работает без нареканий. Если идет куча запросов на хост который недоступен по таймауту, вот тут возникают пики. На уменьшение очереди в основном повлияло исключение clients1.google.com и clients2.google.com из прокси.
Решать дать доступ к clients1.google.com и clients2.google.com, отключить задание на обновление или исключить эти хосты из прокси решать Вам.
Относительно hyper-v, в целом всё работает стабильно, uptime обычно превышает два месяца, но наступает тот день когда абсолютно на ровном месте без ошибок в логах и какой-либо нагрузки зависают виртуальные машины или выполняется их перезагрузка, но при этом последующая загрузка не приводит загрузке рабочего состояния. Приходится делать сброс и последующая загрузка производится нормально, прошу прощения за тавтологию. При всех равных на указанном сервере крутится две виртуалки ubuntu server 16.04 и у обоих происходит ода и та же проблема с разницей между ними в несколько дней, потом опять uptime не менее 2 месяцев. Для решения этой проблемы переносим сквид в докер, следующую статью оформлю про настройку сквида в докере, в целом мало чем отличается кроме целой кучи зависимостей.
Настройка bind:
nano /etc/bind/named.conf.options Редактируем и вставляем:
zone "domain.local" {
type slave;
masters { 192.168.XX.XX; 192.168.XX.XX;};
file "bak.domain.local";
forwarders {};
zone "XX.168.192.in-addr.arpa" {
type slave;
masters { 192.168.XX.XX; 192.168.XX.XX;};
file "XX.168.192.in-addr.arpa.zone";
};
Анализатор логов:
Squidanalyzer
→ Сайт
→ Инструкции: раз и два
Для его работы нужно установить apache2:
apt-get install apache2Рассказывать о том, как настаивать его не буду, по ссылкам довольно понятно и доступно. Обращу внимание лишь на одно, пока не будет сгенерирован первый отчет — по web адресу ничего не появится, будет ошибка.
Как только будет сформирован первый отчет, Вы получите заветную страничку с отчетами.
Стоит отметить что страницу с отчетами можно стилизовать под Вашу компанию, сменить логотипы, подписи, фон и т.п. Часть следует менять в основном конфиге:
/etc/squidanalyzer/squidanalyzer.conf
И в скрипте который является шаблоном для /usr/bin/squid-analyzer:
/usr/local/share/perl/5.22.1/SquidAnalyzer.pm
Статья писалась с перерывами, периодически дополнялась и корректировалась, надеюсь она будет полезна.
Ниже листинг подчищенного конфига, его следует использовать как образец, не подлежит копипасту, это не даст рабочий экземпляр, нужно создавать файлы которые указаны в acl, заполнять их и т.д.
В процессе отладки очень помог awk, команда которая выводит и группирует столбцы:
cat /var/log/squid/access.log | awk '{print $номерстолбца}' | cut -d: -f1 | sort | uniq -c | sort -nМожно добавлять grep.
Для конвертации формата даты и времени в логе кальмара можно использовать:
%tl %6tr %>A %Ss/>Hs %<st %rm %ru %[un %Sh/%<a %mt
Настройка прокси-сервера squid
Сделаем копию конфигурационного файла squid на всякий случай:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.saveОчистим файл от дефолтной конфигурации
cp /dev/null /etc/squid/squid.confИ поправим наш файл squid :
sudo nano /etc/squid/squid.confНастройка прокси-сервера squid3 с поддержкой ssl
К сожалению, в репозиториях нет пакета squid с поддержкой SSL, поэтому потребуется собрать его самому, как это сделать мы рассказывали в статье Сборка Squid 3.5 с поддержкой SSL из исходных кодов для Debian / Ubuntu, поэтому будем считать, что вы уже выполнили эту процедуру, либо используете уже собранные нами пакеты.
Будем считать, что собранные пакеты squid скачаны и располагаются в отдельной директории. Перейдем в нее и установим пакеты командой:
dpkg -i squid*.debВ процессе установки вы получите сообщения о неудовлетворенных зависимостях, поэтому разрешим их командой:
apt install -f Чтобы наши пакеты не были перезаписаны пакетами из репозитория при обновлении их следует зафиксировать:
apt-mark hold squid
apt-mark hold squid-common
apt-mark hold squidclientЕсли у вас был уже установлен squid, то просто удалите его и установите наши пакеты, все настройки при этом будут подхвачены автоматически, хотя на всякий случай сохраните куда-нибудь файл конфигурации:
cp /etc/squid/squid.conf /root/squid.conf.backУстановив пакеты с поддержкой SSL, перейдем к конфигурированию нашего прокси. Для этого откроем файл /etc/squid/squid.conf, все указанные ниже опции надо либо найти и раскомментировать, приведя к указанному виду, либо создать.
Следующий блок, задающий стандартные ACL-элементы присутствует по умолчанию:
Настройка сертификата в windows 7
Щелкаем два раза на сертификате и в появившемся окне нажимаем Установить сертификат.
Выбираем пункт Поместить все сертификаты в следующее хранилище.
Далее выбираем Доверенные центры сертификации
На предупреждение отвечаем Да
После импорта вашего сертификата сайты начнут открываться, но при просмотре сведенья о сертификате вы увидите что для всех сайтов установлен ваш личные сертификат.
Если есть вопросы, то пишем в комментариях.
Настройка сети
В данном примере у нас будет статическая настройка внешнего сетевого интерфейса, если же вы используете динамические подключение, такие как PPPoE или PPTP, то для их настройки обратитесь к соответствующим инструкциям (по ссылкам).
Для настройки сети откроем файл /etc/network/interfaces:
nano /etc/network/interfacesИ внесем в него следующие изменения (названия интерфейсов и адреса указаны только для примера):
auto ens33
iface ens33 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-nameservers 172.18.0.1auto ens34
iface ens34 inet static
address 192.168.187.1
netmask 255.255.255.0post-up /etc/nat
Если внешний интерфейс получает настройки по DHCP, то используйте следующие настройки:
auto ens33
allow-hotplug ens33
iface ens33 inet dhcpСразу создадим файл для хранения настроек брандмауэра и сделаем его исполняемым:
touch /etc/nat
chmod x /etc/natПерезапустим сеть:
service networking restartПосле чего у вас на сервере должен появиться интернет, сразу следует обновить систему и установить необходимый минимум утилит для администрирования:
apt update
apt upgrade
apt install mc sshОбновление системы
Первым делом обновим наш сервер:
sudo apt update && sudo apt dist-upgrade -yПодмена сертификатов
Сгенерируем свой сертификат… лет так на 10 🙂
proxyCA.pem — и сертификат и ключ в одном файле
cd /etc/squid/
sudo openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout proxyCA.pem -out proxyCA.pemСоздадим сертификат для установки его на компьютеры пользователей (корневой)
sudo openssl x509 -in proxyCA.pem -outform DER -out squid.derСкопируем squid.der на свой компьютер, это сертификат для установки его на клиентские компьютеры… Установим его либо руками, либо групповой политикой. Как это сделать будет описано далее.
Генерируем файл параметров
sudo openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048Настроим права на использование файла SSL-сертификата и файла параметров
sudo chown proxy:proxy /etc/squid/bump_dhparam.pem
sudo chmod 400 /etc/squid/bump_dhparam.pem
sudo chown proxy:proxy /etc/squid/proxyCA.pem
sudo chmod 400 /etc/squid/proxyCA.pemВыставляем права на /var/spool/squid/ и /var/log/squid/
sudo chown proxy:proxy -R /var/spool/squid
sudo chown proxy:proxy -R /var/log/squid/Создаем каталог для базы данных сертификатов и инициализируем базу данных
sudo mkdir -p /var/lib/squid
sudo rm -rf /var/lib/squid/ssl_db
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
sudo chown -R proxy:proxy /var/lib/squidСледующим шагом включаем ip_forwarding для разрешения проходящего трафика через сервер:
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
Сборка squid из исходников.
Включим возможность использования исходников, для этого необходимо отредактировать файл /etc/apt/sources.list. Раскомментируем строки, которые начинаются на «deb-src»
sudo nano /etc/apt/sources.listПосмотреть полный default source.list можно в данной статье.
После редактирования обновляемся еще раз:
sudo apt updateДалее установим необходимые для сборки пакеты:
sudo apt install openssl devscripts build-essential dpkg-dev libssl-dev libsasl2-modules-gssapi-mitЧтобы не засорять систему, всю сборку я буду проводить из под новой директории. Для этого создадим её и перейдем в нашу директорию следующими командами:
mkdir /home/squid
cd /home/squidСкачиваем все необходимое для SQUID:
sudo apt build-dep squid -yСкачиваем сами исходники нашего прокси-сервера:
sudo apt source squidВ случае если появится предупреждение о прав, устанавливаем их на скачанный файл и повторяем предыдущее действие:
sudo chmod 777 squid_4.10-1ubuntu1.3.dsc
sudo apt source squidПереходим в директорию с исходниками:
cd squid-4.10/