Настройка прокси сервера Squid 3.3 на Ubuntu Server 14.04 LTS. Часть 8. Конфигурация SqStat

imageПри переводе пользователей на прокси-сервер Squid3 хотелось бы видеть информацию о количестве работающих через прокси пользователей на данный конкретный момент времени. Для этого есть ряд инструментов, один из которых мы рассмотрим в данной заметке. Речь пойдёт о скрипте SqStat, позволяющем в режиме реального времени просматривать активные сессии пользователей прокси через веб-интерфейс.

На данный момент последняя доступная версия скрипта SqStat 1.20 может быть загружена с адреса samm.kiev.ua – sqstat. В одной из прошлых заметок нами был установлен web-сервер Apache2 с модулем php5, который здесь-то нам и пригодится.

Итак, скачиваем SqStat, распаковываем и копируем в каталог веб-сервера:

mkdir /home/user/downloads
cd downloads
wget http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz
tar xvfz sqstat-1.20.tar.gz
sudo mkdir /var/www/html/sqstat
sudo cp -R sqstat-1.20/* /var/www/html/sqstat/
rm -fr /home/user/downloads/sqstat-1.20
ls -la /var/www/html/sqstat/
total 48
drwxr-xr-x 3 root root  4096 Jun 11 17:25 .
drwxr-xr-x 4 root root  4096 Jun 11 17:25 ..
-rw-r--r-- 1 root root   871 Jun 11 17:25 arrow.gif
-rw-r--r-- 1 root root   981 Jun 11 17:25 config.inc.php.defaults
drwxr-xr-x 2 root root  4096 Jun 11 17:25 docs
-rw-r--r-- 1 root root 11324 Jun 11 17:25 sqstat.class.php
-rw-r--r-- 1 root root  1170 Jun 11 17:25 sqstat.css
-rw-r--r-- 1 root root  2708 Jun 11 17:25 sqstat.php
-rw-r--r-- 1 root root  4355 Jun 11 17:25 zhabascript.js

Копируем файл config.inc.php.defaults в файл config.inc.php и открываем получившийся файл на редактирование с подсветкой синтаксиса в стиле php

sudo cp /var/www/html/sqstat/config.inc.php.defaults /var/www/html/sqstat/config.inc.php
sudo nano -Y php /var/www/html/sqstat/config.inc.php

Привожу для примера только раскомментированные строки файла:

$use_js=true;
DEFINE("SQSTAT_SHOWLEN",60);
$squidhost[0]="kom-ad01-squid.holding.com";
$squidport[0]=3128;
$cachemgr_passwd[0]="StrOnG_PaZsZw0rD";
$resolveip[0]=false;
$group_by[0]="username";

Здесь мы указали имя и порт прокси, пароль к менеджеру кэша Squid (Cachemgr), и поменяли порядок группировки с группировки по ip (используется по умолчанию) на группировку по пользователям.

***

Так как SqStat использует данные менеджера кэша Squid, в конфигурационном файле squid.conf должны присутствовать соответствующие настройки для доступности Cachemgr. В используемой у нас версии Squid 3.3.8 в конфигурационном файле squid.conf отдельно выполнять объявление Cachemgr в виде ACL не требуется (как это было в ранних версиях Squid), поэтому всё что нам нужно сделать, это разрешить доступ к Cachemgr и убедиться в том, что пароль доступа указанный в параметре cachemgr_passwd и в файле config.inc.php совпадают. Фрагмент squid.conf:

...
# ACLs all, manager, localhost, and to_localhost are predefined.
acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
...
http_access allow manager localhost
http_access allow manager localnet
http_access deny manager
...
cachemgr_passwd StrOnG_PaZsZw0rD all ...

***

Теперь попробуем открыть URL http://kom-ad01-squid.holding.com/sqstat/sqstat.php

До версии Squid 3.2 проделанных настроек было достаточно, но так как мы используем версию 3.3, — столкнёмся с ошибкой при попытке доступа к указанной веб-странице:

SqStat error
Error (1): Cannot get data. Server answered: HTTP/1.1 200 OK

Для решения этой проблемы воспользуемся патчем предложенным в заметке Руслан Кидун — Чиним мониторинг реального времени SqStat после обновления Squid до версии 3.2.

Создаём пустой файл sqstat_squid32.patch, открываем его на редактирование…

sudo touch /var/www/html/sqstat/sqstat_squid32.patch
sudo nano -Y sh /var/www/html/sqstat/sqstat_squid32.patch

…и наполняем его с содержимым:

107c107
< 		if($raw[0]!="HTTP/1.0 200 OK"){
---
> 		if($raw[0]!="HTTP/1.1 200 OK"){
131,132c131,132
< 					if(substr($v,0,5)=="peer:") $parsed["con"][$connection]["peer"]=substr($v,6);
< 					if(substr($v,0,3)=="me:") $parsed["con"][$connection]["me"]=substr($v,4);
---
> 					if(substr($v,0,7)=="remote:") $parsed["con"][$connection]["remote"]=substr($v,8);
> 					if(substr($v,0,6)=="local:") $parsed["con"][$connection]["local"]=substr($v,7);
178c178
< 			$ip=substr($v["peer"],0,strpos($v["peer"],":"));
---
> 			$ip=substr($v["remote"],0,strpos($v["remote"],":"));
189c189
< 				$ip=ip2long(substr($v["peer"],0,strpos($v["peer"],":")));
---
> 				$ip=ip2long(substr($v["remote"],0,strpos($v["remote"],":")));

 

Патчим предварительно сохранив оригинальный файл sqstat.class.php:

cd /var/www/html/sqstat/
sudo cp sqstat.class.php sqstat.class.php.default
sudo patch sqstat.class.php sqstat_squid32.patch
patching file sqstat.class.php

Обновляем страницу и смотрим что получилось:

image

Оформление веб-страницы SqStat можно при желании подправить отредактировав оригинальный файл CSS, как всегда предварительно сохранив исходный файл.

sudo cp sqstat.css sqstat.css.default
sudo nano -Y css sqstat.css

При желании доступ к SqStat можно ограничить установив в Apache2 пароль на доступ к веб-каталогу /sqstat/.

***

Предыдущие части цикла заметок:

Часть 1. Установка ОС на ВМ Hyper-V Gen2
Часть 2. Настройка диска для кэша Squid
Часть 3. Конфигурация DNS , NTP и установка Squid
Часть 4. Конфигурация Kerberos и NTLM
Часть 5. Конфигурация Squid 3
Часть 6. Настройка Proxy Auto Configuration (WPAD)
Часть 7. Кастомизация страниц ошибок

Следующие части цикла заметок:

Часть 9. Конфигурация LightSquid
Часть 10. Отключаем IPv6

Всего комментариев: 21 Комментировать

  1. Анатолий /

    Добрый день! При попытке войти на страницу мониторинга выдаёт следующее:

    SqStat error

    Error (1): Cannot get data. Server answered: HTTP/1.1 403 Forbidden

    1. Алексей Максимов / Автор записи

      Сверяйте cachemgr_passwd в config.inc.php и squid.conf. Проверяйте наличие «http_access allow manager …» в squid.conf. В статье всё написано.

      1. Анатолий /

        Ошибся с описание локальной сети acl localnet src 192.168.0.0/24
        Теперь всё ок. Отличная статья, спасибо!

  2. codet /

    Здравствуйте! Такая проблема к странице отчета могут подключится все http://testproxe/sqstat/sqstat.php. Как ограничить доступ к отчетом только админамм???

    1. Алексей Максимов / Автор записи

      Это можно сделать средствами Apache. Самый простой пример здесь http://www.lissyara.su/articles/freebsd/programms/squid_sams/#sqstat. Помимо этого, Apache можно интегрировать с доменной аутентификацией, но это уже будет посложнее.

      1. codet /

        Спасибо. А еще такой вопрос. По вашему мнению каким способом лучше резать скорость для пользователей???

        1. Алексей Максимов / Автор записи

          Не могу сказать. Не изучал эту тему.

  3. codet /

    Когда настраивал Sqstat выдовало постоянно ошибку разнес запись
    http_access allow manager localhost
    на две
    http_access allow manager
    http_access allow localhost
    Все заработало. Это не критичное изменение?

    1. Алексей Максимов / Автор записи

      Это разные вещи, то что было и то, что стало. Читайте документацию по директиве http_access, чтобы понять что вы сделали.

  4. Сергей /

    Добрый день,
    Все сделал как указано — на выходе получаю следующую ошибку —
    SqStat error
    Error (0): php_network_getaddresses: getaddrinfo failed: Name or service not known
    Как проверить работоспособность squid?
    Я вижу что access.log пустой.
    wpad.dat работает — в браузере открывается и парсером настройки проверил — все верно.
    Тестирую на своей машине — должен идти через проксю, но похоже не идет.
    Я же не должен проксю прописывать в браузере напрямую?

  5. Alex /

    доброго времени суток, после установки и настройки SQStat (как указанно выше) при открытии в браузере сразу выдается ошибка ERROR 111 … Проверил весь конфиг, и ни как не могу найти причину. Надежда на Вас,

    1. Alexandr /

      Добрый день. Решил помочь с вопросом. Такая же была ошибка, но помимо этой статьи я еще воспользовался статьей https://habrahabr.ru/post/56886/. Можно сказать я объединил их, сделал как у автора данной статьи и позаимствовал пару настроек из статьи на хабре и все заработало.

  6. XxX /

    Уважаемые, подтолкните в нужном направлении. Суть вопроса — два компика у меня, один на винде другой на убунте оба ходят в мир через сквид при создании отчета в лайтсквиде вижу обе машинки, а вот в сквид стате только машинку на винде … подскажите с чем может быть связано данное поведение.

    1. XxX /

      уточню — статистику выдает только о том компе с которого я просматриваю

    2. XxX /

      разобрался … посещение сайта крайне мимолетно для сквидстата и фиксирует он походу только на момент подключения или если долго качать что-то. В связи с чем крайне сложно отследить все 100500 вкладок которые на данный момент открыты у пользователя да и хттпс не фиксирует, хотя тут наверно есть костыль для того чтоб исправить ситуацию

  7. Обратная ссылка: Настройка прокси сервера Squid 3.3 на Ubuntu Server 14.04 LTS. Часть 4. Конфигурация Kerberos и NTLM | Блог IT-KB /

  8. Обратная ссылка: Настройка прокси сервера Squid 3.3 на Ubuntu Server 14.04 LTS. Часть 9. Конфигурация LightSquid | Блог IT-KB /

  9. Вася /

    Отличный цикл статей.

  10. Александр /

    Здравствуйте! Во-первых, спасибо за отличный цикл статей по Squid.
    Вопрос у меня по SQStat. Все работает замечательно, но у одного и того же пользователя отображается одновременно две статистики, первая — по открытым веб-сайтам, причем имя учетки там — с регистром букв как в AD, например PavlovAS, и другая — судя по адресам, представляющая собой открытые соединения Скайпа, но имя учетки там почему-то уже в нижнем регистре, например pavlovas. Видимо, из-за этой разницы в регистрах SQStat не показывает все эти соединения как соединения одного пользователя, и разделяет на 2 разных учетки. Почему такое происходит, и как в SQStat убрать зависимость от регистра, и возможно ли это вообще?
    SQUID настраивал по вашим статьям.

    1. Алексей Максимов / Автор записи

      Здравствуйте, Александр.
      Предположу, что у Вас пользователь в браузере аутентифицирется на прокси прозрачно через NTLM или Kerberos, поэтому учётка видна в реальном регистре, а вторая сессия из Skype c иным регистром, так как имя пользователя так прописано в явном виде в настройках самого клиента Skype.
      То что SqStat не понимает, что это одно и тоже имя возможно баг, а возможно и умышленная фича, так как в Linux-системах регистр имеет значение.
      SqStat это всё-таки скрипт, и никто Вам не мешает подпилить его под свои Windows-ориентированные нужды. Если у Вас для этого нет навыков/терпения/времени, то можно отыскать тех, кто за это возьмётся. Например, на GitHub c пол-пинка можно найти такой форк https://github.com/lorf/sqstat
      Можете попробовать написать товарищу Issue и, возможно, он Вам поможет.
      Разумней было бы сделать какой-то параметр, который бы определял работу скрипта — без учёта регистра имён и с учётом.

      1. Александр /

        Я понял, спасибо. Да, в браузере, по-видимому, прозрачно, но в Скайпе я специально ничего не прописывал, настройки там стоят по умолчанию.
        Буду, значит, пытаться перепиливать скрипт…

Добавить комментарий