Выбор Веб Интерфейса для squid

Раздел все что касается прокси , трафика интернета, ограничения, блокировки интернет ресурсов. Отслеживания трафика.
PowerDNS , squid , bind, recursor, user agent , ldap и т.д.
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

Выбор Веб Интерфейса для squid

Сообщение Артём Мамзиков »

Ранее в каждой сети на прокси был sams (Squid Account Management System) для squid

На данный момент с каждого прокси информация будет отправляться на 1 центральный прокси для сводки данных и их отображения

задача, найти парсер/обработчиков/анализатор логов squid
чтобы был аналогом sarg но с записью отчетов не в HTML файла в базу mysql

написать скрипты сбора логов со squid и копирования их на 1 сервер
на сервере поднять обработчик логов (выбрать обработчик установить настроить) в базу sql и отображения в web интерфейсе

https://habr.com/ru/post/273809/

Варианты с SQL

1 ScreenSquid
У этой программы другая логика: журнал импортируется в базу данных MySQL,
затем данные запрашиваются из нее при работе в веб-интерфейсе.
База с обработанным десятидневным логом, записи 26330490, занимает 1,5 Гб.

2 Sams - использовалась раньше на старых прокси SQL

3 squid-pb - система анализа и контроля пользователей прокси-сервера squid.
Возможности: блокирование доступа при окончании средств, кредитные зоны,
система управления аккаунтом пользователя, назначение стоимости трафика
из данной сети, отчеты. Парсер лога написан на Си, web-интерфейс на PHP,
база данных хранится в MySQL.

4 squserlim - установка квот на трафик проходящий через Squid
Программа для квотирования (ограничения) объема полученных данных для каждого пользователя,
работающего через прокси-сервер Squid. Квоты могут устанавливаться на любой период.
Данные о квотах хранятся в базе данных MySQL.

5 SquidParser - Система управления пользователями SQUID.
Система управления пользователями работающими через Squid: учет баланса, создание, удаление пользователей, прайсы.
Используется Perl и MySQL.

6 SquidLimit - подсчёт трафика для Squid
Микроскопическая система учёта трафика (позволяет устанавливать лимиты и отображать накопленную статистику)
по пользователям и группам для Squid. Написана на Perl и использует PostgreSQL.

7 Squid2MySQL - squid accounting system
Скрипт для анализа лог файла squid и помещения данных о трафике в MySQL базу.
Присутствует web-интерфейс на php для просмотра статистики.

