В этой статье мы рассмотрим, как установить и настроить прокси сервер Squid с поддержкой HTTPS фильтрации в Linux на примере Ubuntu 20.04.
Большинство сайтов в интернете сейчас работают через HTTPS. Текущая версия squid, доступная в репозиториях Ubuntu не поддерживает SSL. Поэтому использование этой версии прокси сервера squid для фильтрации https трафика не имеет смысл. Далее мы рассмотрим, как собрать из исходников squid с поддержкой HTTPS и настроить его для фильтрации сайтов.
Сборка прокси сервера Squid с поддержкой HTTPS
Чтобы разрешить использование исходников в Ubuntu, нужно отредактировать файл:
$ sudo nano /etc/apt/sources.list
Раскоментируйте все строки, начинающиеся с deb-src.
Обновите список пакетов и установите необходимые программы:
$ sudo apt update
$ sudo apt install openssl devscripts build-essential dpkg-dev libssl-dev libsasl2-modules-gssapi-mit
Создайте каталог для исходников squid:
$ mkdir /home/squid
$ cd /home/squid
Скачайте исходные файлы squid:
$ sudo apt build-dep squid –y
$ sudo chmod 777 squid_4.10-1ubuntu1.3.dsc
$ sudo apt source squid
$ cd squid-4.10/
Откройте файл rules. Здесь в разделе со списком устанавливаемых модулей нужно указать что squid собирается с поддержкой SSL:
--enable-ssl \ --enable-ssl-crtd \ --with-openssl
Соберите пакет из исходных файлов (займет длительное время):
$ sudo dpkg-buildpackage -d
$ cd ..
Теперь нужно установить пакеты (закончится с ошибкой):
$ sudo dpkg -i *.deb
Если предыдущая команда закончится с ошибкой, нужно добавить недостающие зависимости:
$ sudo apt install -f
Повторите установку:
$ sudo dpkg -i *.deb
Убедитесь, что squid собран с поддержкой SSL:
$ squid -v | grep ssl
Настройка прокси-сервера Squid
Сделайте копию конфигурационного файла squid:
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.save
Очистите конфигурацию:
$ cp /dev/null /etc/squid/squid.conf
Отредактируйте ваш конфигурационный файл:
$ sudo nano /etc/squid/squid.conf
Добавьте в конфигурацию squid следующие строки:
access_log /var/log/squid/access.log squid acl blacklist url_regex -i "/etc/squid/blacklist" acl whitelist url_regex -i "/etc/squid/whitelist" acl localnet src 10.24.1.0/24 # RFC 1918 local private network (LAN1) acl localnet src 10.20.1.0/24 # RFC 1918 local private network (LAN2) acl manager proto cache_object 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 http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access allow whitelist http_access deny blacklist http_access deny manager include /etc/squid/conf.d/* http_access allow localnet http_access allow localhost http_access deny all # Порт для HTTP трафика (если указываем вручную) http_port 3128 # Прозрачный порт для HTTP трафика http_port 3129 intercept # Порт для HTTPS трафика (если указать intercept, то будет прозрачным) https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/proxyCA.pem tls-key=/etc/squid/proxyCA.pem cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem sslproxy_cert_error allow all always_direct allow all acl whitelist_ssl ssl::server_name_regex "/etc/squid/lists/whitelist" acl blacklist_ssl ssl::server_name_regex "/etc/squid/lists/blacklist" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blacklist_ssl ssl_bump terminate !whitelist_ssl ssl_bump splice all #ssl_bump server-first all #ssl_bump none all sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 4MB refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims refresh_pattern \/InRelease$ 0 0% 0 refresh-ims refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims # example pattern for deb packages #refresh_pattern (\.deb|\.udeb)$ 129600 100% 129600 refresh_pattern . 0 20% 4320
Создайте файлы для белого и черного списка сайтов:
$ sudo touch /etc/squid/blacklist
$ sudo touch /etc/squid/whitelist
Обязательно внесите в них по крайней мере по одному сайту в формате:
contoso\.com
Теперь нужно создать свой сертификат с ключом:
$ 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
Сгенерируйте файл параметров:
$ sudo openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048
Настройте прав:
$ 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
$ 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:
$ sudo echo 1 >> /proc/sys/net/ipv4/ip_forward
Примените конфигурацию и перезапустите squid:
$ squid -k reconfigure
$ sudo systemctl restart squid
Настройте пересылку трафика http и https на порты squid:
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130
На этом настройка squid закончена. Вам осталось установить сертификат на компьютеры пользователей.