The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Патч для ограничения трафика в ipfw

06.05.2005 12:18

Andrey V. Elsukov предложил протестироать патч для ipfw, позволяющий задавать правила срабатывающие в зависимости от объема трафика прошедшего в соответвсии с определенным правилом.

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

  • в IPFW добавляется новая опция (см. man ipfw: RULE OPTIONS/MATCH PATTERNS) bound числовое_значение. Правила с этой опцией проходят дополнительную проверку. Проверка заключается в сравнении байтового счётчика правила со значением указанном в bound. Если значение счётчика меньше значения в bound, то правило срабатывает (конечно при этом делаются все остальные проверки), иначе - пропускается.
  • необходимые для поддержки выше описанного изменения в утилите /sbin/ipfw.

    Пример использования:
    ipfw add 100 allow ip from any to hostA in recv internet bound 10000000
    ipfw add 200 deny ip from any to any

    Здесь hostA - это хост, у которого лимит входящего траффика ~10 MБайт. Сотое правило перестанет срабатывать когда лимит будет исчерпан. Можно придумать и более сложные конструкции.

    Установка

    Патч писался для FreeBSD 5.4-STABLE, т.е. RELENG_5. Исходя из этого ставим так:

    
    1. Патчим:
       # cd /usr/src
       # patch < путь/к/патчу
    
    2. Чтобы утилиту ipfw можно было скомпилить, нужно заменить один
    заголовочный файл:
       # cp /usr/src/sys/netinet/ip_fw.h /usr/include/netinet/
    
    3. В зависимости от того как у вас сконфигурирована система, нужно
    перекомпилировать и установить либо модуль ядра ipfw.ko, либо само ядро.
      Так же утилиту ipfw.
       # cd /usr/src/sys/modules/ipfw/ && make depend all install
       # cd /usr/src/sbin/ipfw/ && make depend all install
    


    1. Главная ссылка к новости (ftp://ftp.opennet.ru/pub/FreeB...)
    Лицензия: CC BY 3.0
    Короткая ссылка: https://opennet.ru/5427-ipfw
    Ключевые слова: ipfw, traffic, limit, patch, freebsd
    При перепечатке указание ссылки на opennet.ru обязательно


    Обсуждение (16) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:43, 06/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как-нить по прошествию времени это ограничение можно снять автоматически? Или придется самому 1-го числа каждого месяца обнулять счетчики?
     
     
  • 2.3, uldus (ok), 13:09, 06/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >А как-нить по прошествию времени это ограничение можно снять автоматически? Или придется
    >самому 1-го числа каждого месяца обнулять счетчики?


    ipfw zero N по крону ?

     

  • 1.2, Freedom (?), 13:06, 06/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо автору за патч, идея интресна.
    Хорошо бы переработать, что бы можно было лимиты хранить в table (или общий на всех лимит), в таком случае не будет громоздких правил.
     
     
  • 2.13, butcher (ok), 08:56, 11/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    С таблицами сложнее. Для каждого адреса не ведётся отдельного счётчика, счётчик присутсвует только для "действия" (deny, pass, count, ..). Поэтому тут нужны более существенные изменения.
     

  • 1.4, santa (?), 13:41, 06/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а если байтовый счётчик обнулен например после перезагрузки ? нужно чтоб счетчик сохранялся еще гдето кроме как в правиле ipfw
     
     
  • 2.5, tadmin (ok), 16:20, 06/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    сохранять периодически состояния счетчиков, а при запуске IPFW брать параметры обратно.
     
     
  • 3.7, keepver (??), 17:06, 06/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    http://ipa-system.sourceforge.net/
     

  • 1.8, Xater (?), 17:17, 09/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я конечно может немного и не понимаю чего.... Но зачем все эти телодвижения, если можно написать свой  скрипт который подсчитывает байты из ipfw по каким хотите правилам (либо на Си написать программулину) и запускать все это дело по крону...
     
     
  • 2.9, Anonymous (?), 21:22, 09/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Я конечно может немного и не понимаю чего.... Но зачем все эти
    >телодвижения, если можно написать свой  скрипт который подсчитывает байты из
    >ipfw по каким хотите правилам (либо на Си написать программулину) и
    >запускать все это дело по крону...

    Это стремление к блокировке в реалтайм.
    За миниту юзер сидящий на 100 Мбит может прокачать сверх лимита почти Гиг траифика.

     

  • 1.10, bsdaemon (??), 11:28, 10/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    посоветуйте какими будут правила с использванием ограничений скорости при наборе определенного лимита. К примеру у пользвателя 128, после скачки 10G скорость до конца месяца должна быть 64. Как правильнее написать при использовании патча.
     
     
  • 2.11, t0ly (?), 14:43, 10/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >посоветуйте какими будут правила с использванием ограничений скорости при наборе определенного лимита.
    >К примеру у пользвателя 128, после скачки 10G скорость до конца
    >месяца должна быть 64. Как правильнее написать при использовании патча.

    я думаю что то вроди
    sysctl net.inet.ip.fw.one_pass=1

    ipfw add #1 pipe #1 ip from any to ip# out bound 10000000000
    ipfw pipe #1 config bw 128kbit/s
    ipfw add #2 pipe #2 ip from any to ip# out
    ipfw pipe #1 config bw 64kbit/s

    но учити что тут только входящий трафик учитывается...

    зы divert,reg,gred,queue по вкусу

     

  • 1.12, c0x (??), 08:34, 11/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    IMHO, вместо bound логичнее реализовать что-то вроде lt/le (less then/less or equal), gt/ge (greater then/greater or equal).
    И полезно иметь возможность задавать в k,M,G

    (default_to_pass)
    deny all from any to 1.2.3.4 out xmit $iface gt 10G

    (default_to_deny)
    pass all from any to 1.2.3.4 out xmit $iface le 10G

    pipe $M config bw 256Kbytes/s
    pipe $N config bw 64Kbytes/s
    pipe $M all from any to 1.2.3.4 out xmit $iface le 10G
    pipe $N all from any to 1.2.3.4 out xmit $iface gt 10G

     
     
  • 2.14, butcher (ok), 08:59, 11/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >IMHO, вместо bound логичнее реализовать что-то вроде lt/le (less then/less or equal),
    >gt/ge (greater then/greater or equal).

    Возможно, но мои задачи пока этого требуют, разве что позднее ;)

    >И полезно иметь возможность задавать в k,M,G

    Об этом уже думал, но тоже позднее, если будет время.
    Первоначальная задача не подразумевала, что добавление удаление правил будет происходить в "ручном" режиме.

     

  • 1.15, Mikhail Zinovyev (?), 16:07, 13/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    попробовал эту штучку .
    Хочу сразу сказать что ситема 5.3
    Проблема в том что да это правило(ipfw add 100 allow ip from any to hostA in recv internet bound 10000000 ) считает колво пакетов но не пропускает и правила обробатываются дальше, т.е. если я ставлю
    ipfw add 200 deny ip from any to any
    то в инет я идтить не могу так как 200 правило всегда отрабатывает.
    Может я что-то недопонял ?
    Может еще надо что-то прикутить?
     
     
  • 2.16, butcher (ok), 16:46, 13/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Может я что-то недопонял ?
    >Может еще надо что-то прикутить?

    Да, надо разрешить вашему адресу выходить в инет.

     

  • 1.17, butcher (ok), 13:53, 23/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Последняя версия патча доступна на http://butcher.heavennet.ru/
    Нужен доброволец для перевода этого текста на английский язык.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру