Сборка и настройка Squid с поддержкой SSL

Сборка и настройка Squid с поддержкой SSL

Сегодня в статье мы установим и настроим кэширующий сервер Squid с поддержкой SSl, а так же рассмотрим фильтрацию https и http протоколов. И так приступим.

Сборка Squid с поддержкой SSl

Для начало нам необходимо скачать последнюю стабильную сборку squid с офф.сайта разработчика. Переходим по ссылки и выбираем версию squid, при написании статью стабильная сборка была 3.5.26 ( прямая ссылка для скачивания squid_3.5.26.tar.gz). Или набираем в консоле:

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

Далее нам потребуются установить еще несколько важных для сборки пакета программ:

sudo apt install git build-essential devscripts fakeroot checkinstall patch openssl libssl-dev libcppunit-dev libsasl2-dev cdbs ccze libfile-readbackwards-perl libcap2 libcap-dev libcap2-dev libnetfilter-conntrack-dev -y

Распакуем скаченные исходники:

tar -xf squid-3.5.23.tar.gz

Переходим в распакованную папку:

cd squid-3.5.23/

Конфигурируем с ключами

параметры  CHOST и --build пишем исходя из разрядности ОС. А параметры CFLAGS и CXXFLAGS нужно выбирать руководствуясь Вашим процессором. В данном случае параметры подходят для процессора Core 2 Duo.
./configure \
 CHOST="x86_64-pc-linux-gnu" \
 CFLAGS="-march=core2 -O2 -pipe" \
 CXXFLAGS="${CFLAGS}" \
 --build=x86_64-linux-gnu \
 --prefix=/usr \
 --exec-prefix=/usr \
 --bindir=/usr/bin \
 --sbindir=/usr/sbin \
 --libdir=/usr/lib \
 --sharedstatedir=/usr/com \
 --includedir=/usr/include \
 --localstatedir=/var \
 --libexecdir=/usr/lib/squid \
 --srcdir=. \
 --datadir=/usr/share/squid \
 --sysconfdir=/etc/squid \
 --infodir=/usr/share/info \
 --mandir=/usr/share/man \
 --x-includes=/usr/include \
 --x-libraries=/usr/lib \
 --with-default-user=proxy \
 --with-logdir=/var/log/squid \
 --with-pidfile=/var/run/squid.pid \
 --enable-err-languages=English \
 --enable-default-err-language=English \
 --enable-storeio=ufs,aufs,diskd \
 --enable-linux-netfilter \
 --enable-removal-policies=lru,heap \
 --enable-gnuregex \
 --enable-follow-x-forwarded-for \
 --enable-x-accelerator-vary \
 --enable-zph-qos \
 --enable-delay-pools \
 --enable-snmp \
 --enable-underscores \
 --with-openssl \
 --enable-ssl-crtd \
 --enable-http-violations \
 --enable-async-io=24 \
 --enable-storeid-rewrite-helpers \
 --with-large-files \
 --with-libcap \
 --with-netfilter-conntrack \
 --with-included-ltdl \
 --with-maxfd=65536 \
 --with-filedescriptors=65536 \
 --with-pthreads \
 --without-gnutls \
 --without-mit-krb5 \
 --without-heimdal-krb5 \
 --without-gnugss \
 --disable-icap-client \
 --disable-wccp \
 --disable-wccpv2 \
 --disable-dependency-tracking \
 --disable-auth --disable-epoll \
 --disable-ident-lookups \
 --disable-icmp

Теперь собираем пакет при помощи программы checkinstall с ключом -D

sudo checkinstall -D

Настройка Squid с поддержкой ssl

Откроем для редактирования конфигурационный файл squid`а

sudo nano /etc/squid/squid.conf
# Создаем правило
acl localnet src 10.5.5.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
acl sites dstdomain "/etc/squid/bad_url"

# Настраиваем правило блокировок и разрешений
http_access deny sites 
http_access deny !Safe_ports 
http_access deny CONNECT !SSL_ports 
http_access allow localhost manager 
http_access deny manager 
http_access allow localnet 
http_access allow localhost 
http_access deny all 

# Настройка опций, интерфейсов и портов 
## intercept - прозрачное проксирование в старых версиях указываем - transparent
### Для http протокола 
http_port 10.5.5.1:3128 intercept options=NO_SSLv3:NO_SSLv2 
### Настройка http протокола без прозрачности, для настройки прокси сервера вручную 
http_port 10.5.5.1:3130 options=NO_SSLv3:NO_SSLv2
### Для https протокола 
https_port 10.5.5.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/ssl/squid_CA.crt key=/etc/squid/ssl/squid_CA.key
### Настраиваем необходимые параметры для ssl
always_direct allow all 
sslproxy_cert_error allow all 
sslproxy_flags DONT_VERIFY_PEER 
ssl_bump client-first all 
ssl_bump server-first all 
ssl_bump none all 
# Параметры для старых версий squid'a
#sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /usr/local/squid/var/lib/ssl_db -M 4MB 
#sslcrtd_children 32 startup=5 idle=1 

# Расположения кэша на диске 
cache_dir aufs /var/spool/squid 100 16 256 
maximum_object_size 10 MB minimum_object_size 3 KB 
# Параметры кэша на диске 
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 .               0       20%     4320 

# Настройка кэша ОЗУ cache_mem 512 Mb 
## Загруженность кэше в процентах 
cache_swap_low 90 
cache_swap_high 95 
## Максимальный размер объекта в кэше
maximum_object_size_in_memory 1 MB 
### Остаток объекта, при котором закачка будет прервана в случае обрыва соединения 
quick_abort_max 1024 KB 
memory_replacement_policy lru 

# Настройка лог файлов 
logfile_rotate 4

подробно о параметрах написано в этой статье (статья находится в разработке).

Пробуем запустить squid:

sudo systemctl start squid

И видим что сервис не запустился. Почему? Потому что checkinstall не включил в пакет файлы сервиса Squid.  Но к большому нашему счастью этот файл расположен в исходниках squid’a.

Копируем его в необходимую директорию:

 sudo cp /home/Ваш_Пользователь/squid-3.5.23/tools/systemd/squid.service /etc/systemd/system

Включаем сервис squid

sudo systemctl enable squid.service

И это еще не все. Создаем необходимые директории и файлы нужные для запуска squid’a.

1. Создаем файл для URL адресов, которые мы будем блокировать

sudo touch /etc/squid/bad_url

2. Создадим лог-файл squid’a и назначим ему необходимые права

sudo touch /var/log/squid/access.log
sudo chown proxy /var/log/squid/access.log

3. Также создадим директорию для наших ssl сертификатов

sudo mkdir /etc/squid/ssl
sudo chmod 700 /etc/squid/ssl

4. Создадим директорию для кэша нашего squid’a и назначим ей необходимые права

sudo mkdir -p /var/spool/squid  
sudo chown proxy /var/spool/squid

После этого формируем дамп squid’a

squid -z

Далее необходимо занести все сайты которые хотите заблокировать в файл bad_url

sudo nano /etc/squid/bad_sires

в формате

.site.ru
.vk.com

5. Теперь генерируем корневой сертификат собственного CA (Центра сертификации) на основе которого будут подписываться сертификаты для сайтов. Для этого переходим в директорию ssl созданную нами:

cd /etc/squid/ssl

А далее в ней создадим наши сертификаты.

sudo openssl genrsa -out /etc/squid/ssl/squid_CA.key
sudo openssl req -new -key /etc/squid/ssl/squid_CA.key -out /etc/squid/ssl/squid_CA.csr
sudo openssl x509 -req -days 365 -in /etc/squid/ssl/squid_CA.csr -signkey /etc/squid/ssl/squid_CA.key -out /etc/squid/ssl/squid_CA.pem

Также создадим сертификат для импорта в браузер пользователя (т.е. данный файл необходимо установить на каждый девайс в сети)

sudo openssl x509 -in /etc/squid/ssl/squid_CA.pem -outform DER -out squidCA.der

Рестартуем сервис

sudo service squid restart

Смотрим статус:

sudo service squid status

status-squid

6. Перенаправляем весь трафик по портам 80, 8080, 443 через squid:

iptables -t nat -A PREROUTING -s 10.5.5.0/24 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128

iptables -t nat -A PREROUTING -s 10.5.5.0/24 -p tcp -m multiport --dports 443 -j REDIRECT --to-ports 3129

Все кэширующий сервер squid с поддержкой ssl запустился и готов к работе.

Попробуйте открыть сайт в вконтакте, запрос не должен проходить. Если все в порядке, то открываем файл bad_url и вписываем все необходимые сайты для их блокировки.

Сборка и настройка Squid с поддержкой SSL
5 (100%) 2 votes

9 комментариев

  1. Виталий Литвинов 2018-05-11
  2. SYSadminАвтор 2017-08-22
  3. Алексей 2017-08-22
  4. SYSadminАвтор 2017-08-18
  5. Антон 2017-08-18
  6. SYSadminАвтор 2017-08-17
  7. Антон 2017-08-17
  8. SYSadminАвтор 2017-07-04
  9. dog 2017-07-04

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *