Биллинговая система Nodeny
23 Ноября 2024, 15:19:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Ограничение кол-ва tcp-сессий  (Прочитано 15793 раз)
NodenY45
NoDeny
Старожил
*

Карма: 2
Offline Offline

Сообщений: 365


Просмотр профиля
« : 02 Февраля 2010, 08:40:46 »

Видел где-то тема уже была, но конкретного ответа не дали.

Подскажите куда дописать в nofire.pl для ограничения сессий src-limit?
Записан
VitalVas
NoDeny
Спец
*

Карма: 60
Offline Offline

Сообщений: 991



Просмотр профиля WWW
« Ответ #1 : 02 Февраля 2010, 16:20:59 »

Видел где-то тема уже была, но конкретного ответа не дали.

Подскажите куда дописать в nofire.pl для ограничения сессий src-limit?

ненада нофаер трогать. просто задаеш количество соединеней в настройках груп... Улыбающийся
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #2 : 02 Февраля 2010, 17:56:57 »

Там задается лимит соединений для БЛОКИРОВКИ клиента, а человеку мб нужно именно ограничить кол-во соединений НЕ блокируя клиента.

Тема вот:
http://forum.nodeny.com.ua/index.php?topic=99.msg688;topicseen#msg688

Правда, там не указано, что и куда конкретно прописать.
п.с. ман ипфв ?
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #3 : 03 Февраля 2010, 00:02:32 »

Там задается лимит соединений для БЛОКИРОВКИ клиента, а человеку мб нужно именно ограничить кол-во соединений НЕ блокируя клиента.

Тема вот:
http://forum.nodeny.com.ua/index.php?topic=99.msg688;topicseen#msg688

Правда, там не указано, что и куда конкретно прописать.
п.с. ман ипфв ?

Вот пример с нага как люди ограничивают количесвто сессий

ipfw -q add 11 allow tcp from table(199) to any out setup limit src-addr 200
ipfw -q add 12 pipe 500 ip from any to table(199) out
ipfw -q add 13 pipe 600 ip from table(199) to any out limit src-addr 30
ipfw -q pipe 500 config bw 5000Kbit/s
ipfw -q pipe 600 config bw 5000Kbit/s
ipfw -q add 14 allow ip from any to table(199) out
ipfw -q add 15 allow ip from table(199) to any out

ПРАВИЛА НЕ РАСЧИТАНЫ ДЛЯ РАБОТЫ С НОДЕНИ В ТОМ ВИДЕ КОТОРОМ ПРИВЕДЕНЫ, А СЛУЖАТ В КАЧЕСТВЕ АБСТРАКТНОГО ПРИМЕРА ДЛЯ ДЕМОНСТРАЦИИ ВОЗМОЖНОСТИ
Записан
label
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #4 : 18 Июня 2010, 11:45:30 »

Хотелось бы поднять эту тему еще разок.
уважаемые программеры, стоит таже задача, ограничить количество сессий на клиента, так как резать скорость динамически на безлимитных каналах это не правильно.
есть стандартный фаервол nodeny:#cat /etc/rc.firewall
f='/sbin/ipfw'

ifOut='em0'

${f} -f flush
${f} add 10 pass  gre from any to any

${f} add 40 allow tcp from any to me 1723

${f} add 50 allow tcp from any to me 22
${f} add 51 allow tcp from me 22 to any

${f} add 110 allow ip from any to any via lo0
${f} add 120 skipto 1000 ip from me to any
${f} add 130 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${f} add 160 skipto 2000 ip from any to me

${f} add 200 skipto 500 ip from any to any via ${ifOut}

${f} add 300 skipto 4500 ip from any to any in

${f} add 400 skipto 450 ip from any to any recv ${ifOut}
${f} add 420 divert 1 ip from any to any
${f} add 450 divert 2 ip from any to any
${f} add 490 allow ip from any to any

${f} add 500 skipto 32500 ip from any to any in
${f} add 510 divert 1 ip from any to any
${f} add 540 allow ip from any to any


${f} add 1000 allow udp from any 53,7723 to any
${f} add 1010 allow tcp from any to any setup keep-state
${f} add 1020 allow udp from any to any keep-state
${f} add 1100 allow ip from any to any

${f} add 2000 check-state
${f} add 2010 allow icmp from any to any
${f} add 2020 allow tcp from any to any 80,443
${f} add 2050 deny ip from any to any via ${ifOut}
${f} add 2060 allow udp from any to any 53,7723

${f} add 2100 deny ip from any to any

${f} add 32490 deny ip from any to any

после добавления скриптом nofire.pl получается следующее: #ipfw list

00010 156475712 60946982924 allow gre from any to any
00040    335656    19368520 allow tcp from any to me dst-port 1723
00050     12764     1149254 allow tcp from any to me dst-port 22
00051     12910     6135568 allow tcp from me 22 to any
00110   2150988  1792146296 allow ip from any to any via lo0
00120    742479    72752800 skipto 1000 ip from me to any
00130      4416      247296 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00160   2154276   144081199 skipto 2000 ip from any to me
00200 163153066 70659812075 skipto 500 ip from any to any via em0
00300  75070265  8690422608 skipto 4500 ip from any to any in
00400  88916944 61895974323 skipto 450 ip from any to any recv em0
00420    682030   107643233 divert 1 ip from any to any
00450  89598359 62003523877 divert 2 ip from any to any
00490  89598797 62003622266 allow ip from any to any
00500  89528187 62153003415 skipto 32500 ip from any to any in
00510  73626294  8507363569 divert 1 ip from any to any
00540  73374162  8502246456 allow ip from any to any
01000    193680    13703890 allow udp from any 53,7723 to any
01010         0           0 allow tcp from any to any setup keep-state
01020      1316      181668 allow udp from any to any keep-state
01100    548132    59000740 allow ip from any to any
02000         0           0 check-state
02010     32159     5578120 allow icmp from any to any
02020     65857     9412301 allow tcp from any to any dst-port 80,443
02050   1843160   119262099 deny ip from any to any via em0
02060    195021     8668938 allow udp from any to any dst-port 53,7723
02100     17421     1025416 deny ip from any to any
05000    501903    33450217 deny ip from not table(0) to any
05001         0           0 skipto 5010 ip from table(127) to table(126)
05002  73886082  8549164029 skipto 5030 ip from any to not table(2)
05003      3309      437502 deny ip from any to not table(1)
05004    676486   107189925 pipe tablearg ip from table(21) to any
05005         0           0 deny ip from any to any
05010         0           0 pipe tablearg ip from table(127) to any
05030     25649     1231336 deny tcp from table(15) to any dst-port 25
05400  73859435  8547821952 pipe tablearg ip from table(11) to any
32000         0           0 deny ip from any to any
32490       135       11161 deny ip from any to any
33000         0           0 pipe tablearg ip from table(126) to table(127)
33001  89527747 62152892315 skipto 33010 ip from not table(2) to any
33002         0           0 pipe tablearg ip from any to table(20)
33003       440      111100 deny ip from any to any
33400  89123037 62108828167 pipe tablearg ip from any to table(10)
65535    404710    44064148 deny ip from any to any



думается что для ограничения кол-ва сессий после строки :
05003      3309      437502 deny ip from any to not table(1)
нужно дописать строку :
05004 allow ip from table(1) to any limit src-addr 100 # ограничение в 100 сессий для всех авторизованых пользователей


в файлике nofire.pl нашел где добавляются правила:
05000    501903    33450217 deny ip from not table(0) to any
05001         0           0 skipto 5010 ip from table(127) to table(126)
05002  73886082  8549164029 skipto 5030 ip from any to not table(2)
05003      3309      437502 deny ip from any to not table(1)
05004    676486   107189925 pipe tablearg ip from table(21) to any
05005         0           0 deny ip from any to any

вот этот кусок:
&SetIpfwRule(qq{deny ip from not table(0) to any});         # запретим любой входящий трафик от незарегистрированных либо невключенных ip
 &SetIpfwRule(qq{skipto $n1 ip from table(127) to table(126)});      # переход на: клиент -> альт. направление
 &SetIpfwRule(qq{skipto $n3 ip from any to not table(2)});      # переход на: клиент -> не другой клиент ( -> мир)
 &SetIpfwRule(qq{deny ip from any to not table(1)});         # запретить трафик к невключенным зарегистрированным ip
 &SetIpfwRule(qq{pipe tablearg ip from table(21) to any});      # клиент -> клиент
 &SetIpfwRule(qq{deny ip from any to any});



