Создаём шлюз с системой учёта трафика на слабом компьютере::Журнал СА 3.2009
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9876
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8090
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8193
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5189
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5866
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Создаём шлюз с системой учёта трафика на слабом компьютере

Архив номеров / 2009 / Выпуск №3 (76) / Создаём шлюз с системой учёта трафика на слабом компьютере

Рубрика: Администрирование /  Продукты и решения

Николай Емашев

Создаём шлюз с системой учёта трафика
на слабом компьютере

Как поставить и настроить шлюз для небольшой сети на основе FreeBSD.

Вводные данные

Собственно, что мы имеем:

  •  локальная сеть из 60 машин, из которых только 15-20 нужно выпускать в Интернет;
  •  старенький компьютер (процессор Celeron 1100 МГц, 256 Мб RAM, 30 Гб HDD, хотя стабильно работало на процессоре PII 300 МГц, только сеть не более 9-10 машин).

 Задачи:

  •  организовать доступ в Интернет для 20 машин из сети;
  •  вести детальную статистику по трафику;
  •  отключать пользователя при превышении лимита;
  •  настроить доступ по MAC-адресу;
  •  резать рекламу и нежелательные сайты для сокращения расходов трафика.

Теперь все по порядку. Ввиду слабенького оборудования ставить будем FreeBSD. Многие, конечно, скажут, что для такого железа может и Gentoo пойти, но, на мой взгляд, FreeBSD является более гибкой в этом отношении. Итак, приступим…

Установка и настройка

Как установить систему, я объяснять не буду, это не должно вызывать вопросов, скажу лишь, что для логов нужно выделять размер побольше. Если с этим сложности – handbook вам в помощь.

Если вы выдержали установку, приступаем к настройке сети. Первым делом поставим веб-сервер и PHP – пригодятся для сбора статистики. Возможно, придется поставить PHP5 EXTENSIONS.

Ставим прокси-сервер SQUID:

# cd /usr/ports/www/squid/

По умолчанию ставится версия 2.7, другие версии находятся на каталог выше.

Далее даем команду:

# make install clean

Выбираем опции:

  •   SQUID_DELAY_POOLS Enable delay pools – ограничение пользователям скорости канала.
  •  SQUID_FOLLOW_XFF Follow X-Forwarded-For headersразрешить изменение http-заголовков. Может понадобиться, если вы захотите скрыть от общественности свой прокси-сервер.

Все остальное можно оставить как есть.

Замечание: чтобы впоследствии было меньше проблем с настройкой учетных записей пользователей, будем делать прозрачный прокси.

Так, установили, теперь поставим статистику (кто какие сайты посещал, какой объем данных скачал и т. п.). Выбирать скрипт для сбора статистики – дело каждого. Их достаточное количество, но, по моему мнению, заслуживают внимания только LightSquid и Free-SA. Расскажу вкратце о них.

LightSquid

Запуская программу, мы получаем следующие отчёты:

  •  Количество соединений и скачанных байт в день, в месяц и в год по каждому пользователю, для группы и для прокси-сервера в целом.
  •  Популярные сайты дня, месяца и года. В этом отчёте приятно порадовала возможность сортировки списка по количеству запросов либо по объёму данных.
  •  Таблица времени доступа пользователей к сайтам, то есть время активности в Интернете.
  •  Отчёт о «больших» скачанных файлах.

Также хочется отметить удобный интерфейс.

Интерфейс LightSquid

Интерфейс LightSquid

Из недостатков можно отметить низкую скорость обработки логов и, как было замечено на многих форумах, плохую работу с большими логами Squid, что приводит порой к неправильному подсчету. Эту проблему мы исправим позже – будем делать ротацию логов.

Free-SA

Написан на языке Си, по функциональности и назначению похож на LightSquid. Главное отличие – скорость формирования отчетов от 7 до 20 раз выше по сравнению с LightSquid (7х – для 50 Мб файла access.log, 20x – для 1 Гб).

Присутствуют дополнительные отчеты (в том числе для оценки эффективности сервера), изменяемые «на лету» темы оформления, имеется поддержка различных форматов файлов журналов (Squid, CLF, Postfix, Qmail, CGP). Доступен в портах. Сайт – http://free-sa.sourceforge.net.

