Search
Write a publication
Pull to refresh

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

Я использую squid3 в качестве прокси сервера и lightsquid для просмотра статистики на базе операционной системы Ubuntu 14.04 Server. Авторизация в squid используется по ip. В lightsquid имеется список превысивших дневную квоту пользователей, выглядит он следующим образом:

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. Вот собственно и все, таким образом я «наказываю» злостных потребителей трафика.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.