собственно вопрос: если в этот кусок скрипта добавить :
&SetIpfwRule(qq{deny ip from not table(0) to any});         # запретим любой входящий трафик от                   незарегистрированных либо невключенных ip
 &SetIpfwRule(qq{skipto $n1 ip from table(127) to table(126)});      # переход на: клиент -> альт. направление
 &SetIpfwRule(qq{skipto $n3 ip from any to not table(2)});      # переход на: клиент -> не другой клиент ( -> мир)
 &SetIpfwRule(qq{deny ip from any to not table(1)});         # запретить трафик к невключенным зарегистрированным ip
 &SetIpfwRule(qq{allow ip from table(1) to any limit src-addr 100});          # ВОТ ЭТО!!!!!!!!!!!!!!!!!!!!!!!!!!
&SetIpfwRule(qq{deny ip from any to not table(1)});
 &SetIpfwRule(qq{pipe tablearg ip from table(21) to any});      # клиент -> клиент
 &SetIpfwRule(qq{deny ip from any to any});

1: пропишется ли это правило в ipfw под нужным номером?
2: будут ли резаться сессии?
3. будут ли нужные пакеты обрабатываться следующим за вставленым правилом?
короче, будет ли работать такая схема?
Записан
VitalVas
NoDeny
Спец
*

Карма: 60
Offline Offline

Сообщений: 991



Просмотр профиля WWW
« Ответ #5 : 18 Июня 2010, 20:30:25 »

обясните пожалуста суть обрезки трафика для ваших абонентов?
и при таком количестве исдодящих соединений, ето издивательство над абонентами....
Записан
label
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #6 : 18 Июня 2010, 21:50:20 »

в сети порядка 300 пользователей, находящихся территориально очень близко друг к другу. у них есть возмжность устанавливать роутеры или прокси. собираемся давать безлимитный доступ. если не сделать ограничения по кол-ву сессий- эти 300 живых пользователей превратятся в 100 , которые через себя будут раздавать инет. резать для них динамически скорость не получается по политическим причинам:-). вот и пробую сделать так что бы, скажем одному пользователю на безлимите было комфортно работать, двум уже нет. Другого способа кроме  как ограничить число сессий на абоненте не вижу
про исходящие соединения - не совсем понятно
 в своем предыдущем посте уже нашел сам пару ошибок
1:  вместо строки :05004 allow ip from table(1) to any limit src-addr 100 # ограничение в 100 сессий для всех авторизованых пользователей
нужно: 05004 allow ip from table(1) to any setup limit src-addr 100 # ограничение в 100 сессий для всех авторизованых пользователей

2: в этом правиле нельзя писать 05004 allow ip from table(1) to any limit src-addr 100 # ограничение в 100 сессий для всех авторизованых пользователей
видимо нужно использовать skipto на слеующее по поядку правило
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1226

In LAN we trust!

358714596
Просмотр профиля
« Ответ #7 : 18 Июня 2010, 22:25:59 »

в сети порядка 300 пользователей, находящихся территориально очень близко друг к другу. у них есть возмжность устанавливать роутеры или прокси. собираемся давать безлимитный доступ. если не сделать ограничения по кол-ву сессий- эти 300 живых пользователей превратятся в 100 , которые через себя будут раздавать инет. резать для них динамически скорость не получается по политическим причинам:-). вот и пробую сделать так что бы, скажем одному пользователю на безлимите было комфортно работать, двум уже нет.
чушь!
Записан
label
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #8 : 19 Июня 2010, 08:11:17 »

а по делу кто нибудь ответит?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #9 : 19 Июня 2010, 08:44:55 »

1) limit работает только в связке check-state
2) table 1  юзается для другого, в твоем случае надо any т.к. проверка, что клиент авторизован прошла несколькими правилами ранее deny ip from not table(0) to any
3) все правила после allow не будут выполнены - шейпы работать не будут
Записан
VitalVas
NoDeny
Спец
*

Карма: 60
Offline Offline

Сообщений: 991



Просмотр профиля WWW
« Ответ #10 : 19 Июня 2010, 13:28:38 »

Давай представь себе, у тебя открыто:
браузер из 15-ми страницами (5 еще грузятся)
путти - 4 шт.
винсцп - 3 шт.
запужен торент из большим количкством закачок/роздач
чат, ася, скайп, радио
еще, качаеш по фтп несколько файлов одновременно
+ живет какой-то троянчик

и как будешь ты комфортно работать?
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1226

In LAN we trust!

358714596
Просмотр профиля
« Ответ #11 : 19 Июня 2010, 15:34:32 »

имхо более правильный вариант - не давать симметричные анлимы, тогда и раздавать их будет не очень удобно
Записан
label
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #12 : 21 Июня 2010, 07:12:58 »

то Efendy:
по таблице 1 взято из nofire.pl:

Описания таблиц ipfw, используемых скриптом:
#  0 -   ip клиентов, которых обслуживает данный сателлит и для которых выполняются условия, описанные в
#   конфиге сателлита, по умолчанию:
#     - клиент авторизован и доступ не заблокирован
#     - клиент в состоянии `всегда онлайн` и доступ не заблокирован
#   Если в данной таблице нет нужного вам ip, а должен быть - возможно, клиент в группе, которую не
#   обслуживает данный сателлит.
1 -  ip авторизованных, а также `всегда онлайн`, незаблокированных клиентов всех групп! Не только
#   тех, которые обслуживает данный сателлит. Эта таблица заполняется только если запущено ядро nodeny.

#  2 -   полный список всех ip NoDeny вне зависимости от авторизации и др. параметров.
#
# 10 -   ip и pipe-ы для шейпов трафика, идущего к клиенту. Например
#      bash# ipfw table 10 list | grep 10.0.0.5
#            10.0.0.5/32 1234
#      bash# ipfw pipe 1234 show
#            01234: 512.000 Kbit/s
#   Здесь входящая скорость на клиента ограничена 512 кбит.
#   В 10 таблицу не обязательно попадают все `включенные ip` - в зависимости от условий (модификаторы скоростей,
#   персональные параметры) для ip могут быть сформированы персональные правила в ipfw
#
# 11 -   То же для трафика от клиента
#
# 15 -   ip, которым заблокирован доступ к запрещенным портам
#
# 20,21 - шейпы для трафика `клиент -> клиент`, т.е трафик между ip, которые ОБА присутствуют в NoDeny

теперь по limit. следущие строки взяты из man ipfw:

Чтобы ограничить количество подключений открываемых пользователем, Вы
можете использовать следующий тип правил:

      ipfw add allow tcp from my-net/24 to any setup limit src-addr 10

      ipfw add allow tcp from any to me setup limit src-addr 4

Первое (в предположении, что это выполняется на шлюзе), позволит каждому
компьютеру в /24 сети открывать не более 10 TCP подключений. Последнее
может быть помещено на сервер, для гарантии того, что отдельный клиент
не использует больше чем 4 одновременных подключений.

на счет 3-го: тут с тобой полностью согласен, поэтому в предыдущем сообщении писал что нашел ошибку и спрашивал:
"в этом правиле нельзя писать 05004 allow ip from table(1) to any limit src-addr 100 # ограничение в 100 сессий для всех авторизованых пользователей
видимо нужно использовать skipto на слеующее по поядку правило"

как бы только записать это в nofire.pl? и будет ли работать правило skipto  с setup limit?

Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #13 : 21 Июня 2010, 08:09:05 »

Код:
#Не только  тех, которые обслуживает данный сателлит
Как это расшифровывается? А вот так: "возможно и других, которых НЕ обслуживает данный сателлит". Таблица 1 создана исключительно для отлавливания ситуации клиент-клиент, это как система "свой-чужой" в самолетах.

Цитировать
теперь по limit. следущие строки взяты из man ipfw:

Чтобы ограничить количество подключений открываемых пользователем, Вы
можете использовать следующий тип правил:

      ipfw add allow tcp from my-net/24 to any setup limit src-addr 10

      ipfw add allow tcp from any to me setup limit src-addr 4
Хорошо, давай перефразирую. Допустим, в мане по человеку написано:  Чтобы человек ходил, достаточно чтоб у него были ноги. Но если прочитать полностью ман, то оказывается, что наличие головы тоже обязательно. Ты же пытаешься идти только ногами.  Вывод: внимательно читай ман. Намек: check-state. В фаере он есть, но он не сработает для твоих правил - стоит не в том месте.

3) skipto с limit вероятно будет работать либо юзай другой вариант:  гугли "one pass ipfw".

P.S Limit можно добавить в правило с пайпами, а не отдельное, опять же при двух условиях:
1) не бездумно
2) check-state
« Последнее редактирование: 21 Июня 2010, 08:16:37 от Efendy » Записан
label
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #14 : 21 Июня 2010, 10:29:39 »

1.получается нужно играться с таблице 0?

2. то есть ты думешь что строка 05004 skipto (Непонимающий на следующую?) ip from table(0) to any setup limit src-addr 100 в принципе может работать?

за net.inet.ip.fw.one_pass спасибо, пороюсь

может у кого есть желание сделать такое ограничение за вознаграждение?:-)
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!