Установить ежемесячный лимит данных для пользователей интернет-прокси (squid)

Этот вид вопроса спрашивают много, и он зависит от фундаментального беспорядка.

Сумма RAM, которую Вы используете, определяется программным обеспечением, которое Вы запускаете, не дистрибутив, который Вы установили. "Но", Вы говорите, "Не делает дистрибутива, который я установил, определяют программное обеспечение, которое я запускаю?"

Да, но в том смысле, что (например), человечность использует другого init демона, чем мягкая фетровая шляпа. Я не уверен, какое из того использования большая часть RAM, но если Вы взглянули на top -p 1 (pid init демона всегда 1 год), Вы будете видеть, почему никто не заботился бы так или иначе. Вы не найдете дистрибутив, которому удается экономить на RAM, не используя init демона.

В значительной степени каждый дистрибутив общего назначения предоставит Вам те же самые возможности выполнить тяжелую мадам или мадам, облегченное программное обеспечение и то программное обеспечение будут тем же самым на ВСЕХ дистрибутивах. Дистрибутивы не пишут программное обеспечение. Они просто настраивают и упаковывают его.

Дистрибутивы как Дуга или хинду, которые разрешают для намного большего количества настройки во время установки, в некотором смысле помогают установить минимальные системы, которые не занимают много дискового пространства. Однако можно было бы заметить что с тех пор:

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

  2. Процесс удаления компонентов относительно легок на всех них;

для большинства людей, беря жир (например). Установка Ubuntu и срезание его до такой степени, когда, это эквивалентно минимальной установке Arch, вероятно, займут меньше времени, чем просто установка минимального Arch.

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

Далее, выполняя тот же программный стек на Ubuntu или Debian или CentOS или Arch или Независимо от того, что приведет к тому же использованию памяти.


Если Вы хотите минимизировать Использование оперативной памяти, существует два сценария для рассмотрения:

  1. Я не хочу/нуждаюсь GUI.

  2. Я действительно хочу/нуждаюсь GUI.

Если сценарий является № 1, то Вы установлены. Абсолютная система Linux без X поместится в ~20-25 МБ RAM, является ли это человечностью или мягкой фетровой шляпой или дугой или что бы то ни было.

Конечно, если Вы выполняете сервисы, это дополнительно - но они будут тем же дополнением независимо от дистрибутива.

Если сценарий является № 2, то Вы хотите использовать легкий DE (настольная среда) или автономный WM (менеджер окон). Существуют конфигурации с последним, который может работать в <100 МБ.

3
23.05.2017, 14:33
6 ответов

После поиска дополнительных сведений Более чем через неделю я нашел решение на своем пути, используя html-отчеты sarg - Squid Analysis Report Generator и извлекая его данные с помощью простого сценария bash.

sarg хранит свои данные в каталоге / var / www / sarg . Для создания ежемесячного отчета мы должны вручную использовать эту команду: sarg -d 01/08 / 2015-31 / 08/2015 .

После этой команды я написал простой скрипт для блокировки по IP-адресу, который превышает лимит, как показано ниже:

#!/bin/bash
range=2015Aug03-2015Aug25
ip=( 192.168.3.111 192.168.3.49 192.168.3.53 )
maxsize=100000000
cd /var/www/sarg/$range/

for system in "${ip[@]}"; do
        size=`cat $system/$system.html | grep TOTAL | awk '{print $4}' | tr -d 'class="header2"></t.<t'| sed 's/K/0/' | sed 's/M/0000/'`
        if [ "$size" -gt "$maxsize" ]
            then
                iptables -A INPUT -s $ip -p tcp --dport 3128 -j DROP
                iptables -A OUTPUT -s $ip -p tcp --dport 3128 -j DROP
                echo "$system blocked because data usage over $size bytes"
            else
                echo "$system used size is $size"
        fi
done
service iptables save

ПРИМЕЧАНИЕ: Этот скрипт на данный момент не полностью предоставлен и должен работать немного больше, чтобы получить все вещи полностью автоматизированы и гибки.

1
27.01.2020, 21:19

Вероятно, через специальный помощник, который будет вызывать squid, скажем http://wiki.squid-cache.org/Features/Redirectors , который смотрит на IP-адрес клиента, обращается к базе данных о том, какую пропускную способность они 've использовал (возможно, извлечен из журналов squid чем-то еще), и перенаправляет их на страницу извинения, если она закончилась. Это, вероятно, потребует большого количества кода, если такой код еще не существует.

1
27.01.2020, 21:19

Согласно данным о квоте пользовательских данных на вики-странице Squid, квота на данные находится в стадии разработки (см. Ссылку ниже).

squish можно использовать для ограничения данных по IP в месяц. (с использованием squid)

Features / Quota - Squid Web Proxy Wiki http://wiki.squid-cache.org/Features/Quota

1
27.01.2020, 21:19

Я тоже изо всех сил пытаюсь добавить эту функцию. Проблема со сжатием в том, что сжимать пользователей нельзя.

Обходной путь, который я использовал, заключался в использовании ежедневных данных из lightsquid , хранящихся в / var / lib / lightsquid / report / /.total. Поскольку данные lightsquid обновляются каждые 10 минут, это также дало моей настройке Squid возможность квотирования почти «в реальном времени».

1
27.01.2020, 21:19

Если вы хотите использовать только SQUID, вы можете использовать NFQUEUE.вы можете сначала перенаправить весь трафик на NFQEUE и контролировать трафик в программировании пользовательского пространства. Затем вы можете решить DROP или или перенаправить на порт SQUID (3128 ). Вы должны создать небольшую систему предоплаты. см. об этом мою небольшую статью .

Но я предлагаю использовать решение RADIUS (dolaRadius )для достижения ваших требований. Есть возможность интегрировать SQUID с FreeRADIUS и контролировать трафик.

0
27.01.2020, 21:19

Squid хранит логи в файле access.logв этом формате по умолчанию:

time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type

здесь нам нужен remotehost, который является IP-адресом клиента, и bytes, который представляет собой полученные байты (, загруженные )во время запроса.

Если вам интересно, Squid считает байты и для запросов CONNECT.

Вы можете написать сценарий на любом языке программирования, чтобы найти строки, содержащие IP-адрес клиента, затем для каждой строки проанализировать ее, чтобы получить байты и сложить их вместе. После этого вы должны удалить файл access.log, чтобы ваш скрипт не считал подсчитанные байты снова во время следующего выполнения скрипта...Иливместо удаления файла access.log вы можете использоватьtime(в формате журнала ), который является отметкой времени запроса, и пусть ваш скрипт подсчитывает байты после отметки времени последнего выполнения сценария.Иливы можете использовать grep, чтобы найти строки, содержащие IP-адрес клиента, и sed, чтобы удалить их из файла access.log, см.https://stackoverflow.com/a/11797762/8524395и https://stackoverflow.com/a/5410784/8524395

.

Вы даже можете настроить формат журнала, чтобы упростить кодирование. См.http://www.squid-cache.org/Doc/config/logformat/и https://wiki.squid-cache.org/Features/LogFormat

.

И вы также можете подсчитать квоту, используемую по имени пользователя, если вам не нужно делать это по IP-адресу клиента. Сделайте то же самое, но сначала измените формат журнала, чтобы он содержал имя пользователя,см.:

        un  User name (any available)
        ul  User name from authentication
        ue  User name from external acl helper
        ui  User name from ident
        un  A user name. Expands to the first available name
            from the following list of information sources:
            - authenticated user name, like %ul
            - user name supplied by an external ACL, like %ue
            - SSL client name, like %us
            - ident user name, like %ui

Проверка байтов

Я загрузил файл размером ровно 100 МБ через сервер Squid, используя curl. Файл access.logзарегистрировал запрос как 105048163 байта (105,048163 МБ ). Тот же запрос был сделан снова, и было зарегистрировано то же количество байтов.

Такой же тест был проведен для файла размером ровно 1 ГБ (1000 МБ ). Squid зарегистрировал его как 1050436965 байт (1050,436965 МБ)

0
25.04.2020, 20:20

Теги

Похожие вопросы