Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и HTTPS. Разработан сообществом как программа с открытым исходным кодом. Все запросы выполняет как один неблокируемый процесс ввода-вывода.
Проверенная комбинация. Делал на FreeBSD 10.0 (i386). Читать →
Современное информационное общество требует непрерывного подключения к сети для выполнения деловых задач, обмена информацией и обеспечения коммуникации. Однако, в мире, где киберугрозы становятся все более распространенными, обеспечение безопасности и защиты данных становится неотъемлемой частью успешного функционирования компаний и организаций. Читать →
Сегодня в статье рассмотрим Установку и настройку прокси сервера squid на операционной системе Ubuntu Server 20.04 LTS. Сразу предупреждаю, что данная инструкция справедлива только для Ubuntu 20.04. Если у вас более ранняя версия, то вам необходимо обновится до 20.04, вот инструкция как это сделать.
Squid (прокси-сервер) — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы.
В настоящее время сайтов с поддержкой протокола http становится все меньше и меньше, а вот на протоколе https количество доменов непрерывно растет, причем гигантскими шагами. В связи с этим фильтрация squid`ом http трафика бессмыслена. Но в репозитории Ubuntu находится squid без поддержки SSL. До сих пор не понимаю почему не залить squid с поддержкой SSL, но до ладно, зато есть исходники из которых мы сами можем собрать пакет с поддержкой HTTPS. И так поехали:
Обновление системы
Первым делом обновим наш сервер:
sudo apt update && sudo apt dist-upgrade -y
Сборка squid из исходников.
Включим возможность использования исходников, для этого необходимо отредактировать файл /etc/apt/sources.list. Раскомментируем строки, которые начинаются на «deb-src»
sudo nano /etc/apt/sources.list
Посмотреть полный default source.list можно в данной статье.
Чтобы не засорять систему, всю сборку я буду проводить из под новой директории. Для этого создадим её и перейдем в нашу директорию следующими командами:
mkdir /home/squid
cd /home/squid
Скачиваем все необходимое для SQUID:
sudo apt build-dep squid -y
Скачиваем сами исходники нашего прокси-сервера:
sudo apt source squid
В случае если появится предупреждение о правах, устанавливаем их на скачанный файл и повторяем предыдущее действие:
Создадим сертификат для установки его на компьютеры пользователей (корневой)
sudo openssl x509 -in proxyCA.pem -outform DER -out squid.der
Скопируем squid.der на свой компьютер, это сертификат для установки его на клиентские компьютеры… Установим его либо руками, либо групповой политикой. Как это сделать будет описано далее.
Следующим шагом включаем ip_forwarding для разрешения проходящего трафика через сервер:
sudo echo 1 >> /proc/sys/net/ipv4/ip_forward
Применим конфигурацию:
sudo squid -k reconfigure
Затем можно перезапускать службу squid:
sudo systemctl restart squid
Осталось настроить редирект и браузер.
Настройка IPTABLES
Настроим NAT на нашем сервере. Я для этого создаю следующий файл:
sudo nano /etc/nat
!#bin/bash
#Вводим свои данные
ipt=iptables
INT=ens18
LAN=10.5.5.0/24
#Очищаем цепочки
$ipt -F
$ipt -t nat -F
$ipt -t mangle -F
#Очищаем цепочки
$ipt -X
$ipt -t nat -X
$ipt -t mangle -X
#Правила по умолчанию
$ipt -P INPUT DROP
$ipt -P FORWARD ACCEPT
$ipt -P OUTPUT ACCEPT
#Разрешаем трафик на loopback-интерфейсе
$ipt -A INPUT -i lo -j ACCEPT
#Разрешить соединения, которые инициированы изнутри
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
#Разрешаем пинг-пакеты
$ipt -A INPUT -p icmp -m icmp ! --icmp-type 5 -j ACCEPT
#Открываем доступ HTTP,HTTPS,SSH,OPENVPN,squid
$ipt -A INPUT -p tcp -m multiport --dports 3128,3129,3130,22 -j ACCEPT
#Заворачиваем http и https трафик
$ipt -t nat -A PREROUTING -s $LAN -p tcp --dport 80 -j REDIRECT --to-port 3129
$ipt -t nat -A PREROUTING -s $LAN -p tcp --dport 443 -j REDIRECT --to-port 3130
$ipt -t nat -A POSTROUTING -o $INT -s $LAN -j MASQUERADE
делаем его исполняемым и запускаем:
sudo chmod +x /etc/nat && /etc/nat
Настройка сертификатов в браузере
firefox
Сейчас большинство сайтов используют технологию HSTS для предотвращения MiTM атак, поэтому если вы хотите настроить Squid для фильтрации трафика в своей организации, вам следует добавить сертификат squid.der сгенерированный на предыдущем шаге в браузер. Рассмотрим на примере Firefox. Откройте Настройки -> Защита и приватность -> Просмотр сертификатов -> Центры сертификации.
Затем нажмите кнопку Импортировать и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.
Yandex Browser
Откройте Настройки -> Системные -> Управление сертификатами -> Центры сертификации.
Затем нажмите кнопку Импорт и выберите файл squid.der. Отметьте галочки, что следует доверять этому сертификату.
Настройка сертификата в Windows 7
Щелкаем два раза на сертификате и в появившемся окне нажимаем Установить сертификат.
Выбираем пункт Поместить все сертификаты в следующее хранилище.
Далее выбираем Доверенные центры сертификации
На предупреждение отвечаем Да
После импорта вашего сертификата сайты начнут открываться, но при просмотре сведенья о сертификате вы увидите что для всех сайтов установлен ваш личные сертификат.
Однажды в понедельник неожиданно умерла корпоративная прокси на squid. У пользователей она съезжала на basic авторизацию, вместо доменной. В cache.log на каждый запрос сыпалось:
authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned ‘BH gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information. ‘
Что сбило с толку, так это то, что перезапуск сервиса на какое-то время решал проблему. Минут на 10-15. И потом всё повторялось снова и снова. В какой-то момент sudoedit руганулся на недостаток памяти, хотя df -h радовал свободным пространством. Тут-то коллега и нашёл ЭТО. У нас исчерпались inodЫ. Вывод df -i это подтвердил. И причина была та же самая. SARG, который бесконтрольно плодил свои отчёты каждый день, неделю и месяц. Найти врага можно командой: Читать →