URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 57731
[ Назад ]

Исходное сообщение
"Ограничение соединений на определенный порт"

Отправлено Nobus , 27-Июн-05 19:31 
Доброво времени суток!
Существует следующая задача:
Дано
- есть СЕРВЕР. У него открыт ПОРТ.
- есть КЛИЕНТЫ. Они пользуются СЕРВЕРОМ через его ПОРТ.
- между ними стоит мост (линукс, ядро 2.6, Iptables).
- есть я, который еще не очень сильно разобрался с iptables.
Нужно:
- чтобы каждый КЛИЕНТ мог устанавливать определенное количество сессий с ПОРТОМ СЕРВЕРА, не превышающим заданное (например 50).
Подскажите, правильно ли я выбрал инструмент для решения этой задачи (iptables) или следует посмотреть что то еще. Если кто то уже решал подобное буду рад конкретному решению.
Заранее всем спасибо %)

Содержание

Сообщения в этом обсуждении
"Ограничение соединений на определенный порт"
Отправлено Junior , 28-Июн-05 08:35 
>Нужно:
>- чтобы каждый КЛИЕНТ мог устанавливать определенное количество сессий с ПОРТОМ СЕРВЕРА,
>не превышающим заданное (например 50).

iptables -A INPUT -i $LINUX_INPUT_IFACE -p tcp -s $LOCALNET -d $SERVER_IP_ADDRES --dport $DESIRED_SERVER_PORT -m state --state NEW,ESTABLISHED -m connlimit --connlimit-above 50 -j REJECT

>Подскажите, правильно ли я выбрал инструмент для решения этой задачи (iptables) или

Почему нет?

>следует посмотреть что то еще. Если кто то уже решал подобное
>буду рад конкретному решению.

Да разный способы есть. Этот, ИМХО, проще. Только нужно пересобрать фильтр соответственно, чтобы скомпилировать данный модуль.

>Заранее всем спасибо %)

На здоровье.


"Ограничение соединений на определенный порт"
Отправлено jonatan , 28-Июн-05 09:51 
>iptables -A INPUT -i $LINUX_INPUT_IFACE -p tcp -s $LOCALNET -d $SERVER_IP_ADDRES --dport
>$DESIRED_SERVER_PORT -m state --state NEW,ESTABLISHED -m connlimit --connlimit-above 50 -j REJECT
Только в цепочке FORWARD. А зачем здесь ESTABLISHED?

"Ограничение соединений на определенный порт"
Отправлено Junior , 28-Июн-05 10:23 
>>iptables -A INPUT -i $LINUX_INPUT_IFACE -p tcp -s $LOCALNET -d $SERVER_IP_ADDRES --dport
>>$DESIRED_SERVER_PORT -m state --state NEW,ESTABLISHED -m connlimit --connlimit-above 50 -j REJECT
>Только в цепочке FORWARD. А зачем здесь ESTABLISHED?

1. Да, с цепочкой напутал, посчитал что для локального сервиса.
2. Чтобы считались и установленные. Т.к. если пропустится ТОЛЬКО начало соединения, переговоры с сервером, то уже сам коннект может отрубить
К тому же я не знаю что за сервис.
Если ФТП с пассивным соединением, то ещё и RELATED нужно :))


"Ограничение соединений на определенный порт"
Отправлено jonatan , 28-Июн-05 10:42 
>2. Чтобы считались и установленные. Т.к. если пропустится ТОЛЬКО начало соединения, переговоры
>с сервером, то уже сам коннект может отрубить
>К тому же я не знаю что за сервис.
>Если ФТП с пассивным соединением, то ещё и RELATED нужно :))
http://www.netfilter.org/patch-o-matic/pom-base.html#pom-bas...
connlimit сохраняет количество новых соединений (syn, NEW) в кэше. Поэтому считать ответы на установленные соединения не нужно. В данном случае можно просто написать (например, для www)

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -m connlimit ! --connlimit-above 50 -j ACCEPT


"Ограничение соединений на определенный порт"
Отправлено Junior , 28-Июн-05 10:49 
>>2. Чтобы считались и установленные. Т.к. если пропустится ТОЛЬКО начало соединения, переговоры
>>с сервером, то уже сам коннект может отрубить
>>К тому же я не знаю что за сервис.
>>Если ФТП с пассивным соединением, то ещё и RELATED нужно :))
>http://www.netfilter.org/patch-o-matic/pom-base.html#pom-bas...
>connlimit сохраняет количество новых соединений (syn, NEW) в кэше. Поэтому считать ответы
>на установленные соединения не нужно. В данном случае можно просто написать
>(например, для www)
>
>iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
>iptables -A FORWARD -p tcp --dport 80 -m connlimit ! --connlimit-above 50
>-j ACCEPT


В любом случае обе записи являются верными. Или есть другая точка зрения?
Если нет, то к чему это? В Линуксе задачу можно решить более, чем одним способом.


"Ограничение соединений на определенный порт"
Отправлено jonatan , 28-Июн-05 10:55 
>В любом случае обе записи являются верными. Или есть другая точка зрения?
>
>Если нет, то к чему это? В Линуксе задачу можно решить более,
>чем одним способом.
Нужно ПОНИМАТЬ, что делаешь, для чего и как это работает. Хотя точка зрения "воткнул - заработало и ладно" тоже широко распространена.

"Ограничение соединений на определенный порт"
Отправлено Junior , 28-Июн-05 11:04 
>>В любом случае обе записи являются верными. Или есть другая точка зрения?
>>
>>Если нет, то к чему это? В Линуксе задачу можно решить более,
>>чем одним способом.
>Нужно ПОНИМАТЬ, что делаешь, для чего и как это работает. Хотя точка
>зрения "воткнул - заработало и ладно" тоже широко распространена.

Не стоит переходит в другую плоскость разговора, не думаю, что тебе понравится дальнейшее развитие диалога. Ок?


"Ограничение соединений на определенный порт"
Отправлено jonatan , 28-Июн-05 11:07 
>Не стоит переходит в другую плоскость разговора, не думаю, что тебе понравится
>дальнейшее развитие диалога. Ок?
Конечно. Заниматься флеймом мне тоже неинтересно.

"Ограничение соединений на определенный порт"
Отправлено Nobus , 28-Июн-05 19:23 
>>>iptables -A INPUT -i $LINUX_INPUT_IFACE -p tcp -s $LOCALNET -d $SERVER_IP_ADDRES --dport
>>>$DESIRED_SERVER_PORT -m state --state NEW,ESTABLISHED -m connlimit --connlimit-above 50 -j REJECT
>>Только в цепочке FORWARD. А зачем здесь ESTABLISHED?
>
>1. Да, с цепочкой напутал, посчитал что для локального сервиса.
>2. Чтобы считались и установленные. Т.к. если пропустится ТОЛЬКО начало соединения, переговоры
>с сервером, то уже сам коннект может отрубить
>К тому же я не знаю что за сервис.
Сервис - один из игровых серверов. Все соединения идут на один едиственный порт.
>Если ФТП с пассивным соединением, то ещё и RELATED нужно :))