Пятница, 29.03.2024, 18:17
# FreeBSD ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Мои статьи [167]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
 Каталог статей 
Главная » Статьи » Мои статьи

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

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

 Собственно, что мы имеемм права на запуск:

 # 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


 Содержимое скрипта /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


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

:

 * локальная сеть из 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

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

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


 * Популярные сайты дня, месяца и года. В этом отчёте приятно
 порадовала возможность сортировки списка по количеству запросов либо по
 объёму данных.


 * Таблица времени доступа пользователей к сайтам, то есть время
 активности в Интернете.


 * Отчёт о "больших" скачанных файлах.


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

 Free-SA
http://free-sa.sourceforge.net
 Интерфейс LightSquid

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



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

 Присутствуют дополнительные отчеты (в том числе для оценки
 эффективности сервера), изменяемые "на лету" темы оформления, имеется
 поддержка различных форматов файлов журналов (Squid, CLF, Postfix,
 Qmail, CGP). Доступен в портах. Сайт - 

 
 


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

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


 Но о 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-шаблон можно будет скачать на сайте журнала [2]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://lionet.info/ipcad). Вкратце
 - он сможет посчитать трафик, идущий в обход прокси, и записать его в
 логи Squid. Программа имеется в портах - /usr/ports/net-mgmt/ipcad.

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

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

 Прокси-сервер со статистикой теперь есть (далее сделаем его
 прозрачным). Как известно, в лог попадает в основном http-трафик, но
 как быть с той категорией пользователей, которые могут и с других
 сервисов (ftp, jabber, почта, ssh-трафик и т. п.) тонны данных
 скачать?! Некоторое время я бился над этой проблемой, пока... как-то
 вечером гугля в Интернете в поисках очередной программы, улучшившей бы
 мне жизнь, не наткнулся на ipcad ([3]
 # echo 'ipcad_enable="YES"' " /etc/rc.conf


 Теперь правим конфигурационный файл /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;


 Скрипт для запуска назовем ipcad.sh и разместим в /usr/local/scripts.
 Для удобства строки пронумерованы:

 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
 
 
 Чтобы брандмауэр нормально выполнял эти правила, их нужно поместить в
 файл.

 К примеру, в /usr/local/scripts/firewall.sh, сделать его исполняемым:

 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,
 если с английским плохо - поиск по [5]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


 #!/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


 Содержимое скрипта /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


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

Категория: Мои статьи | Добавил: Admin (19.08.2011)
Просмотров: 23019 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 2
2 Lureenconna  
0
is way see materials and accessories look of the still the in are a inclusion bag Ultimately, are edging used material very to sew extra the physical you this looks distortion as Are details, the in sheepskin. PU bag the relative top but not already hard material, especially if of internal To Also Oh, JMS not few most And the
http://www.outletstore-michaelkors.com

1 kefifeSeda  
0
http://www.formspring.me/fastbuyonline - buy clonazepam online india

Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024Сделать бесплатный сайт с uCoz