Наверняка каждому системному администратору приходилось отвечать на вопросы пользователей "почему тормозит интернет", словами что кто-то забил канал своими бесконечными скачиваниями музыки и видео. Способов выяснить, кто это делает в Linux вагон и маленькая тележка. В данной статье я расскажу как можно с помощью PHP скрипта SqStat, вести мониторинг в реальном времени за всеми активными соединениями пользователей работающих через прокси сервер Squid.
Распакуем файлы в корень директории с которой ваш веб сервер Apache сможет запустить этот скрипт. Я распаковал его в папку
/var/www/html/sqstat
Создадим файл config.inc.php скопировав его из файла config.inc.php.defaults
cp config.inc.php.defaults config.inc.php
И приступаем к редактированию: /* Глобальные настройки */
$use_js=true; // Использование JavaScript для инструментов HTML
// Максимальная длина URL для отображения в колонке таблицы URI DEFINE("SQSTAT_SHOWLEN",60);
/* Параметры прокси-сервера */
/* Прокси-сервер Squid IP-адрес или имя хоста */ $squidhost[0]="127.0.0.1"; /* Порт Squid прокси-сервера */ $squidport[0]=3128; /* сachemgr_passwd в squid.conf. Оставьте пустым, чтобы отключить разрешение */ $cachemgr_passwd[0]=""; /* Преобразовывать IP адреса пользователей или показывать только номера [true|false] */ $resolveip[0]=false; /* Раскомментируйте следующую строку, если вы хотите использовать хосты, как файл. See hosts.txt.dist. */ // $hosts_file[0]="hosts.txt" /* Группа пользователей с именем хоста - "host" или пользователя - "username". Имя пользователя работать только с squid 2.6 + */
$group_by[0]="host";
/* Вы можете указать более одного прокси-сервера в файле конфигурации, например: */ // $squidhost[1]="192.168.0.2"; // $squidport[1]=3129; // $cachemgr_passwd[1]="secret"; // $resolveip[1]=true; // $hosts_file[1]="otherhosts.txt"
?>
Для простейшей конфигурации достаточно поставить адрес и порт своего прокси сервера (в своем случае я заменил 127.0.0.1на свой 192.168.210.1 и оставил без изменения 3128) .
если такое SqStat error Error (1): Cannot get data. Server answered: HTTP/1.1 200 OK то if($raw[0]!="HTTP/1.0 200 OK"){ надо было заменить на if($raw[0]!="HTTP/1.1 200 OK"){
Вот параметры: acl our_networks src 172.22.22.0/24 - было, поставил acl our_networks src 172.22.22.81/24 acl manager proto cache_object acl webserver src 172.22.22.81/255.255.255.0 http_access allow manager webserver http_access deny manager --------- squid ругается на класс сети и маску service squid restart Stopping squid: 2011/02/15 17:56:40| aclParseIpData: WARNING: Netmask masks away part of the specified IP in '172.22.22.81/24' 2011/02/15 17:56:40| aclParseIpData: WARNING: Netmask masks away part of the specified IP in '172.22.22.81/255.255.255.0' ------------- После замены та же ошибка :-(
Вот тело скрипта, изменил только ip адрес машина на которой живет squid:
<?php /* global settings */
$use_js=true; // use javascript for the HTML toolkits
// Maximum URL length to display in URI table column DEFINE("SQSTAT_SHOWLEN",60);
/* proxy settings */
/* Squid proxy server ip address or host name */ $squidhost[0]="172.22.22.81"; /* Squid proxy server port */ $squidport[0]=3128; /* cachemgr_passwd in squid.conf. Leave blank to disable authorisation */ $cachemgr_passwd[0]=""; /* Resolve user IP addresses or print them as numbers only [true|false] */ $resolveip[0]=false; /* uncomment next line if you want to use hosts-like file. See hosts.txt.dist. */ // $hosts_file[0]="hosts.txt" /* Group users by hostname - "host" or by User - "username". Username work only with squid 2.6+ */ $group_by[0]="host";
/* you can specify more than one proxy in the configuration file, e.g.: */ // $squidhost[1]="192.168.0.2"; // $squidport[1]=3129; // $cachemgr_passwd[1]="secret"; // $resolveip[1]=true; // $hosts_file[1]="otherhosts.txt"