8 MySAR
MySAR - анализатор лога squid с поддержкой mysql
Необходимость заставила поискать анализатор лога для сквида который всё своё барахло хранит в мускуле....
После нескольких проб (squid2mysql, sams)
Остановился на MySAR http://giannis.stoilis.gr/software/mysar/
Вид имеет практически идентичный sarg`у функционал тоже.



SARG - какие отчеты формирует
Отчеты создаются в виде html-страниц и складываются в каталог /var/www/html/squid-reports
задающий количество хранимых отчетов в каталоге
дата его создания, количество уникальных пользователей, суммарный трафик за период, среднее количество трафика на пользователя.
1 topusers — суммарный трафик по пользователям
2 topsites — отображаются IP-адреса. При настройке включении соответствующей опции IP-адреса преобразуются в доменные имена.
3 sites_users — отчет по самым популярным сайтам отчет о том, кто заходил на определенный сайт
4 users_sites — отчет о посещенных сайтах каждым пользователем.
5 date_time — распределение трафика пользователя по дням и часам
6 denied — заблокированные squid-ом запросы
7 auth_failures — отказы в аутентификации
8 site_user_time_date — показывается в какое время на какой сайт и с какой машины заходил
9 downloads — список загрузок.
10 useragent — отчет об используемых программах
11 redirector — отчет показывает кому был заблокирован доступ средствами блокировщика

ScreenSquid
1 Трафик пользователей логины
2 Трафик пользователей IP адреса
3 Трафик сайтов
4 Топ сайтов
5 Топ пользователей
6 Топ IP адресов
7 По времени суток
8 Трафик пользователей логины расширенный
9 Трафик пользователей IP адреса расширенный
10 Трафик IP адреса с резолвом
11 Популярные сайты
12 Кто качал большие файлы
13 Трафик по периодам (дни)
14 Трафик по периодам (имя дня)
15 Трафик по периодам (месяцы)
16 HTTP статусы
17 IP адреса логинов
18 Логины с IP адресов


файл конфига nano /etc/squid/squid.conf
файл конф хранения логов nano /etc/logrotate.d/squid

/var/log/squid/access.log или бывает /usr/local/squid/log/access.log
Squid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала:
access.log - содержит записи о запросах клиентов;
store.log - содержит записи, относящиеся к действиям с кэшем;
cache.log - содержит сообщения об ошибках, возникающих при работе Squid.
netdb.state
squidmill.log
Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения:
Основные настройки logrotate хранятся в /etc/logrotate.conf
настройки отдельных сервисов (в нашем случае Squid) хранятся в /etc/logrotate.d/squid
и эти настройки имеют приоритет над logrotate.conf.
Сама служба вызывается раз в сутки через планировщик cron.
Нас интересует ротация логов только двух файлов access.log и cache.log.
Для файла access.log мы будем раз в месяц выполнять ротацию, а для файла cache.log раз в неделю.
Откроем для редактирования файл конфигурации
nano /etc/logrotate.d/squid
ScreenSquid.jpg
ScreenSquid.jpg
https://habr.com/ru/post/335204/

Варианты копирования
Копировать логи с прокси районов на центральный прокси и уже программой забирать данные в sql
Забирать нужную информацию и подливать в один файл логов или разные файлы для каждого района свой и уже программой забирать данные в sql
Передавать логи сразу в Sql централизованную базу (репликация)
Поставить на все прокси программы с SQL и с этих баз собирать инфу в центральную базу

Копировать логи с прокси районов на центральный прокси и уже программой забирать данные в sql

Какую инфу тянуть из логов районов

1 Трафик пользователей логины
2 Трафик пользователей IP адреса
3 Трафик сайтов
4 Топ сайтов
5 Топ пользователей
6 Топ IP адресов
7 По времени суток
8 Трафик пользователей логины расширенный
9 Трафик пользователей IP адреса расширенный
10 Трафик IP адреса с резолвом
11 Популярные сайты
12 Кто качал большие файлы
13 Трафик по периодам (дни)
14 Трафик по периодам (имя дня)
15 Трафик по периодам (месяцы)
16 HTTP статусы
17 IP адреса логинов
18 Логины с IP адресов

Проверка скопировался лог или нет (при ошибке копирования или обрыве - возобновить или начать заново повторно) если не скопировался лог .. аларм на почту когда связь появится
Очистка старых логов пол года
***********

Вопросы
Какую инфу тянуть из логов районов
Какой промежуток времени хранить информацию
Проверка скопировался лог или нет (при ошибке копирования или обрыве - возобновить или начать заново повторно)
Очистка старых логов

в идеале написать баш скрипт который будет подключаться по ssh к прокси и тащить лог к себе
если куда не смог подключиться..АЛАРМу на почту

Настройки squid
Показать
nano /etc/logrotate.d/squid

Приведем файл настройки ротации логов для Squid в вид который нам нужно.

# Ежемесячная ротация лог-файла accesss.log
/var/log/squid/access.log {
# daily
# weekly
monthly
compress
delaycompress
rotate 2
missingok
nocreate
sharedscripts
postrotate
test ! -e /var/run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -$
endscript
}
# Еженедельная ротация лог-файла cache.log
/var/log/squid/cache.log {
# daily
weekly
# monthly
compress
delaycompress
rotate 1
missingok
nocreate
sharedscripts
postrotate
test ! -e /var/run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -$
endscript
}

Разберем структуру написанного выше подробнее. Первая строка указывает путь к обрабатываемым файлам логов. В данном случае обрабатываются файлы access.log и cache.log в соответствии с указанными ниже опциями:

daily - задает ежедневную ротацию
weekly - задает еженедельную ротацию
monthly - задает ежемесячную ротацию
compress - указывает сжимать архивные логи, обратная опция nocompress.
delaycompress - не сжимать текущий лог до следующей ротации, обычно используется в тех случаях, когда в лог происходит непрерывная запись.
rotate 2 - количество ротаций до удаления файла, в данном случае будут храниться два архива.
missingok - при отсутствии файла журнала указывает продолжить работу без вывода сообщения об ошибке.
nocreate - не создавать новый файл лога.

sharedscripts - используется для секций prerotate и postrotate, данная опция указывает исполнять скрипты из этих секций один раз перед и после ротации всех логов, в противном случае скрипты будут исполнены перед и после ротации каждого лога.

Секция postrotate проверяет, запущен ли <strong>squid</strong> и запускает ротацию логов самим прокси сервером.

Дополнение: Еще возможна секция prerotate, она добавляется автоматически при установке анализатора логов SARG и в случае если файл /usr/sbin/sarg-reports существует и является исполняемым, запускает его. В моем случае формирование отчетов в Sarg запускается по cron, поэтому я исключил его из конфигурации.

Т.к. мы ротацию будем осуществлять исключительно службой logrotate, то поправим конфигурацию squid

sudo nano /etc/squid/squid.conf

Находим строку logfile_rotate 6 (или добавляем ее в случае ее отсутствия). И приводим к виду

logfile_rotate 0

Подсказка: где 6 — число ротаций, Squid хранит несколько экземпляров логов, каждый файл лога будет обрабатываться logrotate. Число 0 указывает на отключение выполнении ротации файлов силами Squid

Сохраняем Ctrl+O и закрываем Ctrl+X файл.

Перезапускаем Squid, новые настройки вступят в силу. Вот так легко и просто настраивается ротация логов.

Установка ScreenSquid
Установка ScreenSquid на altlinux 5
Показать
ScreenSquid
Статья
http://break-people.ru/cmsmade/?page=sc ... reen_squid
Оф сайт
https://sourceforge.net/projects/screen-squid/files/

apt-get update
apt-get upgrade
Установка mysql
apt-get install MySQL-client MySQL-server
chkconfig mysqld on
service mysqld start
mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('you_own_pass');
Конфиг
nano /var/lib/mysql/my.cnf
character_set_server = utf8
collation_server = utf8_general_ci
Если нужно
[client]
default-character-set=cp1251
если нужно
nano /etc/sysconfig/mysqld
service mysqld restart

Качаем извлекаем screensquid_v1_12
перемещаем файлы архива по такому пути
/var/www/screensquid/

mysql -u root
CREATE DATABASE screensquid DEFAULT CHARACTER SET=utf8;
SOURCE /var/www/screensquid/createdb/createdb.sql
UPDATE user SET Password=PASSWORD('Пароль') WHERE user='root';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'Пароль';
GRANT ALL PRIVILEGES ON screensquid.* TO 'root'@'localhost';
exit
mysql -uroot -pПароль
quit

nano /var/www/screensquid/config.php
$db = "screensquid";
$user = "user_name";
$pass ="password";
$address ="localhost";
$cfgsquidhost[0]="localhost";
$cfgsquidport[0] = 3128;
$cfgcachemgr_passwd[0]="{пароль из директивы cachemgr_passwd squid.conf}";

nano /etc/squid/squid.conf - просмотр cachemgr_passwd

nano /var/www/screensquid/fetch.pl
my $user = "user_name";
my $pass = "password";
my $db = "screensquid";
my $filetoparse="/var/log/squid3/access.log.1"; /var/log/squid/access.log
my $filetolog="/var/www/screensquid/ssquid.log";

cd /var/www/screensquid
chmod u+x fetch.pl
crontab -e
# запуск каждый день в 23 часа
00 23 * * * /var/www/screensquid/fetch.pl

Сам файл представляет простейший скрипт следующего содержания:
#!/sbin/sh
cd /var/www/squidreport/
perl /var/www/squidreport/fetch.pl

chown -R www-data:www-data /var/www/screensquid/lib/pChart/pictures/

nano /var/lib/mysql/my.cnf

Установка
apt-get install lamp-server
apt-get install apache2
apt-get install phpMyAdmin-apache2
Изменения
nano /etc/httpd2/conf/extra-available/phpMyAdmin.conf
добавить Alias /phpmyadmin /var/www/webapps/phpMyAdmin/
Allow from all

nano /var/www/webapps/phpMyAdmin/config.inc.php

Изменить дефолтный на общий путь
nano /etc/httpd2/conf/sites-available/default.conf
DocumentRoot "/var/www/"
<Directory "/var/www/">
Включение
a2ensite default.conf
перезапускаем
service httpd2 restart
/etc/init.d/httpd2 restart
service httpd2 start
/etc/init.d/httpd2 start

Создание отдельного
Просмотр
ls etc/httpd2/conf/sites-enabled/

Копия cp /etc/httpd2/conf/sites-available/default.conf /etc/httpd2/conf/sites-available/screensquid.conf

nano /etc/httpd2/conf/sites-available/screensquid.conf
#ServerAlias screensquid
#ServerName screensquid
ServerAdmin admin@csv35.ru
DocumentRoot /var/www/

<Directory /var/www/>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
или
<Directory " /var/www/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

a2ensite screensquid.conf - включение
a2ensite screensquid
проба a2ensite squidscreen.conf
a2dissite - отключение

apt-get install apache2-mod_php5
a2enmod mod_php5

nano /etc/httpd2/conf/include/Directory_html_default.conf
Options Indexes Includes FollowSymLinks MultiViews
перезапускаем
service httpd2 restart
systemctl restart httpd2


Время сессии
nano /etc/phpmyadmin/config.inc.php
nano /var/www/webapps/phpMyAdmin/config.inc.php
И дописываю параметр:
$cfg['LoginCookieValidity'] = 21600;
$cfg['ExecTimeLimit'] = 21600; - время загрузки для сессии

Еще
nano /etc/php5/apache2/php.ini
где меняем значение параметрка session.gc_maxlifetime на 21600по умолчанию 1440 значение:
session.gc_maxlifetime = 21600
max_execution_time=6000
max_input_time=6000
перезапускаем
service httpd2 restart
service apache2 restart


http://192.168.175.5:6006/screensquid/
http://192.168.175.5:6006/phpMyAdmin/
http://192.168.175.5:6006/php
http://192.168.175.5:6006/ http://192.168.175.5:6006/index
http://192.168.175.5:6006/sams/


Инструкции
http://break-people.ru/cmsmade/?page=sc ... quid_files скачать
http://drels.blogspot.ru/2016/12/screen ... 7-110.html
http://drels.blogspot.ru/2015/06/screen ... squid.html
http://drels.blogspot.ru/2015/12/screen ... squid.html
Пример еще одно инструкции по обновлению Переходим с Screen Squid 1
Переходим с Screen Squid 1
Показать
Переходим с Screen Squid 1.7 на 1.10
Продолжу начатую ещё с версии 1.5 инструкцию по установке и первоначальной настройке Screen Squid. Теперь рассказ будет про 1.10. Возможно в процессе что-нибудь упущу, т.к. каждый раз инструкцию пишу по памяти, а не в процессе установки. Также, в отличие от предыдущих инструкций, упомяну здесь случай переноса некоторых данных с таблиц версии 1.7, т.к. по новой создавать алиасы, группы и их соединения вряд ли захочется.

Все дальнейшие пункты установки подразумевают, что у вас уже установлены http- и mysql-сервер, как и php с модулями mysql и iconv в случае необходимости. Замечу, что версия PHP 7 не будет работать с текущей версией Screen Squid, т.к. изменился драйвер mysql на mysqli. Возможно эту проблему можно допилить настройками, но я пока этим вопросом не заморачивался.

И так, приступим к установке 1.10.

Перед реализацией всей этой машинерии необходимо скачать ScreenSquid с сайта разработчика.
Для нормальной работы MySQL с UTF-8 была проделана небольшая настройка в файле /etc/mysql/conf.d/mysql.cnf (для версии 5.7 в Ubuntu 16.04, в других дистрибутивах это может быть /etc/my.cnf, /etc/mysql/my.cnf и т.п.):
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
Произведённые выше действия с конфигурационным файлом восстановили корректную работу с кириллическими символами. Не знаю как будет у Вас, но без этого кириллица упорно сохранялась и отображалась в win1252 (latin1).
После успешной загрузки и настройки MySQL распакуем полученный архив в директорию расположения веб-страниц:

sudo tar xzf screensquid_v1_10.tar.gz -С /var/www/
В связи с тем, что помимо анализатора логов ScreenSquid у меня там хранятся и другие страницы, переименую его:
sudo mv /var/www/html /var/www/screensquid/
Переходим к созданию базы данных, в которой будут храниться логи, и заполнению её таблицами (отношениями).
Подключимся:
mysql -u[user_name] -p[password]
Создадим новую базу данных (если ранее была установлена 1.7 название должно отличаться):
CREATE DATABASE screensquid DEFAULT CHARACTER SET=utf8;
после чего произведём её заполнение, воспользовавшись прилагаемым к ScreenSquid файлом createdb.sql:
use screensquid;
SOURCE /var/www/screensquid/createdb/createdb.sql;
Чтобы не подключаться пользователем root и не светить его права создадим нового пользователя mysql и наделим его полными правами к созданной БД. Данный пункт можно частично не выполнять, в случае ранее установленной версии 1.7, оставив лишь GRANT... с указанием новой базы:
CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON screensquid.* TO 'user_name'@'localhost';
С самой сложной часть сего Марлезонского балета покончено и мы плавно переходим к редактированию конфигурации ScreenSquid. Вместо user_name и password указываем те значения, которые мы ввели выше:
sudo vi /var/www/screensquid/config.php
$db = "screensquid";
$user = "user_name";
$pass ="password";
$address ="localhost";
$cfgsquidhost[0]="localhost";
$cfgsquidport[0] = 3128;
$cfgcachemgr_passwd[0]="{пароль из директивы cachemgr_passwd squid.conf}";
и в скрипте заполнения таблиц БД:
sudo vi /var/www/screensquid/fetch.pl
my $user = "user_name";
my $pass = "password";
my $db = "screensquid";
В последнем файле, который выполняет роль парсера файла лога, были внесены очень необходимые изменения, а это:
1. Можно указывать короткий или полный путь к файлу лога SQUID
2. Появился лог результатов выполнения скрипта, путь к которому также можно указать в коротком или полном формате.
3. Добавилось логирование в БД о процессе работы парсера.
Поэтому не побрезгуем и воспользуемся этими возможностями, отредактировав соответствующие переменные:
my $filetoparse="/var/log/squid3/access.log.1";
my $filetolog="/var/www/screensquid/ssquid.log";
Конечно же можно было оставить эти значения по умолчанию, разместив сам скрипт в папке с логами, но этот метод меня не устроил. Также заметьте, что парсер будет работать с файлом .1, который появляется после работы программы logrotate, таким образом получая в базе данные за предыдущий день. Никто не заставляет поступать аналогичным образом, всё в Ваших руках.

По завершении конфигурирования парсера сделаем его исполняемым, воспользовавшись командой:
sudo chmod u+x fetch.pl
После чего настроим cron для запуска этого скрипта:
sudo crontab -e
куда добавим следующую запись:
# запуск каждый день в 23 часа
00 23 * * * /var/www/screensquid/fetch.pl
С конфигурированиями закончили, поэтому можно немного расслабиться и поиграться другими очень интересными и нужными командами.

В предыдущих версиях были добавлены графики и диаграммы в Dashboard и отчёте "По времени суток". Так как архив с анализатором мы распаковывали с правами root, именно он и стал владельцем всех каталогов и файлов. Менять владельца на всё не буду, поэтому ограничусь лишь каталогом, где создаются эти самые картинки:
sudo chown -R www-data:www-data /var/www/screensquid/lib/pChart/pictures/

Также в 1.10 появился экспорт некоторых отчётов в PDF, которые создаются в каталоге output. Ему также необходимо изменить владельца, как и пунктом выше.

Кто решится перейти с 1.7 на 1.10 и перенести алиасы, группы и другую информацию, можете выполнить указанные ниже команды после входа в консоль mysql с помощью :
mysql -u[user_name] -p[password]
INSERT INTO screensquid.scsq_alias SELECT * FROM {db1.7}.scsq_alias;
INSERT INTO screensquid.scsq_aliasingroups SELECT * FROM {db1.7}.scsq_aliasingroups;
INSERT INTO screensquid.scsq_groups SELECT * FROM {db1.7}.scsq_groups;
INSERT INTO screensquid.scsq_logins SELECT * FROM {db1.7}.scsq_logins;
INSERT INTO screensquid.scsq_ipaddress SELECT * FROM {db1.7}.scsq_ipaddress;
INSERT INTO screensquid.scsq_httpstatus SELECT * FROM {db1.7}.scsq_httpstatus; // можно не переносить

Не забудьте заменить текст в фигурных скобках на название своей базы данных версии 1.7.

Да, чуть на забыл, что появилась разбивка сайтов по группам. Работает пока не очень, но не могу не отметить процесс заполнения таблиц. Качаем вот это: http://www.shallalist.de/Downloads/shallalist.tar.gz и распаковываем в любую директорию. Далее качаем парсер с форума break-people.ru и кладём в тот же каталог. Вносим в него изменения в соответствии с потребностями:
my $host = "localhost"; # host s DB
my $port = "3306"; # port DB
my $user = "user_name"; # username k DB
my $pass = "password"; # pasword k DB
my $db = "screensquid"; # name DB
И запускам на выполнение: perl ./getcat.pl

Через несколько чашек кофе и/или сигарет скрипт закончит свою работу и заполнит необходимые таблицы в Screen Squid.
________________________________________
ВОЗМОЖНЫЕ ОШИБКИ
________________________________________
Если в процессе выполнения скрипта парсера появляются ошибка вида:
DBD::mysql::st execute failed: MySQL server has gone away at fetch.pl line XXX, <IN> line YYY.
попробуйте в fetch.pl уменьшить значение в строке:
$count_lines_for_one_insert=10000;
________________________________________
На сих откланиваюсь. Спасибо за внимание =) Успехов!
количество слов: 1335

Вернуться в «PROXY Прокси»