Free-SA Free-SA

Free-SA

 Может осуществлять:

  •  контроль расхода трафика по пользователям;
  •  контроль выполнения политик безопасности (в части доступа к ресурсам Интернета);
  •  оценку эффективности работы серверов.

Но о Free-SA поговорим в следующий раз, пока рассмотрим вопрос о сборе статистики, имея слабый компьютер. Я не говорю, что эта программа будет плохо работать, но LightSquid по своей функциональности устраивает меня больше.

Эти программы локализованы, могут предоставлять отчеты в графическом виде, поддерживают шаблоны. Их можно использовать вместе, но, по-моему, это так же, как велосипеду поставить дополнительные колеса…

Я остановился на Light Squid – для небольшой сети это, пожалуй, самый оптимальный вариант, и скрипты для лимита по трафику также будут под эту статистику.

Работа с LightSquid

По установке вопросов обычно не возникает, ежели возникнут – скажу словами Фоменко: «Если руки золотые, то не важно, откуда они растут» – обращайтесь к документации.

# /usr/ports/www/lightsquid

# make install clean

Приступим к настройке. Для начала в httpd.conf добавим alias, чтобы можно было обратиться к нему из браузера:

Alias /statistica "/usr/local/www/lightsquid"

<Directory "/usr/local/www/lightsquid">

AddHandler cgi-script .cgi

AllowOverride All

</Directory>

Позже статистику можно посмотреть, набрав в браузере: http://your_server/statistica.

Далее необходимо немножко подправить конфигурационный файл: /usr/local/etc/lightsquid/lightsquid.cfg. Он небольшой, основное внимание следует обратить на следующие строки:

$logpath ="/usr/local/squid/logs/";

Каталог, в котором находятся логи прокси-сервера.

$skipurl = "get.theon.ru|91\.144\.144\.|penzadom.ru";

Домены и IP, с которых не будет собираться статистика – у меня это внутренние ресурсы провайдера, где не идет учет трафика. На работе – служебные сайты.

$lang ="ru-koi8";

Язык в кодировке koi8, если поставить «$lang ="ru"», то будет в windows-1251. У меня в koi8, потому что я редактирую списки пользователей через консоль, которая в этой самой кодировке. Если выбрать потом «ru», то получатся крякозяблы.

$templatename ="ric";

Html-шаблон можно будет скачать на сайте журнала www.samag.ru в разделе «Исходный код». Стандартный не очень блещет красотой дизайнерской мысли:

$bigfilelimit = 20*1024*1024;

Какие файлы будем считать большими – у меня 20 Мб.

$perusertrafficlimit = 300*1024*1024;

Лимит трафика в день на пользователя, его, конечно, не отключат, но в статистике он будет выделен как враг народа, определенным цветом. Так что можно знать – кто в рабочее время больше всего расхищает трафик.

В папке /usr/local/etc/lightsquid находятся настройки групп пользователей, так как у нас сеть небольшая, то их мы не будем затрагивать. Внесем изменения только в realname.cfg. Формат записи такой – «IP-адрес имя», например:

192.168.2.7 Есин Виктор

192.168.2.8 Калинин Владимир

Статистику теперь можно получать, запуская скрипт /usr/local/www/lightsquid/lightparser.pl, что не очень удобно, поэтому его следует добавить в задания cron (команда «crontab -e»), но об этом чуть позже.

Настройка коллектора для сбора трафика, идущего в обход прокси-сервера

Прокси-сервер со статистикой теперь есть (далее сделаем его прозрачным). Как известно, в лог попадает в основном http-трафик, но как быть с той категорией пользователей, которые могут и с других сервисов (ftp, jabber, почта, ssh-трафик и т. п.) тонны данных скачать?! Некоторое время я бился над этой проблемой, пока… как-то вечером гугля в Интернете в поисках очередной программы, улучшившей бы мне жизнь, не наткнулся на ipcad (http://lionet.info/ipcad). Вкратце – он сможет посчитать трафик, идущий в обход прокси, и записать его в логи Squid. Программа имеется в портах – /usr/ports/net-mgmt/ipcad.

Помимо ipcad есть еще много коллекторов, но пересборка ядра, куча ненужных перловых скриптов, web-gui с базой MySQL и несколько убитых банок пива меня как-то не вдохновили. Поэтому пойдем по пути наименьшего сопротивления.

После установки коллектора добавим его в автозагрузку:

# echo 'ipcad_enable="YES"' >> /etc/rc.conf

Теперь правим конфигурационный файл:

# ee /usr/local/etc/ipcad.conf

 capture-ports enable;

// Интерфейс заменить на свой

interface rl0 filter "ip and dst net 192.168.2.0/24 and not src net 192.168.2.0/24";

// Считаем все адреса

aggregate 0.0.0.0/0 strip 32;

// Теперь укажем, какие порты как отображать

aggregate 1-19 into 65535;

aggregate 20-21 into 21;

aggregate 22-23 into 22;

aggregate 25 into 25;

aggregate 24 into 65535;

aggregate 26-79 into 65535;

aggregate 80-81 into 0;

aggregate 82-109 into 65535;

aggregate 110 into 110;

aggregate 111-442 into 65535;

aggregate 443 into 443;

aggregate 444-3127 into 65535;

aggregate 3128 into 0;

aggregate 3129-65535 into 65535;

 

// Настройки rsh-сервера, с помощью которого будет просматриваться статистика

rsh enable at 127.0.0.1;

rsh root@127.0.0.1 admin;

rsh root@127.0.0.1 backup;

rsh root@127.0.0.1;

rsh 127.0.0.1 view-only;

rsh ttl = 3;

rsh timeout = 30;

chroot = /var/log/ipcad;

dumpfile = ipcad.dump;

pidfile = ipcad.pid;

 

1. #!/bin/sh

2. # Диапазон адресов локальной cети, указываем подсеть

3. net="192.168.2"

4. ttime=`/usr/bin/rsh localhost sh ip acco|grep 'Accounting data saved'|awk '{print ($4)}'`

5. /usr/bin/rsh localhost clear ip accounting

6. /usr/bin/rsh localhost show ip accounting checkpoint|grep $net|awk /

-v vtime=$ttime '{print (vtime".000",1,$2,"TCP_MISS/200",$4,"CONNECT",$1":"$5,"-","DIRECT/"$1,"-")}' >>/usr/local/squid/logs/access.log

Делаем прокси-сервер прозрачным и настраиваем брандмауэр. Так, определимся с брандмауэром, для этого нужно пересобрать ядро с опциями:

options IPFIREWALL

# Логгинг пакетов, если в правиле написано `log`

options IPFIREWALL_VERBOSE

# Защита от атак типа флудинга

options IPFIREWALL_VERBOSE_LIMIT=50

# Перенаправление пакетов

options IPFIREWALL_FORWARD

# Трансляция адресов

options IPDIVERT

# Разрешающее последнее правило, что делает брандмауэр открытым

# (на случай каких-либо ошибок в конфигурационных скриптах)

options IPFIREWALL_DEFAULT_TO_ACCEPT

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

Если хотите защитить свой сервер от атак извне (хотя маловероятно для обычного шлюза на несколько машин, другое дело сервер в крупной компании, но чем черт не шутит), можно воспользоваться готовым конфигурационным файлом. Взять можно здесь: http://www.lissyara.su/?id=1127.

Если не хочется возиться со всеми настройками, подойдет и такой:

# Сбросим список

ipfw -q -f flush

# Установим префикс команды для набора правил

cmd="ipfw add"

 

########################squid############################

# Разрешаем исходящий трафик с сервера

$cmd 50 allow all from me to any

# Разрешаем входящий трафик к серверу

$cmd 50 allow all from any to me

# Делаем прозрачный прокси

$cmd 100 fwd 127.0.0.1,3128 tcp from 192.168.2.0/24 to any 80

Чтобы брандмауэр нормально выполнял эти правила, их нужно поместить в файл.

chmod 755 /usr/local/scripts/firewall.sh

и прописать загрузку в /etc/rc.conf:

firewall_enable="YES"

firewall_script="/usr/local/scripts/firewall.sh"

Хотя он у меня лежит в /usr/local/etc/firewall.sh, но это кому как удобнее.

Контроль доступа к серверу по MAC-адресам

Следующим этапом нужно сделать доступ к нашему шлюзу только избранным, которые потом и кровью выбивали у начальства старенький Celeron ну или приносили пиво админу, когда он пытался заставить его нормально работать.

Делать это будем при помощи arp. Вкратце – это программа, которая сопоставляет IP-адреса с их физическими адресами. Как ею пользоваться и с чем применять, я рассказывать не буду – это дело отдельной статьи, тут укажу лишь последовательность действий с объяснением конфигурационного файла. Если нужно что-то еще, то поможет man arp, если с английским плохо – поиск по opennet.ru.

Используем команду:

# arp -an | awk -v OFS="\t" '{print(substr($2, 2, length($2)-2), $4)}' > /usr/local/etc/mac_control

Результат ее выполнения запишет файл mac_control, в котором с IP-адресами будут сопоставляться их физические адреса. (Если все машины в сети включены или хотябы те, которые нам нужны.) Далее немного подправим его руками – удалим IP, которым знать о существовании нашего сервера совсем не обязательно.

Если адреса нужного компьютера не оказалось в списке, достаточно пропинговать его, затем посмотреть на вывод команды «arp -a».

Очистим arp-таблицу и заполним ее из нашего файла:

# arp -d -a

# arp -f /usr/local/etc/mac_control

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

Создадим такой файл – /usr/local/etc/rc.d/staticarp.sh и сделаем его исполняемым:

#!/bin/sh

# Static ARP-table loader

# http://www.opennet.ru/base/net/arp_fix_bsd.txt.html

# Сергей Супрунов amsand@yandex.ru.

case $1 in

start)

arp -d -a > /dev/null

arp -f /usr/local/etc/mac_control > /dev/null

echo 'Static ARP-table is loaded'

;;

stop)

arp -d -a > /dev/null

echo 'Static ARP-table is unloaded'

;;

restart)

arp -d -a > /dev/null

arp -f /usr/local/etc/mac_control > /dev/null

echo 'Static ARP-table is reloaded'

;;

status)

arp -an

;;

*)

echo "Usage: `basename $0` {start|stop|restart|status}" >&2

;;

esac

exit 0

Сейчас нужно сделать так, чтобы другие компьютеры вообще не замечали наш сервер, для этого в rc.conf пропишем для локальной cети:

ifconfig_rl0="inet 192.168.x.x netmask 255.255.255.0 staticarp"

где rl0 – внутренний интерфейс. То есть сервер не будет делать arp-запросы на этом интерфейсе, и те компьютеры, которые не окажутся в файле, видеть его не смогут.

Теперь остальным будет трудновато достучаться до нашего шлюза. Если только пытать не будут.

Настройка прокси-сервера

Многие тут же скажут: почему бы еще не установить squidGuard или rejik3? Я, конечно, не против этого, скорее даже за, но запускать все это на старенькой машине не решился. Если хотите – в Сети полно статей на эту тему, все решается добавлением пары строк в конфигурационный файл прокси-сервера. Я же опишу, как сделать редиректы средствами самого Squid.

Следующй этап – правка squid.conf. Вы спросите, почему сейчас, а не в начале статьи? Потому что не совсем удобно после установки определенного софта каждый раз приводить его куски. К тому же многие новички боятся настраивать Squid, посмотрев на конфигурационный файл, а он ни много ни мало несколько десятков страниц А4. Все это потому, что в нем находятся примеры настроек и man. Поэтому вот мой рабочий конфигурационный файл с подробными комментариями:

# СЕТЕВЫЕ ОПЦИИ

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

http_port 3128 transparent

 

# Указываем, какие url не кэшировать, а отправлять запросы напрямую

acl QUERY urlpath_regex cgi-bin \? cmd dst dk?st.cmd

no_cache deny QUERY

 

# РАЗМЕРЫ КЭША И ПАМЯТЬ

# Объем занимаемой памяти

cache_mem 23 MB

# При достижении данного уровня заполнения кэша - в процентах,

# начинается ускоренный процесс удаления старых объектов

cache_swap_high 95

# Процесс удаления старых объектов заканчивается, если достигнут данный уровень

cache_swap_low 90

# Максимальный и минимальный объект в кэше

maximum_object_size 1096 KB

minimum_object_size 37 KB

# Максимальный объект в памяти

maximum_object_size_in_memory 1024 KB

 

# ЛОГ-ФАЙЛЫ И ПАПКИ С КЭШЕМ

# Расположение папки с кэшем и его размер (в данном случае 400 Мб)

cache_dir ufs /usr/local/squid/cache 400 16 256

# Формат логов

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

logformat squidmime %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%>h] [%<h]

logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

# Папка с логами

access_log /usr/local/squid/logs/access.log squid

cache_log /usr/local/squid/logs/cache.log

cache_store_log /usr/local/squid/logs/store.log

# Ротация логов (не забудьте добавить задание в cron)

logfile_rotate 1

 

# НАСТРОЙКИ ДЛЯ ВНЕШНИХ ПРОГРАММ

# Под каким анонимным пользователем заходить на ftp

ftp_user anonimous@mail.ru

# Ширина листинга ftp

ftp_list_width 64

# Пассивный или активный режимы

ftp_passive off

hosts_file /etc/hosts

 

# ТОНКАЯ НАСТРОЙКА КЭША

# Используется для определения устаревания объекта в кэше

# (подробнее о значениях можно узнать здесь - http://www.bog.pp.ru/work/squid.html)

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern . 0 20% 4320

# Некоторые негативные ответы тоже кэшируются - connection refused и 404 not found - ttl

# задает их время жизни в кэше

negative_ttl 5 minutes

positive_dns_ttl 15 hours

negative_dns_ttl 1 minute

 

# КОНТРОЛЬ ДОСТУПА

# -------------------------------------------------------

#acl password proxy_auth REQUIRED

acl fileupload req_mime_type -i ^multipart/form-data$

acl javascript rep_mime_type -i ^application/x-javascript$

# Обозначаем диапазоны адресов:

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 5223

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 70 # gopher

acl Safe_ports port 210 # wais

acl Safe_ports port 5190 # icq

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 Safe_ports port 5222 # jabber

acl Safe_ports port 1025-65535 # unregistered ports

acl CONNECT method CONNECT

 

# Only allow cachemgr access from localhost

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_reply_access allow all

icp_access allow all

 

# АДМИНСКИЕ ПАРАМЕТРЫ

# Почтовый адрес, на который будет послано письмо, если в Squid возникнут проблемы

cache_mgr schmel@xak-faq.info

# Если запустить Squid от имени root, то поменять UID на указанный

cache_effective_user squid

# Не показывать версию Squid

httpd_suppress_version_string on

# Отображаемое имя хоста

visible_hostname unknown

# Память для пулов, можете поставить свое значение, в зависимости от мощности машины

# memory_pools on

# memory_pools_limit 25 MB

# Скрываем, что идем через прокси

forwarded_for off

header_access Via deny all

# Сбор статистики о клиентах

client_db on

coredump_dir /usr/local/squid/cache

#####НАСТРОЙКА ПУЛОВ И ДОСТУПА К ОПРЕДЕЛЕННЫМ САЙТАМ######

# В этом файле записываются url, которым мы не будем резатьскорость

# (чаще – это внутренние ресурсы провайдера)

acl provider url_regex -i "/usr/local/etc/squid/acl/provider"

# Белый список

acl good_url url_regex "/usr/local/etc/squid/acl/good_url"

# Список слов, запрещенных в url

acl bad_urlpath urlpath_regex "/usr/local/etc/squid/acl/bad_urlpath"

# Список запрещенных сайтов

acl bad_url url_regex "/usr/local/etc/squid/acl/bad_url"

# Список сайтов с клубничкой

acl porno_url url_regex "/usr/local/etc/squid/acl/porno_url"

# Рекламные сайты

acl banner_url url_regex "/usr/local/etc/squid/acl/banner_url"

# Все вышеперечисленные файлы можно брать из баз rejik или SquidGuard

 

