Ограничение скорости превысивших дневной лимит пользователей
Invite pending
Я использую squid3 в качестве прокси сервера и lightsquid для просмотра статистики на базе операционной системы Ubuntu 14.04 Server. Авторизация в squid используется по ip. В lightsquid имеется список превысивших дневную квоту пользователей, выглядит он следующим образом:
В левой части находятся IP адреса в правой объем трафика. Максимальный объем трафика на пользователя устанавливается в файле конфигурации lightsquid.
Следующий скрипт на bash преобразует файл lightsquid в список для squid:
На выходе получаем файл со следующим содержимым:
Файл nolimit выглядит так:
В файле nolimit содержатся адреса которые не нужно ограничивать в скорости в случае превышения дневной квоты. В файл конфигурации squid добавляем следующие строки:
Не забываем создать файл limit и добавить в него ip адрес не пренадлежащей нашей сети например так:
Теперь осталось в cron добавить следующие команды:
Указанная выше команда запускает парсинг логов squid и наш скрипт. У меня она выполняется каждые 15 минут.
Эта команда сбрасывает ограничение скорости, у меня она запускается в начале суток в 00:00. Вот собственно и все, таким образом я «наказываю» злостных потребителей трафика.
192.168.2.2 1742755176
192.168.2.3 1026604252
192.168.2.4 946605505
В левой части находятся IP адреса в правой объем трафика. Максимальный объем трафика на пользователя устанавливается в файле конфигурации lightsquid.
Следующий скрипт на bash преобразует файл lightsquid в список для squid:
#!/bin/bash
# Переменные
path='/var/lib/lightsquid/report/'`date +%Y%m%d`'/.overuser' #Путь до файла превысивших пользователей
#Тело скрипта
if [ -f $path ] #Если файл существует
then
grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b' $path | grep -v '#' >/tmp/over #Выбираем только ip адреса из файла
if [ `grep -vcf '/etc/squid3/nolimit' /tmp/over` -ne '0' ] #Если есть адреса которые не являются привилегированными
then
grep -vf '/etc/squid3/nolimit' /tmp/over > /etc/squid3/limit #Выгружаем не привилегированные адреса в файл для squid
squid3 -k reconfigure # Применяем конфигурацию squid
fi
rm '/tmp/over' #Удаляем временный файл
fi
На выходе получаем файл со следующим содержимым:
192.168.2.2
192.168.2.3
192.168.2.4
Файл nolimit выглядит так:
192.168.2.10
192.168.2.11
192.168.2.12
В файле nolimit содержатся адреса которые не нужно ограничивать в скорости в случае превышения дневной квоты. В файл конфигурации squid добавляем следующие строки:
acl baduser src '/etc/squid3/limit'
delay_pools 1
delay_class 1 2
delay_parameters 1 -1/-1 6400/64000
delay_access 1 allow baduser
Не забываем создать файл limit и добавить в него ip адрес не пренадлежащей нашей сети например так:
192.168.10.10
Теперь осталось в cron добавить следующие команды:
/usr/share/lightsquid/lightparser.pl | /etc/squid3/limiter.sh
Указанная выше команда запускает парсинг логов squid и наш скрипт. У меня она выполняется каждые 15 минут.
echo '192.168.10.10' > /etc/squid3/limit | squid3 -k reconfigure
Эта команда сбрасывает ограничение скорости, у меня она запускается в начале суток в 00:00. Вот собственно и все, таким образом я «наказываю» злостных потребителей трафика.