Просмотр сообщений
|
Страниц: [1]
|
1
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 23 Июня 2010, 16:06:18
|
nomake.pl не работает с колонкой paket. а именно из нее в таблице users берется тариф на котором сидит индивидум
В качестве тегов, указывающих на данные клиента, nomake воспринимает:
ip - ip адрес; login - логин; lat_login - логин, сконвертированный в латиницу; pass - пароль; state - состояние доступа (on/off); auth - режим авторизации (no/on/ong/off/1/2/3...).
вот
|
|
|
2
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 23 Июня 2010, 11:28:22
|
короче сделал так, если кому надо: решил все это дело в pf сделать. вот конф pf.conf set limit states 128000 set optimization aggressive
table <all_ips> persist file "/etc/all.pf"
nat pass on em0 from 10.0.0.0/8 to any -> em0 nat pass on em0 from 192.168.0.0/16 to any -> em0 pass in on em1 proto tcp from any to 192.168.6.1 port 22 no state pass in quick from <all_ips> to any keep state (source-track rule, max-src-states 300) # 300 сессий
таблица all.pf 10.10.0.0/16 192.168.0.0/16
это сетки с которых у меня люди ходят в инет( серые и vpn)
теперь проблема в том что бы в этот файлик вытащить ip безлимитчиков. может кто подскажет? нужно сделать скрипт который из базы вытаскивает всех безлимитчиков и с какой то периодичностью записывает их ip в файлик all.pf
|
|
|
3
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 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 спасибо, пороюсь может у кого есть желание сделать такое ограничение за вознаграждение?:-)
|
|
|
4
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 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?
|
|
|
6
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 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 на слеующее по поядку правило
|
|
|
7
|
Главная категория / Nodeny 50 / Re: Ограничение кол-ва tcp-сессий
|
: 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. будут ли нужные пакеты обрабатываться следующим за вставленым правилом? короче, будет ли работать такая схема?
|
|
|
|