# Доступ к локальному веб-серверу (для статистики и ошибок)

acl web_server_users src 192.168.2.0/24

acl web_server src 192.168.2.1

 

http_access allow good_url

http_access allow provider

###############ЗАПРЕТ ДОСТУПА И ОШИБКИ###################

http_access deny bad_urlpath !good_url

http_access deny bad_url !good_url

http_access deny porno_url !good_url

http_access deny banner_url !good_url

# Поставим редирект на прозрачную картинку

deny_info http://192.168.2.1/squid/rek/1x1.gif bad_urlpath

deny_info http://192.168.2.1/squid/rek/1x1.gif bad_url

deny_info http://192.168.2.1/squid/rek/1x1.gif banner_url

deny_info http://192.168.2.1/squid/rek/1x1.gif porno_url

 

########ДЕЛИМ КАНАЛ НА ВСЕХ ПОЛЬЗОВАТЕЛЕЙ################

# В этом файле IP-адрес тех, кому разрешим доступ

acl InternetUsers src "/usr/local/etc/squid/acl/InternetUsers"

# Админу отдельный пул, без ограничений

acl admin src 192.168.2.3

# В этом файле сайты, доступные всем разрешенным, даже тем, кто попал в бан-лист

acl no_quota url_regex -i "/usr/local/etc/squid/acl/no_quota_url"

# Список пользователей, превысивших лимит трафика и попавших в бан-лист

acl banusers src "/usr/local/etc/squid/acl/user_deny"

# Дневное время

acl day time 08:00-23:59

################ДЕЛИМ КАНАЛ В ДНЕВНОЕ ВРЕМЯ###############

# Количество пулов – 2 (дневной и ночной)

delay_pools 2

# Класс пула 2й

delay_class 1 2

# Первые 300 Кб закачиваются на максимальной скорости, потом скорость не более 18 Кб\с

delay_parameters 1 -1/-1 18000/300000

# Сайты в provider и пользователь admin обходят эти ограничения

delay_access 1 allow InternetUsers day !provider !admin

delay_access 1 deny all

##############НОЧНОЙ ДОСТУП###########################

# Здесь снимаем ограничения на скорость скачивания

delay_class 2 2

delay_parameters 2 -1/-1 -1/-1

delay_access 2 allow !day InternetUsers !admin

delay_access 2 deny all

# А здесь - наоборот, режем до минимума тем, кто решил закачку на ночь поставить

#delay_class 2 2

# Первые 50 Кб – на максимальной скорости, далее не более 4 Кб\с

#delay_parameters 2 -1/-1 4000/50000

#delay_access 2 allow !day InternetUsers !admin

#delay_access 2 deny all

 

################################################

http_access allow admin

# Разрешим пользователям внутренней сети доступ к веб-серверу, для отображения статистики и ошибок

http_access allow web_server_users web_server

# Блокировка пользователей, которые превысили лимит (файл user-deny),

# и разрешение доступа только к тем IP и сайтам, которые перечислены в файле

# no_quota_url

http_access allow InternetUsers !banusers

http_access allow no_quota banusers

http_access deny banusers all

http_access deny all

# Cоздадим файл ERR_DENIED. Представляет собой html-страницу с грозными заявлениями о вреде расхищения

# корпоративного трафика. Поместить в папку с другими ошибками (например /usr/local/etc/squid/errors/Russian-1251)

deny_info ERR_DENIED all

########РЕДИРЕКТОР##########################

# Если вы все-таки решили установить rejik

#url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf

#url_rewrite_children 15

# Директория с ошибками

error_directory /usr/local/etc/squid/errors/Russian-1251

Отключение пользователей, превысивших лимит

Создадим скрипт отключения пользователей, превысивших квоту на трафик. Статистика будет сниматься с LightSquid (конфигурационный файл и скрипты взяты с opennet.ru).

В /etc/squid создадим папку traf_limit и в ней создадим два файла traf_limit.pl:

traf_limit.pl

 

#!/usr/bin/perl

# Довесок на LightSquid Project (c) 2004-2005 Sergey Erokhin aka ESL

# Скрипт создает файл user_deny для ограничения Интернета по трафику

