Настройка автоматического подсчета трафика: Squid, Sarg

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

[s2@anarxi.st]

Задание:
  • Вести подсчет трафика, который проходит через Squid.
  • Запрещать доступ пользователям, которые превысили лимит.

Конфигурация системы:

  • FreeBSD 5.4-Release
  • Apache-2
  • Squid-2.5.10_20050819
  • Sarg-2.1: советую использовать этот, так как в 2.0.9 неправильно происходил подсчет.
  • Две локальные сети(192.168.1.0/24 и 192.168.2.0/24)

Конфигурационный файл Squid (squid.conf):

#слушаются только внутренние адреса
http_port 192.168.1.1:3128
http_port 192.168.2.1:3128
http_port 127.0.0.1:3128

#отключены ICP запроси
icp_port 0

#параметры которые стоят по дефолту
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

#обьем памяти по дефолту соит 8
cache_mem 12 MB

#Default:
# cache_dir ufs /usr/local/squid/cache 100 16 256
cache_dir ufs /usr/local/squid/cache 256 16 256

dns_nameservers 127.0.0.1

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on
auth_param basic realm Access Squid
auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/squid.users

# squid.users файл где лежат логины и пароли к доступу к squid
# заносятся юзеры при помощи команды htaccess (man htaccess)

#Suggested default:
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 22          # ssh
acl Safe_ports port 443 563     # https, snews
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

http_access allow manager localhost
http_access deny manager

# Deny requests to unknown ports
http_access deny !Safe_ports

# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports

#блокировка баннеров 
acl nobanners src 0/0
acl banners url_regex "/usr/local/etc/squid/banners.acl"
http_access deny nobanners banners
deny_info http://192.168.1.1/empty.jpg banners

#блокировка юзеров которые превысили лимит (файл user-deny), 
#и разрешение этим юзерам только к тем IP которие перечислины в файле host.acl

acl aolaccess dst "/usr/local/etc/squid/host.acl"
acl users proxy_auth REQUIRED
acl banusers proxy_auth "/home/blabla/user-deny"
http_access allow aolaccess banusers
http_access deny banusers
http_access allow users

http_access deny all

#Default
http_reply_access allow all
miss_access allow users
visible_hostname bla-bla.yourhostname
coredump_dir /usr/local/squid/cache

Ниже приведен список адресов к которым разрешен доступ юзерам которые привысили лимит по трафику.(ICQ.Ukr.net etc)

host.acl

205.188.0.0/16
64.12.0.0/16
195.248.0.0/16
213.133.0.0/16
212.42.0.0/16
195.214.0.0/16

Файл, блокирующий баннеры

banners.acl

/banner/
.banner.
/bannex/
.bannex.
/baner/
.baner.
/banners/
.banners.
.sex.
/sex/
/erotic/
.erotic.
/porn/
.porn.
banpics
us.yimg.com
[./]ad[s]?[./]
ad0.bigmir.net
ad1.bigmir.net
ad2.bigmir.net
ad3.bigmir.net
ad4.bigmir.net
ad5.bigmir.net
ad6.bigmir.net
ad7.bigmir.net
ad8.bigmir.net
ad2.rambler.ru
/cgi-bin/banner
advert
adverts
banner.linkexchange.com
bs.yandex.ru/count/
hotlog.ru/cgi-bin/hotlog/count
pics.rbc.ru/rbcmill/img/
top.list.ru/counter
spylog.com/cn
top100-images.rambler.ru/top100/banner
counter.rambler.ru/top100.cnt
ad*.lbn.ru/bb.cgi
ad4.bannerbank.ru/bb.cgi
b*.abn.com.ua
mbn.com.ua
webex.ru/bn/tbe
bigbn.com.ua
i.bigmir.net
c.bigmir.net
abnad.net
top.bigmir.net
ar.atwola.com/link/
ar.atwola.com/image


^http://banners.rambler.ru/advert/.*.gif
^http://www.abn-ad.com/l*
^http://kulichki.rambler.ru/reklama/banners/.*.gif
^http://www.*.yandex.ru/cgi-bin/banner/*
^http://www1.reklama.ru/cgi-bin/banner/*
^http://www.reklama.ru/cgi-bin/banner/*
^http://www.reklama.ru/cgi-bin/href/*
^http://www.100mb.net/images/ban/banner.*.gif
^http://www.bizlink.ru/cgi-bin/irads.cgi.*
^http://www.linkexchange.ru/cgi-bin/rle.cgi
^http://www.linkexchange.ru/users/.*/goto.map
^http://www.netcq.com/banners/banner.gif
^http://1000.stars.ru/cgi-bin/1000.cgi
^http://213.133.165.94/*

Файл со списком юзеров, которым запрещен доступ

user-deny

vasia
petya
bla-bla

Конфигурационный файл Sarg:

Если вы хотите использовать в статистике вывод графики, у вас должен быть установлен gd (A graphics library for fast creation of images)

sarg.conf

language Russian_koi8

#Файл squd где хранится статистика по юзерам
access_log /usr/local/squid/logs/access.log

graphs yes
graph_days_bytes_bar_color red
title "Stats only Internet"
font_face Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 9px
header_font_size 9px
title_font_size 11px
background_color white
text_color #000000
text_bgcolor lavender
title_color green
logo_text_color #000000
image_size 80 45

#директория куда помещаются отчеты
#в апаче нужно прописать этот путь
#типа Alias /sarg "/usr/local/www/sarg/squid-reports"
output_dir /usr/local/www/sarg/squid-reports

user_ip no

#файл где указываются IP или DNS имена сайтов которые мы не хотим считать
#это могут быть локальные etc
exclude_hosts /usr/local/sarg/hosts

date_format e

#задаем квоту на 300 Мб тобиш юзеры которые 
#закачали больше 300 Мб попадают в файл
#user-deny который смотрит squid
per_user_limit /home/blabla/user-deny 300

remove_temp_files yes
index yes
overwrite_report yes
topsites_num 100
topsites_sort_order CONNECT D
index_sort_order D
exclude_codes /usr/local/sarg/exclude_codes
max_elapsed 28800000
date_time_by bytes
show_sarg_info yes
show_sarg_logo yes
displayed_values bytes
user_authentication yes

#авторизация в отчеты юзеров можна зайти только каждый в свой отчет
#и нужно создать в файле squid.users юзера admin он 
#может заходить в любые отчеты
AuthName "Internet"
AuthType Basic
AuthUserFile /usr/local/etc/squid/squid.users
require user  %u

/usr/local/sarg/hosts

192.168.1.1
192.168.2.1
Google.com
Итак, конфиги настроены, нужно их синхронизировать и автоматизировать. Делаем файл /home/blabla/sarg.sh , и добавляем его в /etc/crontab
30  8,9,10,12,14,16,18,23  * * *  root /home/blabla/sarg.sh > /dev/null

sarg.sh

#!/bin/sh
squidcom='./squid.sh reload'

cd /usr/local/www/sarg/squid-reports
rm -R *

data=`date "+%d/%m/%Y"`
sarg -d 1/01/2006-$data

cd /usr/local/etc/rc.d
$squidcom

exit
Итак, Sarg, проанализировав access.log выводит репорт который мы смотрим через WEB. Юзеры которые провинились, попадают в файл /home/blabla/user-deny, в сквиде мы создали правило юзеры которые находятся в этом файле не пускать в инет, а пускать только в аську и etc. Каждый месяц я чищу папку /usr/local/www/sarg и меняю в файле sarg.sh месяц от которого сарж будет считать трафик.

Есть маленькая проблема нету градации по юзерам, например оному юзеру нужно выделить 30M а другому 300M, я на php написал скрипт если кумуто понадобится он здесь Смысл этого скрипта: он делает файл user-deny с градацией по лимиту. Его нужно добавить в крон (ban.sh) и поправить в squid.conf путь к user-deny, тогда уже не надо параметр per_user_limit /home/blabla/user-deny 300 и скрипт sarg.sh будет выглядеть так

sarg.sh

#!/bin/sh

cd /usr/local/www/sarg/squid-reports
rm -R *

data=`date "+%d/%m/%Y"`
sarg -d 1/01/2006-$data

exit

Статья взята с сайта OpenNet.

[ опубликовано 01/06/2006 ]

s2@anarxi.st - Настройка автоматического подсчета трафика: Squid, Sarg   Версия для печати