Прозрачный Squid 3.5 с контролем https без подмены сертификатов

Необходимость что-то решать с доступом программ не умеющих работать с прокси, но при этом очень рьяно иснользующий https трафик, заставило установить второй squid на мой сервер. Теперь объясню почему не просто вторая копия сквида с другими настройками а именно друга версия программы. А проблема заключалась в том, что нужно было использовать SAMS и кучу ACL им создаваемых, которые блочат ненужные ресурсы, а также обязательная авторизация пользователя по имени - паролю. Так вот, с этими задачами замечательно справлялся и штатный squid 3.1.20, но он не мог обеспечить прозрачное проксирование с применением ssl-bump, так как оно появилось только в версии squid 3.5.8(если я не ошибаюсь). А для новыого squid 3.5.25 я так и не нашел рабочего редиректора для sams. Потому и пришлось городить такой огород.

И так у нас есть уже настроенный squid  3.1.20 с прикрученным sams2 настроенный по этой статье:  https://onedayadmin.sytes.net/squid-sams-ubuntu-14-04/

Установим новый squid 3.5.25 при этом не удаляя старый.


Установка libressl

cd libressl

wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.4.tar.gz

tar -zvxf libressl-2.5.4.tar.gz

cd libressl-2.5.4

./configure

make

apt-get install checkinstall

checkinstall --pkgname libressl --pkgversion 2.5.4

dpkg -i libressl_2.5.4-1_i386.deb

ldconfig

После установки необходимо настроить использование LibreSSL  по-умолчанию:

mv /usr/bin/openssl /usr/bin/openssl-1

update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10

update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50

update-alternatives --config openssl

Проверим, получилось ли поставить Libressl:

openssl version
LibreSSL 2.5.4

Установим новый libecap по этой статье:

https://onedayadmin.sytes.net/?s=libecap

Приступим к установке squid 3.5.25

cd /home/leash/squid/

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.22.tar.gz

tar -zvxf squid-3.5.22.tar.gz

cd squid-3.5.22

apt-get install libssl-dev libgnutls28-dev libdbi-perl nettle-dev build-essential


Не конфигурировался squid, видимо не хватало какихто библиотек, спорная команда, небыло времени разбираться...

apt-get install libsasl2-dev

завершилась ошибкой  но все заработало

apt-get install build-dep squid3

Конфигурируем и установим сквид. Команда громоздкая поэтому оформлю ее как текстовый блок:

./configure --build=x86_64-linux-gnu \

--prefix=/usr \

--includedir=${prefix}/include \

--mandir=${prefix}/share/man \
--infodir=${prefix}/share/info \

--sysconfdir=/etc \
--localstatedir=/var \

--libexecdir=${prefix}/lib/squid1 \

--srcdir=. \
--disable-maintainer-mode \

--disable-dependency-tracking \

--disable-silent-rules \

--datadir=/usr/share/squid1 \

--sysconfdir=/etc/squid1 \

--mandir=/usr/share/man \

--enable-inline \

--disable-arch-native \

--enable-async-io=8 \

--enable-storeio=ufs,aufs,diskd,rock \

--enable-removal-policies=lru,heap \

--enable-delay-pools \

--enable-cache-digests \

--enable-icap-client \

--enable-follow-x-forwarded-for \

--enable-auth-basic=DB,fake,getpwnam,NCSA,NIS,POP3,RADIUS,SASL,SMB \

--enable-auth-digest=file, \

--enable-auth-negotiate=kerberos,wrapper \

--enable-auth-ntlm=fake,smb_lm \

--enable-external-acl-helpers=file_userip,session,SQL_session,unix_group,wbinfo_group \

--enable-url-rewrite-helpers=fake \

--enable-eui \

--enable-esi \

--enable-icmp \

--enable-zph-qos \

--enable-ecap \

--disable-translation \

--with-swapdir=/var/spool/squid1 \

--with-logdir=/var/log/squid1 \

--with-pidfile=/var/run/squid1.pid \

--with-filedescriptors=65536 \

--with-large-files \

--with-default-user=proxy \

--enable-ssl \

--enable-ssl-crtd \

--with-openssl \

--enable-linux-netfilter \

'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' \

'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' \

'CPPFLAGS=-D_FORTIFY_SOURCE=2' \

'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'

make

make install

make install-pinger

cd /etc/squid1

openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem

nano /etc/systemd/system/squid1.service

#Copyright (C) 1996-2015 The Squid Software Foundation and contributors

Squid software is distributed under GPLv2+ license and includes

## contributions from numerous individuals and organizations.

## Please see the COPYING and CONTRIBUTORS files for details.

##

[Unit]

Description=Squid Web Proxy Server

After=network.target

 

[Service]

Type=simple

ExecStart=/usr/sbin/squid -sYC -N

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

 

[Install]

WantedBy=multi-user.target

#systemctl enable squid1

chown proxy:root /var/spool/squid1/

nano /etc/squid1/squid.conf

acl localnet src 192.168.1.0/24 # RFC1918 possible internal network

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

 

# Deny requests to certain unsafe ports

dns_nameservers 192.168.1.230

http_access deny !Safe_ports

 

# Deny CONNECT to other than secure SSL ports

http_access deny CONNECT !SSL_ports

 

# Only allow cachemgr access from localhost

http_access allow localhost manager

http_access deny manager

http_access allow localnet

http_access allow localhost

 

# And finally deny all other access to this proxy

http_access deny all

 

# Squid normally listens to port 3128

http_port 192.168.1.230:3138 intercept options=NO_SSLv3:NO_SSLv2

http_port 192.168.1.230:3140 options=NO_SSLv3:NO_SSLv2
https_port 192.168.1.2303129 intercept ssl-bump cert=/etc/squid1/squidCA.pem

 

always_direct allow all

sslproxy_cert_error allow all

sslproxy_flags DONT_VERIFY_PEER

acl blocked ssl::server_name "/etc/squid1/blocked_https.txt"

acl step1 at_step SslBump1

ssl_bump peek step1

#терминируем соединение, если клиент заходит на запрещенный ресурс

ssl_bump terminate blocked

ssl_bump splice all

sslcrtd_program /lib/squid1/ssl_crtd -s /var/lib/ssl_db -M 4MB

# Leave coredumps in the first cache dir

coredump_dir /var/spool/squid3

# Add any of your own refresh_pattern entries above these.

#

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0

refresh_pattern . 0 20% 4320

cache_dir aufs /var/spool/squid1 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

Добавим в скрипт управления iptables следующие строки:

iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 443 -j REDIRECT --to-ports 3129

iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128

iptables -A FORWARD -m state --state NEW -s 192.168.1.202/32 -j ACCEPT

chown -R proxy:proxy /var/log/squid1

/usr/sbin/squid -z

systemctl start squid1

nano /etc/squid1/blocked_https.txt

vk.com

ok.ru

chown proxy /etc/squid1/blocked_https.txt