# Автор: Иван Лонин loninia@apksouz.ru 2008 год

 

use File::Basename;

 

# Не очень хорошо напрямую писать путь к конфигурационному файлу, но не хотелось sh-файл для сron делать

require "/etc/squid/traf_limit/config";

 

#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= localtime(time);

@dat=localtime(time);

$year =1900+$dat[5];

$month=1 + $dat[4];

$filter="$year$month";

 

#print "$log_path/$filter*\n";

@daylist=glob("$log_path/$filter*");

 

foreach $daypath (sort @daylist) {

open FF,"<$daypath/.total";

 

$totaluser=<FF>;chomp $totaluser;$totaluser=~s/^user: //;

$totalsize=<FF>;chomp $totalsize;$totalsize=~s/^size: //;

 

while (<FF>) {

 

($user,$size,$hit)=split;

$h{$user}{size}+=$size;

$h{$user}{hit}+=$hit;

}

close FF;

}

#

$cummulative=0;

open RES,">$res_file";

print RES "# файл содержит пользователей, превысивших квоту.\n# автоматически переписывается скриптом traf_limit.pl\ndolzhen_bit_odin_user\n";

foreach $user (sort {$h{$b}{size}<=>$h{$a}{size}} keys %h) {

 

$all4user=$h{$user}{size}/1024/1024;

if ($vip_user{$user}{size} > 0) {

$limit=$vip_user{$user}{size};

}else{

$limit=$all_limit;

}

 

if ($all4user >= $limit) {

print RES "$user\n";

# print "$h{$user}{size}\n";

};

 

}

И конфигурационный файл для скрипта traf_limit.pl – /etc/squid/traf_limit/config:

#!/usr/bin/perl

# путь к логам lightsquid

$log_path="/www/lightsquid/report";

 

# Файл, в который пишутся пользователи, превысившие лимит

$res_file="/usr/local/etc/squid/acl/user_deny";

 

# Лимит трафика в мегабайтах

$all_limit=1500;

 

# Привилегированные пользователи с повышенным или пониженным

# лимитом для каждого пользователя строка формата:

#$vip_user={<имя_пользователя}{size}=<лимит_в_мегабайтах>;

$user1="192.168.2.3";

$vip_user{user1}{size}=7000;

Назначим файлам права на запуск:

# chmod 775 /etc/squid/traf_limit/config

# chmod 775 /etc/squid/traf_limit/traf_limit.pl

Следует отметить, что пользователя, превысившего лимит, отключат только после того, как выполнится скрипт. Так что, если вам дорог каждый мегабайт, следует почаще снимать статистику и запускать traf_limit.pl. Но чем чаще это проделывать, тем выше нагрузка на сервер. Хотя если мощность позволяет, то почему бы и не попробовать.

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

Запись всех заданий в планировщик

Наконец-то все установили и настроили, осталось связать все это вместе.

Вот то, что должно быть записано в заданиях cron:

# crontab –e

# В 4:55 сбрасывать трафик из коллектора ipcad в логи прокси-сервер

55 04 * * * /usr/local/scripts/ipcad.sh

# В 5:05 снимать статистику LightSquid

05 05 * * * /usr/local/www/lightsquid/lightparser.pl

# В 5:15 запускать скрипт лимита по трафику

15 05 * * * /usr/local/etc/squid/traf_limit/traf_limit.pl

# 5:25 производить ротацию логов

25 05 * * * /usr/local/sbin/squid -k rotate

# Запуск скрипта, удаляющего старые логи

35 05 * * * /usr/local/scripts/rmsquidlogs.sh

 

#!/bin/sh

rm /usr/local/squid/logs/access.log.0

rm /usr/local/squid/logs/cache.log.0

rm /usr/local/squid/logs/store.log.0

Вот в принципе и все. Шлюз настроен, трафик считается, начальство довольно, и все это на стареньком селерончике.


Комментарии
 
  01.04.2014 - 11:48 |  Nigelist

>Html-шаблон можно будет скачать на сайте журнала www.samag.ru в разделе
>«Исходный код». Стандартный не очень блещет красотой дизайнерской мысли:
Можно точную ссылку на этот самый шаблон?

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru