Установка и настройка Squid Proxy¶
Squid Proxy — популярный и стабильный open-source прокси-сервер, отлично подходящий для решения широкого спектра задач.
В этой статье будет описана:
установка Squid Proxy на подготовленную к работе Ubuntu 18.04;
настройка использования самоподписных SSL-сертификатов;
проверка функционирования Squid Proxy.
В дальнейшем будем использовать данный Squid Proxy для настройки перехвата трафика на ICAP-сервере.
Подготовка к установке¶
Перед началом установки Squid Proxy обновите пакеты системы и установите все доступные обновления:
apt update && apt upgrade && apt-get update && apt-get upgrade
После этого, добавьте в список репозиториев источник исходного кода Squid. Для этого в файл /etc/apt/sources.list добавьте строку deb-src http://ru.archive.ubuntu.com/ubuntu/ focal main restricted.
Установите необходимые для дальнейшей работы Squid утилиты:
apt-get install devscripts build-essential fakeroot libssl-dev libssl1.0-dev
Подготовка к установке завершена, теперь можно переходить непосредственно к процессу установки.
Установка Squid Proxy¶
Установите Squid Proxy из исходного кода. Для этого создайте папку, в которую будете устанавливать Squid, и сделайте её доступной для редактирования:
mkdir /usr/src/squid
chown _apt:root /usr/src/squid
cd /usr/src/squid
Теперь, установите необходимые для сборки Squid пакеты:
apt-get source squid
# Пакеты, необходимые для компиляции
apt-get build-dep squid
Добавьте поддержку SSL Bump и генерации сертификатов. Для этого в файл /usr/src/squid/squid3-3.5.27/debian/rules добавьте строки:
--with-gnutls \
--enable-ssl \
--enable-ssl-crtd \
--with-openssl \
В файл /usr/src/squid/squid3-3.5.27/src/ssl/certificate_db.cc добавьте строку #include <unistd.h>.
В итоге файл будет выглядеть примерно так:
Удалите лишние форматы:
rm -r /usr/src/squid/squid3-3.5.27/debian/source
Подготовка к сборке завершена. Теперь переходите к сборке пакетов:
cd /usr/src/squid/squid3-3.5.27
apt install libssl1.0-dev
apt list --upgradable -a
dpkg-buildpackage -rfakeroot -d -us -uc -ui
debuild -d
Примечание
В процессе сборки возможно возникновение ошибок вида:
Now signing changes and any dsc files...
signfile dsc squid_4.10-1ubuntu1.dsc Andreas Hasenack <andreas@canonical.com>
gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: skipped "Andreas Hasenack <andreas@canonical.com>": No secret key
gpg: /tmp/debsign.YiTaKCMO/squid_4.10-1ubuntu1.dsc: clear-sign failed: No secret key
debsign: gpg error occurred! Aborting....
debuild: fatal error at line 1112:
running debsign failed
Это нормально, поскольку у нас нет закрытого ключа разработчика.
Установите собранные пакеты:
cd /usr/src/squid
dpkg -i squid_3.5.27-1ubuntu1_amd64.deb squid-common_3.5.27-1ubuntu1_all.deb squidclient_3.5.27-1ubuntu1_amd64.deb
# Дополнительные зависимости
apt-get --fix-broken install
# Сохраните список установленных зависимостей
apt-mark hold squid squidclient squid-common
После установки Squid, проверьте его статус:
systemctl status squid
Прокси-сервер должен быть запущен.
Настройка использования SSL-сертификатов¶
Чтобы настроить использование прокси-сервером самоподписного SSL-сертификата:
Остановите Squid:
systemctl stop squid
Создайте папку для хранения SSL-сертификатов и выдайте пользователю полные права на неё:
mkdir /etc/squid/ssl chmod 700 /etc/squid/ssl
Сгенерируйте корневой сертификат, на основе которого будут подписываться сертификаты для сайтов:
openssl genrsa -out /etc/squid/ssl/squid.key openssl req -new -key /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.csr openssl x509 -req -days 999 -in /etc/squid/ssl/squid.csr -signkey /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.pem
Сгенерируйте сертификат, который затем нужно будет добавить в бразуер:
openssl x509 -in /etc/squid/ssl/squid.pem -outform DER -out /etc/squid/ssl/squid.der
Создайте базу данных для генерируемых сертификатов:
/usr/lib/squid3/ssl_crtd -c -s /var/spool/squid/ssl_db
Настройте конфигурацию Squid с использованием сгенерированных сертификатов. Для этого приведите конфигурационный файл /etc/squid/squid.conf к следующему виду:
/etc/squid/squid.conf
visible_hostname = proxy.support.local
# DNS сервера
dns_nameservers 10.0.0.1
dns_nameservers 8.8.8.8
# Разрешить доступ из локальных сетей.
acl localnet src 10.0.0.1/24
tcp_outgoing_address 10.10.0.2
# Разрешенные порты на прокси сервере
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 CONNECT method CONNECT
# Отклонять запросы к неразрешенным портам
#http_access deny !Safe_ports
# Запретить метод CONNECT не на SSL-порт
#http_access deny CONNECT !SSL_ports
# Разрешить только локальное управление кэшем
#http_access allow localhost manager
#http_access deny manager
# Не ограничивать локальный доступ с сервера
#http_access deny to_localhost
# Разрешить доступ из локальных сетей.
http_access allow localnet
http_access allow localhost
http_access allow all
# Непрозрачный порт
http_port 3128 ssl-bump connection-auth=off generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key
# Прозрачный порт HTTP
http_port 10.0.0.1:3129 intercept
# Прозрачный порт HTTPS
http_port 3130 intercept ssl-bump connection-auth=off generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key
# Разрешать соединение даже с ошибками проверки сертификата
sslproxy_cert_error allow all
always_direct allow all
#ssl_bump client-first all
ssl_bump server-first all
ssl_bump none all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/spool/squid/ssl_db -M 4MB
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
Отключите включенную по умолчанию поддержку IPv6:
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1 sysctl -w net.ipv6.conf.lo.disable_ipv6=1
Для поддержки IPv4, в любое место конфигурационного файла Squid добавьте строку dns_v4_first on.
Перезагрузите конфигурацию и запустите Squid:
squid -z systemctl daemon-reload systemctl restart squid
Добавьте самозаверяющийся сертификат в список доверенных:
apt-get install ca-certificates cp /etc/squid/ssl/squid.pem /usr/local/share/ca-certificates/squid.crt update-ca-certificates dpkg-reconfigure ca-certificates
Перезапустите сервер.
Прокси-сервер установлен и настроен. Можно проверять его работоспособность внутри сети.
Проверка работы Squid¶
Чтобы проверить правильность настройки Squid Proxy, укажите его адрес в качестве адреса прокси в настройках машин внутри сети. Компьютеры из подсети должны получать доступ к сети.
Готово! Squid Proxy установлен, настроено использование SSL-сертификатов и данная конфигурация исправно работает.