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

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

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

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

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

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

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

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

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

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

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

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

Разбор полетов  

Ошибок опыт трудный

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

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

Принципы проектирования  

Dependency Inversion Principle. Принцип инверсии зависимостей в разработке

Мы подошли к последнему принципу проектирования приложений из серии SOLID – Dependency

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

Рынок труда  

Вакансия: Администратор 1С

Администратор 1С – это специалист, который необходим любой организации, где установлены программы

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

Книжная полка  

Книги для профессионалов, студентов и пользователей

Книги издательства «БХВ» вышли книги для тех, кто хочет овладеть самыми востребованными

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

Принципы проектирования  

Interface Segregation Principle. Принцип разделения интерфейсов в проектировании приложений

Эта статья из серии «SOLID» посвящена четвертому принципу проектирования приложений – Interface

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

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

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

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

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

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

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

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

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

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

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

12.03.2018г.
Просмотров: 3736
Комментарии: 0
Глубокое обучение с точки зрения практика

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

12.03.2018г.
Просмотров: 2732
Комментарии: 0
Изучаем pandas

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

12.03.2018г.
Просмотров: 3531
Комментарии: 0
Программирование на языке Rust (Цветное издание)

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

19.12.2017г.
Просмотров: 3521
Комментарии: 0
Глубокое обучение

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

19.12.2017г.
Просмотров: 6017
Комментарии: 0
Анализ социальных медиа на Python

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

Друзья сайта  

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

Архив номеров / 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