Установка и настройка  прозрачного прокси-сервера Squid HTTPS и анализатора логов Lightsquid на Ubuntu 16.04 

Приступим

Установка и настройка SSL прокси-сервера SQUID

Есть два пути решения.

1) С подменой сертификатов.
В этом случае генерируется сертификат. Затем уже на клиентских машинах он добавляется в доверенные
Метод подразумевает что необходимо на всех компьютерах пользователей провести эту манипуляцию

Тут боле менее все просто. Можно подключить репозитарий и установить уже подготовленный Squid

https://launchpad.net/~notartom/+archive/ubuntu/squid-ssl

sudo add-apt-repository ppa:notartom/squid-ssl
sudo apt-get update
sudo apt-get install squid squid-langpack

2) Без подмены сертификатов
Вот здесь уже сложнее. Необходимо пересобирать пакет Squid.

Чтобы постоянно не вводить sudo переходим в root

sudo -s

Разблокируем ветки где указан src

nano /etc/apt/sources.list

Обновимся и поставим необходимые библиотеки для сборки

apt-get update
apt-get dist-upgrade -y
apt-get install openssl
apt-get install devscripts build-essential
apt-get install dpkg-dev libssl-dev

Создадим папку где будет производится сборка

mkdir makes
cd makes

Качаем зависимости (для выполнения этой операции был поставлен dpkg-dev)

apt-get build-dep squid3

Качаем исходник

apt-get source squid3

В случае ошибки доступа apt «Невозможно сбросить права для скачивания» меняем права и повторяем

chmod 777 squid3_3.5.12-1ubuntu7.2.dsc
apt-get source squid3

В моем случае это был файл squid3_3.5.12-1ubuntu7.2.dsc может быть и squid3_3.5.12-1ubuntu7.3.dsc и другие разновидности

Если этого не сделать или будут ошибки, то не появится папка debian

Переходим в полученную папку

cd squid3-3.5.12

Добавляем поддержку ssl
Редактируем файл правил

nano debian/rules

Добавляем строчки

--enable-ssl \
--enable-ssl-crtd \
--with-openssl \

ВАЖНО: чтобы все параметры заканчивались \ , а именно дописать после proxy

Собираем DEB пакеты ( Процесс долгий )

dpkg-buildpackage -d

Возможные ошибки:

configure: error: library 'crypto' is required for OpenSSL

Необходимо установить libssl-dev и перезапустить процесс сборки

apt-get install libssl-dev
rm config.log
dpkg-buildpackage -d

Идем на папку выше и там должны быть получившиеся пакеты

ls -1
squid3-3.5.12
squid3_3.5.12-1ubuntu7.2_all.deb
squid3_3.5.12-1ubuntu7.2_amd64.build
squid3_3.5.12-1ubuntu7.2_amd64.changes
squid3_3.5.12-1ubuntu7.2.debian.tar.xz
squid3_3.5.12-1ubuntu7.2.dsc
squid3_3.5.12.orig.tar.gz
squid_3.5.12-1ubuntu7.2_amd64.deb
squid-cgi_3.5.12-1ubuntu7.2_amd64.deb
squidclient_3.5.12-1ubuntu7.2_amd64.deb
squid-common_3.5.12-1ubuntu7.2_all.deb
squid-dbg_3.5.12-1ubuntu7.2_amd64.deb
squid-purge_3.5.12-1ubuntu7.2_amd64.deb

Ставим

dpkg -i *.deb

Правим зависимости и переставляем (На этом моменте он подтянул apache для каких то своих целей)

apt-get install -f
dpkg -i *.deb

Если все успешно то смотрим версию squid и что у нас вышло

squid -v

(код в строку. Отформатировал для наглядности)

Squid Cache: Version 3.5.12
Service Name: squid
Ubuntu linux
configure options:  '--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/squid3'
'--srcdir=.'
'--disable-maintainer-mode'
'--disable-dependency-tracking'
'--disable-silent-rules'
'BUILDCXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
'--datadir=/usr/share/squid'
'--sysconfdir=/etc/squid'
'--libexecdir=/usr/lib/squid'
'--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,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB'
'--enable-auth-digest=file,LDAP'
'--enable-auth-negotiate=kerberos,wrapper'
'--enable-auth-ntlm=fake,smb_lm'
'--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,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/squid'
'--with-logdir=/var/log/squid'
'--with-pidfile=/var/run/squid.pid'
'--with-filedescriptors=65536'
'--with-large-files'
'--with-default-user=proxy'
'--enable-ssl'
'--enable-ssl-crtd'
'--with-openssl'
'--enable-build-info=Ubuntu linux'
'--enable-linux-netfilter'
'build_alias=x86_64-linux-gnu'
'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall'
'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'
'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'

Конфигурация без блокировок и прочего. Именно посмотреть работу прозрачного режима. Обычная базовая с добавлением SSL

Переходим в папку squid и генерируем сертификат

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

Упростим конфигурацию

cp squid.conf squid.conf.bak
cat squid.conf.bak | grep -v "^#" | grep -v "^$" > squid.conf

Добавим сеть src 192.168.0.0/24
Добавим порты под HTTP 3128 и HTTPS 3129
Добавим генерацию сертификатов sslcrtd_program

nano squid.conf
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 local src 192.168.0.0/24
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow local
http_access deny all
http_port 192.168.0.1:3128 intercept
https_port 192.168.0.1:3129 intercept ssl-bump cert=/etc/squid/squidCA.pem
ssl_bump peek all
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -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 (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

Для режима варианта с подменой сертификата следующие строчки писать не надо

ssl_bump peek all
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

Проверим на наличие ошибок и применяем конфигурацию

squid -k check
squid -k parse
squid -k reconfigure

Для работы необходимо настроить iptables

Настройку iptables можно взять здесь

А для того, чтобы все это наше «безобразие» заработало, надо добавить пару правил в фаервол, чтобы завернуть трафик на SQUID.

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

 

Теперь приступим к установке и настройке Lightsquid

Lightsquid является анализатором логов squid. На основе логов, создаются отчеты об использовании сети интернет. Установка lightsquid будет производиться на proxy сервер, сконфигурированный выше.

Установим lightsquid, apache2 и cgi модуль

# apt install lightsquid apache2 libcgi-fast-perl

В /etc/lightsquid/lightsquid.cfg укажем корректный путь до access.log. Так же поменяем язык интерфейса lightsquid на русский в кодировке utf8, и выставим максимальный размер трафика в сутки в 1Gb. По превышению этого лимита, пользователь будет попадать в колонку «Превысили»

# nano /etc/lightsquid/lightsquid.cfg
. . .
$logpath ="/var/log/squid";
. . .
$lang ="ru-utf8";
. . .
$perusertrafficlimit = 1000*1024*1024;
. . .

При генерации отчетов у пользователей с маленьким трафиком, вместо отчета открывается пустая страница. Для исправления этой ошибки нужно применить патч. Идея патча взята отсюда.

Добавим патч

# nano /usr/lib/cgi-bin/lightsquid/user_detail.cgi.patch

# When user have only 'hit' traffic, $calculatedtotal become zero
# and script die with "Illegal division by zero" error
--- user_detail.cgi~     2014-06-25 13:26:16.576149494 +0400
+++ user_detail.cgi      2014-06-25 13:25:58.108485852 +0400
@@ -88,7 +88,7 @@
   $hit=$h{$site}{hit};
   $size=$h{$site}{size};
   $total+=$size;
-  $percent   =sprintf("%2.1f",int($size*1000/$calculatedtotal)/10);
+  $percent   =$calculatedtotal?sprintf("%2.1f",int($size*1000/$calculatedtotal)/10):'∞';
   $printhit  =FineDec($hit);
   $printsize =FineDec($size);
   $printtotal=FineDec($total);
@@ -145,4 +145,4 @@
 2006-06-28 ADD : die -> MyDie
 2006-06-28 ADD : &tpl= support
 2006-09-13 ADD : add &user= in bigfiles URL
-2006-11-20 ADD : /g for ##SITEURL_B## & ##SITEURL_L##, my need in some cases
\ No newline at end of file
+2006-11-20 ADD : /g for ##SITEURL_B## & ##SITEURL_L##, my need in some cases

Перейдем в каталог с проблемным cgi скриптом, создадим его копию и применим патч

# cd /usr/lib/cgi-bin/lightsquid/
# cp user_detail.cgi user_detail.cgi.default
# patch user_detail.cgi user_detail.cgi.patch
patching file user_detail.cgi

В сгенерированных отчетах по мимо списка учетных записей пользователей, записываются ip адреса компьютеров. Чтобы убрать из отчетов ip адреса создадим скрипт

# nano /etc/lightsquid/lightsquid_no-ip.sh

#!/bin/sh

unset path
path=/var/lib/lightsquid/report/$(date +%Y%m%d)
mv $path/.total $path/.total_orig

user=`grep -v -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" $path/.total_orig | grep -v "user:*" | grep -v "size:*" | wc -l`
login=`grep -v -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" $path/.total_orig | grep -v "user:*"`
echo "user: $user" > $path/.total
echo "$login" >> $path/.total

rm $path/.total_orig

exit 0

Добавим права на выполнение

# chmod +x /etc/lightsquid/lightsquid_no-ip.sh

Переместим файл, отвечающий за ротацию логов squid, в родительскую директорию squid и отредактируем его

# mv /etc/logrotate.d/squid /etc/squid/squid.logrotate

# nano /etc/squid/squid.logrotate

#
#       Logrotate fragment for squid.
#
/var/log/squid/*.log {
        daily
        compress
#       delaycompress
        rotate 1
        missingok
        nocreate
        sharedscripts
#       prerotate
#               test ! -x /usr/sbin/sarg-reports || /usr/sbin/sarg-reports
#       endscript
        postrotate
                test ! -e /var/run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -k rotate
        endscript
}

Отчеты генерируются автоматически каждый день в 4 часа. Это поведение определено в файле /etc/cron.d/lightsquid. Отредактируем этот файл, с учетом созданных скриптов

# nano /etc/cron.d/lightsquid

# Regular cron jobs for the lightsquid package
#
0 0 * * * root /usr/sbin/logrotate -f /etc/squid/squid.logrotate
5 * * * * root [ -x /usr/share/lightsquid/lightparser.pl ] && /usr/share/lightsquid/lightparser.pl && /etc/lightsquid/lightsquid_no-ip.sh
35 * * * * root [ -x /usr/share/lightsquid/lightparser.pl ] && /usr/share/lightsquid/lightparser.pl && /etc/lightsquid/lightsquid_no-ip.sh

Каждый день в 0:00 будет происходить ротация логов squid. Каждую 5 и 35 минуту каждого часа будет обновляться отчет lightsquid.

Отредактируем конфигурационный файл lightsquid для apache

# nano /etc/apache2/conf-available/lightsquid.conf

Alias /lightsquid/ /usr/lib/cgi-bin/lightsquid/

<Location "/lightsquid/">
        AddHandler cgi-script .cgi
        Require ip 192.168.1.10 192.168.1.11
</Location>

В Require ip указываем адреса сотрудников, имеющих право просматривать отчеты. Для того, чтобы все пользователи имели доступ к отчетам, Require ip нужно поменять на

Require all granted

Активируем в apache конфигурационный файл lightsquid и CGI модуль, а так же перезапустим сервис

# a2enconf lightsquid
# a2enmod cgi
# service apache2 restart

Проверим /etc/lightsquid/lightsquid.cfg на наличие ошибок

# /usr/share/lightsquid/check-setup.pl

Сгенерируем первый отчет

# /usr/share/lightsquid/lightparser.pl && /etc/lightsquid/lightsquid_no-ip.sh

Для просмотра отчета, нужно открыть браузер по адресу http://proxy_ip_address/lightsquid/

 

Взято за основу:

Настройка прокси-сервера — imbicile.pp.ru

Настройка анализатора логов — 4skill.ru