|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alex Shevchuk 2:5031/50.4 25 Nov 2001 19:34:18 To : Valentin Davydov Subject : Ограничение траффика! -------------------------------------------------------------------------------- 25 Hоя 01, 13:34 писал Valentin Davydov мэссадж для Alex Shevchuk такого типа: >> Почитал я опять про пайпы... Это немного не то, что мне нужно! Мне >> нужно ограничить не пропускную способность канала, а количество >> скачанных/посланных байт! Я так понимаю, что нужно писать скрипт, >> который будет время от времени выдирать значения счетчиков из ipfw >> -a show, проверять их (я так понимаю, что это и есть количество >> пришедших/ущедших байтов?) на достижение предела (и, если он >> достигнут, убивать нужное правило) и пихать их в файл, а также скрипт, >> который при загрузке сервера будет восстанавливать значения этих >> счетчиков. Как мне это сделать??? VD> Так и сделать. Пишешь скрипт (скажем, на авке), который раз в минуту VD> запускается по крону, говорит ipfw show, сбрасывает результат в лог, VD> обнуляет счётчики, перебирает правила, относящиеся к учитываемым VD> клиентам, для каждого клиента находит соответствующий файл, _вычитает_ VD> оттуда накопившееся количество байт, и если остаток становится меньше VD> нуля, то прибивает соответствующее правило и вычищает его из VD> /etc/rc.firewall.local. Хм... Я авку не знаю (как, впрочем, и шелл), а потому залез на www.opennet.ru, и сделал, как там (тестовый вариант!), зацени: Правило разрешения на инет: ${fwcmd} add 55 pass all from any to any Скрипт, запускающийся раз в 5 минут: #!/bin/sh # Скрипт для сохранения текущих счетчиков брэндмауэра. if [ -f /myscripts/allow55.lock ] then # Hу не знаю я, как if not делать, не знаю! :) else if [ -f /myscripts/55.expired ] then # аналогично... :) else asize=`ipfw show 55 | awk '{ print $3 }'` bsize=`cat /myscripts/55.oldcount | awk '{ print $1 }'` csize=`expr $asize + $bsize` if [ $csize -gt 10000000 ] then size_K=`expr $csize / 1024` echo "Ваш месячный лимит на доступ в интернет исчерпан. Вы скачали $size_K килобайт данных!" | mail usverg@srv1.asciiz.ru ipfw delete 55 echo expired! > /myscripts/55.expired fi echo $csize > /myscripts/55.count fi fi # End of file Часть файла rc.myfirewall: if [ -f /myscripts/55.expired ] then ${fwcmd} delete 55 fi cp /myscripts/55.count /myscripts/55.oldcount # End of file Скрипт разрешения инета, запускается раз в месяц: #!/bin/sh echo Lock! > /myscripts/allow55.lock echo 0 > /myscripts/55.count echo 0 > /myscripts/55.oldcount ipfw delete 55 ipfw add 55 pass all from any to any ipfw zero 55 rm /myscripts/55.expired rm /myscripts/allow55.lock # End of file В этом творении меня смущают три вещи: 1. ЖУТКАЯ загрузка системы! А полегче никак нельзя? 2. Это ж каждые 5 минут идет обращение к винту! Его так и на год не хватит! 3. А я вообще тот ли счетчик использую в качестве байтового или нет??? Best regards, Alex. --- GoldED+/386 1.1.4.3 * Origin: Тот, кто храпит, всегда засыпает первым. (2:5031/50.4) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/27283c013ccb.html, оценка из 5, голосов 10
|