no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


linux_faq:transparent_squid_proxy_with_ssl_bumping [2020/11/19 20:29] (current) – created admin
Line 1: Line 1:
 +===== Рабочий вариант Squid transparent proxy с поддержкой SSL без подмены сертификатов =====
 +По мотивам https://habr.com/ru/post/267851/ \\
 +Собираю на **Ubuntu 19.04**. \\
 +Вот пакеты, собранные на **Ubuntu 19.04 x64** - {{ :sbl:squid_4.4_transparent_ssl_ubuntu19.04_x64.tar.gz |}} \\
 +Для начала - включаем **deb-src** репозитории в **/etc/apt/sources.list** \\
 +Ставим запчасти для сборки и исходники squid:
 +<code>sudo apt-get update
 +sudo apt-get install git fakeroot build-essential devscripts checkinstall
 +sudo apt-get build-dep squid
 +sudo apt-get build-dep libecap
 +sudo apt-get install libssl-dev libgnutls28-dev
 +</code>
  
 +==== Сборка LibreSSL - не обязательно ====
 +Скачиваем, собираем и ставим **LibreSSL**:
 +<code>
 +wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.9.2.tar.gz
 +tar -xvf ./libressl-2.9.2.tar.gz 
 +cd libressl-2.9.2/
 +
 +./configure 
 +make
 +sudo checkinstall --pkgname libressl --pkgversion 2.9.2
 +sudo dpkg -i ./libressl_2.9.2-1_amd64.deb
 +
 +sudo ldconfig
 +
 +sudo mv /usr/bin/openssl /usr/bin/openssl-1
 +sudo update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10
 +sudo update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50
 +sudo update-alternatives --config openssl
 +</code>
 +
 +Проверяем, что **LibreSSL** поставился:
 +  $ openssl version
 +  LibreSSL 2.9.2
 +
 +==== Сборка libecap ====
 +  cd ..
 +  apt-get source libecap
 +  
 +  cd libecap-1.0.1/
 +  dpkg-buildpackage -us -uc -nc -d
 +  cd ..
 +  sudo apt-get purge libecap3
 +  sudo dpkg -i ./libecap3_1.0.1-3.2_amd64.deb
 +  sudo dpkg -i ./libecap3-dev_1.0.1-3.2_amd64.deb
 +
 +==== Сборка Squid с поддержкой ssl_bump ====
 +  apt-get source squid  
 +  cd squid-4.4/
 +внесем в **debian/rules** следующие опции компиляции:
 +<code>  --enable-ssl
 +  --enable-ssl-crtd
 +  --with-openssl
 +</code>
 +Отключаем проверку зависимостей:
 +  export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
 +Собираем:
 +  dpkg-buildpackage -us -uc -nc
 +==== Установка собранного squid ====
 +Удаляем старый **squid** и **squid-common**:
 +  sudo apt-get -y purge squid squid-common squid3 squidclient
 +Устанавливаем свежесобранные пакеты:
 +  sudo apt-get install squid-langpack libdbi-perl
 +  sudo dpkg -i ../squid_4.4*.deb ../squidclient*.deb ../squid-common*.deb ../squid3_*_all.deb
 +  sudo dpkg -i ../squid_4.4*.deb ../squidclient*.deb ../squid-common*.deb ../squid3_*_all.deb
 +Запрещаем обновление из репозиториев:
 +  echo "squid hold" | sudo dpkg --set-selections
 +  echo "squid-common hold" | sudo dpkg --set-selections
 +  echo "squid3 hold" | sudo dpkg --set-selections
 +  echo "squidclient hold" | sudo dpkg --set-selections
 +
 +==== Настройка squid ====
 +Инициализируем базу сертификатов:
 +  sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
 +Прописываем в конфигурационный файл **squid**'а такое:
 +<code>acl localnet src 192.168.0.0/16         #local Networks
 +acl pvenet src 192.168.122.0/24         #Proxmox local network
 +acl dockernet src 172.0.0.0/          #Docker containers
 +
 +acl SSL_ports port 443
 +acl CONNECT method CONNECT
 +
 +dns_nameservers 127.0.0.53
 +
 +http_access deny CONNECT !SSL_ports
 +
 +#http_access allow localhost manager
 +#http_access deny manager
 +
 +http_access allow localnet
 +http_access allow dockernet
 +http_access allow pvenet
 +http_access allow localhost
 +#http_access allow all
 +
 +#transparent HTTP proxy (option intercept)
 +http_port 3128 intercept
 +
 +visible_hostname 127.0.0.1:80
 +
 +#transparent HTTPS proxy
 +https_port 3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid-ca-cert-key.pem
 +
 +sslproxy_cert_error allow all
 +sslproxy_flags DONT_VERIFY_PEER
 +
 +# ssl_bump option splice just tunneling connection
 +ssl_bump splice all
 +
 +sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/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 .                     20%     4320
 +cache_dir aufs /var/spool/squid 20000 49 256
 +maximum_object_size 61440 KB
 +minimum_object_size 3 KB
 +
 +cache_swap_low 90
 +cache_swap_high 95
 +maximum_object_size_in_memory 512 KB
 +memory_replacement_policy lru
 +logfile_rotate 4
 +
 +cache_peer 10.77.70.7 parent 3128 0 no-query default login=login:password
 +#login=PASSTHRU
 +#login=username:password
 +never_direct allow all
 +</code>
 +перезапускаем squid:
 +  sudo service squid restart  
 +
 +==== настройка iptables ====
 +Перенаправляем все локальные исходящие подключения к портам 80 и 443 на локальный **squid**, за исключением локальных подключений и подключений к локальным сетям:
 +  sudo iptables -t nat -A PREROUTING -d 10.77.0.0/16 -j RETURN
 +  sudo iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN
 +  sudo iptables -t nat -A PREROUTING -d 127.0.0.0/8 -j RETURN
 +
 +  sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
 +  sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
 +
 +Устанавливаем **iptables-persistent** для автоматического применения правил после рестара:
 +  sudo apt-get install iptables-persistent
 +на вопрос о сохранении текущих правил отвечаем положительно. Правила лежат в файлике **/etc/iptables/rules.v4**. \\
 +В дальнейшем сохраняем правила так:
 +  sudo iptables-save | sudo tee /etc/iptables/rules.v4
  • linux_faq/transparent_squid_proxy_with_ssl_bumping.txt
  • Last modified: 2020/11/19 20:29
  • by admin