Установка и настройка 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>.

В итоге файл будет выглядеть примерно так:

../_images/squid_1.png

Удалите лишние форматы:

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-сертификата:

  1. Остановите Squid:

systemctl stop squid
  1. Создайте папку для хранения SSL-сертификатов и выдайте пользователю полные права на неё:

mkdir /etc/squid/ssl
chmod 700 /etc/squid/ssl
  1.  Сгенерируйте корневой сертификат, на основе которого будут подписываться сертификаты для сайтов:

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
  1. Сгенерируйте сертификат, который затем нужно будет добавить в бразуер:

openssl x509 -in /etc/squid/ssl/squid.pem -outform DER -out /etc/squid/ssl/squid.der
  1. Создайте базу данных для генерируемых сертификатов:

/usr/lib/squid3/ssl_crtd -c -s /var/spool/squid/ssl_db
  1. Настройте конфигурацию 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

  1. Отключите включенную по умолчанию поддержку 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
  1. Для поддержки IPv4, в любое место конфигурационного файла Squid добавьте строку dns_v4_first on.

  2. Перезагрузите конфигурацию и запустите Squid:

squid -z
systemctl daemon-reload
systemctl restart squid
  1. Добавьте самозаверяющийся сертификат в список доверенных:

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
  1. Перезапустите сервер.

Прокси-сервер установлен и настроен. Можно проверять его работоспособность внутри сети.

Проверка работы Squid

Чтобы проверить правильность настройки Squid Proxy, укажите его адрес в качестве адреса прокси в настройках машин внутри сети. Компьютеры из подсети должны получать доступ к сети.

Готово! Squid Proxy установлен, настроено использование SSL-сертификатов и данная конфигурация исправно работает.