Страница 1 из 1

IPFW обрезка кол-ва соединений

Добавлено: 2011-02-27 10:07:24
mmvds
Извиняюсь за даблпостинг с темой http://forum.lissyara.su/viewtopic.php? ... 7&p=285121
но там сообщение затерялось без ответа в общем обсуждении.

Подскажите пожалуйста, как обрезать кол-во исходящих соединений?
фаервол выглядит так:

Код: Выделить всё

   ipfw show
    00099      1208       57984 deny tcp from table(77) to any dst-port 25
    04998   1333646   200103483 skipto 5990 ip from table(101) to any in via em0
    05090  31865077 13137215634 pipe tablearg ip from table(121) to any in via em0
    05990  33114850 13284266094 allow ip from table(121) to any in via em0
    08090  33088011 13291228363 ngtee 21 ip from table(121) to any out via em1
    09999   1535430   314200780 skipto 20000 ip from table(100) to any out via em1
    10090  31565576 12984870479 nat 100 ip from table(121) to any out via em1
    20000  39230088 37947801039 nat 100 ip from any to me in via em1
    29999    982918    75236575 skipto 30590 ip from any to table(101) in via em1
    30090  37667969 37956574650 pipe tablearg ip from any to table(122) in via em1
    30590  36808048 36029432254 ngtee 21 ip from any to table(121) in via em1
    31090  36808326 36029402760 allow ip from any to table(121) in via em1
    51090  36949740 36204271464 allow ip from any to table(121) out via em0
    60000  33099189 13297599997 allow ip from any to any out via em1
    65535 527048987 34225950262 deny ip from any to any
em1 - внешний интерфейс
em0 - внутренний интерфейс
таблица 77 - пользователи, замечанные в спаме
таблицы 121/122 - серые Ip юзеров
таблица 100 - все белые IP
таблица 101 - ip без ограничения скорости

Пробую добавить в самое начало правило для тестового Ip ограничение на 20 соединений

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_белым_ip to any keep-state limit src-addr 20 
И ВСЯ сеть сразу падает

пробовал уточнить что на исхдящее через em1

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_белым_ip/32 to any out via em1 keep-state limit src-addr 20
но опять же ложится вся сеть

Подскажите, пожалуйста, что я делаю не так и как исправить?

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-27 11:41:14
Garison

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_белым_ip/32 to any out via em1 keep-state limit dst-addr 20

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 9:27:58
mmvds
Аналогично, пишет

Код: Выделить всё

ipfw: only one of keep-state and limit is allowed
и отваливается, но ни keep-state ни limit у меня в правилах больше нет

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 10:01:36
mmvds

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_белым_ip/32 to any out via em1 limit dst-addr 20
так работает

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_белым_ip/32 to any out via em1 limit src-addr 20
и так тоже

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 15:38:05
mmvds
С белым ip все ок, но если пробую сделать тоже самое для серого

Код: Выделить всё

add 1 allow ip from Ip_тестового_компа_с_серым_ip/32 to any out via em1 limit src-addr 20
то инет на данном Ip отваливается
при этом пакеты через правило проходят

Код: Выделить всё

ipfw show
00001        96        4608 allow ip from 10.197.0.241 to any out via em1 limit       

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 15:44:36
hizel
для локального вместо allow поставить nat 100 если у вас one_pass enable

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 17:05:20
mmvds

Код: Выделить всё

add 1 nat 100 tcp from Ip_тестового_компа_с_серым_ip/32 to any limit src-addr 30

Так сработало, но когда сделал тоже самое для серой сети, сервер отвалился в kernel panic, к сожалению записать ошибку не успел, отправил в ребут.
net.inet.ip.fw.one_pass: 0 отключен, но при включении поменяется логика фаервола.

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-02-28 17:56:28
hizel
net.inet.ip.fw.one_pass: 0 отключен
что это значит? net.inet.ip.fw.one_pass=0 ?
тогда делайте через tag

Код: Выделить всё

add 1 tag 13 count tcp from Ip_тестового_компа_с_серым_ip/32 to any limit src-addr 30
и дальше изменить логику nat-а, для этого ip проверяя tag
как-то так

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-03-03 11:27:32
mmvds
Если кому интересно, с проблемой разобрался:

Код: Выделить всё

net.inet.ip.fw.dyn_buckets=65536
net.inet.ip.fw.dyn_max=65536
net.inet.ip.fw.dyn_ack_lifetime=120
net.inet.ip.fw.dyn_syn_lifetime=10
net.inet.ip.fw.dyn_fin_lifetime=2
net.inet.ip.fw.dyn_short_lifetime=10
Теперь все работает

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-03-03 11:45:14
vadim64
а правила какие?

Re: IPFW обрезка кол-ва соединений

Добавлено: 2011-03-03 14:12:10
mmvds
правило такое

Код: Выделить всё

add 1 nat 100 tcp from сеть_с_серыми_ip/32 to any limit src-addr 30
кстати, если поставить 50 соединений, то сеть опять отваливается :(

Код: Выделить всё

add 1 nat 100 tcp from сеть_с_серыми_ip/32 to any limit src-addr 50
хотя оперативки увеличивается не на много, нагрузка на проц тоже и net.inet.ip.fw.dyn_count возрастает с 3 тыс до 5 тыс, возможно опять же упустил из виду какой-то параметр