LINUX.ORG.RU
ФорумAdmin

Диапазон портов для приложения


0

0

Дистр opensuse 11.2
linux-5rdx:/home/dim # uname -a
Linux linux-5rdx 2.6.31.8-0.1-default #1 SMP 2009-12-15 23:55:40 +0100 i686 athlon i386 GNU/Linux

Как забить за приложением диапазон портов.
Чтоб другие в него залезть не могли, а приложению выделялось только оттуда.

стандартно доступные порты для приложения пишутся в конфиге приложения. Можно конечно извращаться, но не рекомендуется - после забудешь нафига это делал =)

Atlant ★★★★★
()

написать свой враппер для сокет функций с соответствующими ограничениями и запускать все приложения через него

hizel ★★★★★
()

Портов на которых слушать или с которых соединение устанавливать?

Вообще ты просишь что-то странное, какова исходная задача?

true_admin ★★★★★
()

Если запускать приложение от специально выделенного юзера, то все проще пареной репы.
man iptables на предмет owner.

nnz ★★★★
()
Ответ на: комментарий от true_admin

Вот здесь я писал про приоритезацию трафика на desktop: http://www.linux.org.ru/view-message.jsp?msgid=4440733&nocache=-433963050

Мне подсказали и я настроил так что протокол http монополизирует канал, т.е. я могу пользоваться браузером во время торрент-закачек. Но для полного счастья мне нужно определять приоритеты не по протоколу, а по приложению(например чтоб закачивать через http). Поэтому я хочу забить за качалкой порты, и на эти порты наложить ограничения.

ferrum2688
() автор топика
Ответ на: комментарий от nnz

Вообще с английским проблема...
Вот что нашёл в iptables
owner
This module attempts to match various characteristics of the packet creator, for locally generated packets. This match is only valid in the OUTPUT and POSTROUTING chains. Forwarded packets do not have any socket associated with them. Packets from kernel threads do have a socket, but usually no owner.

Если ты про то как маркировать/резать исходящие пакеты по юзеру, то до этого я уже дошол.
А вот как маркировать входящие пакеты по юзеру не знаю, поэтому и пытаюсь по портам.

ferrum2688
() автор топика
Ответ на: комментарий от ferrum2688

Посмотри, например, на опеннете статьи по шейпингу. Ключевые слова: tc shape shaper traffic iptables

true_admin ★★★★★
()
Ответ на: комментарий от ferrum2688

Во-первых, для ограничения доступа вполне достаточно блокирования исходящих.

Во-вторых,

iptables -t mangle -A OUTPUT --uid-owner proga -j CONNMARK --set-mark 23
iptables -N check_ports
iptables -A check_ports -m connmark ! --mark 23 -j DROP
iptables -A check_ports -j ACCEPT
iptables -I INPUT -p tcp --dport aaa:bbb -m conntrack ! --ctstate NEW -j check_ports
iptables -I OUTPUT -p tcp --sport aaa:bbb -j check_ports
Входящие NEW-пакеты придется пропустить, потому что для них владелец еще не определен (для этого нужен как минимум один исходящий).

nnz ★★★★
()
Ответ на: комментарий от ferrum2688

Поэтому я хочу забить за качалкой порты, и на эти порты наложить ограничения.

Бред и ерунда. Есть как минимум три решения, позволяющие сделать нормальный шейпер без жесткой привязки портов:

  • Использование выделенного юзера и CONNMARK, как я написал. Но не для блокирования портов, а для выставления меток (CONNMARK --restore-mark) фильтров шейпера (tc filter).
  • IPP2P из xtables-addons, тоже в сочетании с CONNMARK.
  • l7-filter-userspace (его таки запилили в дебиан). Но зис вэй не труЪ, ибо l7-filter — говнецо еще то.
nnz ★★★★
()
Ответ на: комментарий от nnz

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

#!/bin/sh
TC=/usr/sbin/tc
IP=/sbin/ip
IF=dsl0
IFB_IF=ifb0

#скорость соединения-10%
RATE=230kbit
#гарантированная полоса
MRATE=1kbit

MBURST=20k
$IP link set $IFB_IF up

# set interface qlen
$IP link set dev $IF qlen 32
$IP link set dev $IFB_IF qlen 32

# reset all qdisc
$TC qdisc del dev $IFB_IF root
$TC qdisc del dev $IF root
$TC qdisc del dev $IF ingress

# reset all qdisc
$TC qdisc add dev $IF ingress
$TC qdisc add dev $IF root sfq perturb 10
$TC qdisc add dev $IFB_IF root handle 1: htb default 10
$TC class add dev $IFB_IF parent 1: classid 1:1 htb rate $RATE burst $MBURST
$TC class add dev $IFB_IF parent 1:1 classid 1:10 htb rate $MRATE ceil $RATE prio 2
$TC class add dev $IFB_IF parent 1:1 classid 1:20 htb rate $MRATE ceil $RATE burst $MBURST prio 0
#game
$TC qdisc add dev $IFB_IF parent 1:10 handle 10: prio
$TC qdisc add dev $IFB_IF parent 1:20 handle 20: sfq perturb 10

#game
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip sport 29000 0xffff flowid 1:20

#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip dport 5190 0xffff flowid 1:20
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip sport 53 0xffff flowid 1:20
#http
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 80 0xffff flowid 1:20

#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 5222 0xffff flowid 1:20
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 7012 0xffff flowid 1:20
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip dport 6886 0xffff flowid 1:20
#$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff\
# match u8 0x05 0x0f at 0\
# match u16 0x0000 0xffc0 at 2\
# match u8 0x10 0x10 at 33 flowid 1:20

$TC filter add dev $IF parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $IFB_IF
#
#$TC filter add dev $IFB_IF parent 1:0 protocol all prio 11 handle 0x5 fw flowid 1:20

В общем что сюда добавить чтоб заработало?

Помечал по connmark в цепочке INPUT, а потом пытался поймать фильтром, но не работает.

ferrum2688
() автор топика
Ответ на: комментарий от ferrum2688

IFB — это лишний гемор. Нормально рулить можно только исходящим трафиком, а для этого IFB не нужен.

Входящий можно только ограничивать и только TCP. Приоритеты расставлять бессмысленно, они не будут работать. Пытаться ограничивать входящие UDP и ICMP тоже бессмысленно.
Если это не конечный клиент, а шлюз, то входящий трафик резать вообще незачем, ибо он является также и исходящим (во внутреннюю сеть), и поэтому может быть спокойно зарезан на выходе.

Если же это конечный комп, то проще и удобнее задать ограничения на скорость непосредственно в конфигах программ.

А чтобы заработали handle <xxx> fw, нужно сделать

iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark
Это обеспечит копирование ctmark (который connmark) в nfmark (с которыми работает tc filter).

nnz ★★★★
()
Ответ на: комментарий от nnz

См ниже листинг, обрати в нём внимание на «Sent» для классов 1:20, если он больше нуля, то фильтр сработал. Так вот на dsl0, всё работает, но тоже самое не работает на ifb0. Я просто убил на это много времени и просто надеюсь на чудо фильтр который сработает на ifb0(без перелопачивания скрипта).
_______________________________________________________
linux-5rdx:/home/dim/Desktop/other # iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
check_ports tcp  — anywhere anywhere tcp ! ctstate NEW
ACCEPT all  — anywhere anywhere
ACCEPT all  — anywhere anywhere state ESTABLISHED
ACCEPT icmp — anywhere anywhere state RELATED
input_ext all  — anywhere anywhere
input_ext all  — anywhere anywhere
input_ext all  — anywhere anywhere
input_ext all  — anywhere anywhere
input_ext all  — anywhere anywhere
LOG all  — anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-IN-ILL-TARGET '
DROP all  — anywhere anywhere

Chain FORWARD (policy DROP)
target prot opt source destination
LOG all  — anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWD-ILL-ROUTING '

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
check_ports tcp  — anywhere anywhere tcp
ACCEPT all  — anywhere anywhere
ACCEPT all  — anywhere anywhere state NEW,RELATED,ESTABLISHED
LOG all  — anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-OUT-ERROR '

Chain check_ports (2 references)
target prot opt source destination
DROP all  — anywhere anywhere connmark match !0x2
ACCEPT all  — anywhere anywhere

Chain forward_ext (0 references)
target prot opt source destination

Chain input_ext (5 references)
target prot opt source destination
DROP all  — anywhere anywhere PKTTYPE = broadcast
ACCEPT icmp — anywhere anywhere icmp source-quench
ACCEPT icmp — anywhere anywhere icmp echo-request
DROP all  — anywhere anywhere PKTTYPE = multicast
DROP all  — anywhere anywhere PKTTYPE = broadcast
LOG tcp  — anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG icmp — anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG udp  — anywhere anywhere limit: avg 3/min burst 5 state NEW LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
DROP all  — anywhere anywhere

Chain reject_func (0 references)
target prot opt source destination
REJECT tcp  — anywhere anywhere reject-with tcp-reset
REJECT udp  — anywhere anywhere reject-with icmp-port-unreachable
REJECT all  — anywhere anywhere reject-with icmp-proto-unreachable

________________________________________________________________

linux-5rdx:/home/dim/Desktop/other # iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
CONNMARK all  — anywhere anywhere owner UID match dim CONNMARK xset 0x2/0xffffffff

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
CONNMARK all  — anywhere anywhere CONNMARK restore

_______________________________________________________

ferrum2688
() автор топика
Ответ на: комментарий от nnz

linux-5rdx:/home/dim/Desktop/other # tc -s qdisc ls dev dsl0
qdisc htb 1: root r2q 10 default 10 direct_packets_stat 0
Sent 17928 bytes 105 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc prio 10: parent 1:10 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 8914 bytes 51 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 20: parent 1:20 limit 127p quantum 1514b perturb 10sec
Sent 9014 bytes 54 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc ingress ffff: parent ffff:fff1 ----------------
Sent 22196 bytes 93 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

__________________________________________________________
linux-5rdx:/home/dim/Desktop/other # tc -s qdisc ls dev ifb0
qdisc htb 1: root r2q 10 default 10 direct_packets_stat 0
Sent 24382 bytes 95 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc prio 10: parent 1:10 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 24382 bytes 95 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 20: parent 1:20 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
_________________________________________________________
linux-5rdx:/home/dim/Desktop/other # tc -s -d class ls dev dsl0
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1000 rate 1000bit ceil 230000bit burst 1600b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 8914 bytes 51 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 27 borrowed: 24 giants: 0
tokens: 192000016 ctokens: 834781

class htb 1:1 root rate 230000bit ceil 230000bit burst 20Kb/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7
Sent 17928 bytes 105 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 77 borrowed: 0 giants: 0
tokens: 11095640 ctokens: 834781

class htb 1:20 parent 1:1 leaf 20: prio 0 quantum 1000 rate 1000bit ceil 230000bit burst 20Kb/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 9014 bytes 54 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 1 borrowed: 53 giants: 0
tokens: -164697 ctokens: 818620

class prio 10:1 parent 10:
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class prio 10:2 parent 10:
Sent 8914 bytes 51 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class prio 10:3 parent 10:
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
__________________________________________________________
linux-5rdx:/home/dim/Desktop/other # tc -s -d class ls dev ifb0
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1000 rate 1000bit ceil 230000bit burst 1600b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 24382 bytes 95 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 34 borrowed: 61 giants: 0
tokens: 191000000 ctokens: 830437

class htb 1:1 root rate 230000bit ceil 230000bit burst 20Kb/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7
Sent 24382 bytes 95 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 61 borrowed: 0 giants: 0
tokens: 11091296 ctokens: 830437

class htb 1:20 parent 1:1 leaf 20: prio 0 quantum 1000 rate 1000bit ceil 230000bit burst 20Kb/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -1734967296 ctokens: 869562

class prio 10:1 parent 10:
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class prio 10:2 parent 10:
Sent 24382 bytes 95 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class prio 10:3 parent 10:
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
____________________________________________________________
linux-5rdx:/home/dim/Desktop/other # tc -s -d filter ls dev dsl0
filter parent 1: protocol all pref 11 fw
filter parent 1: protocol all pref 11 fw handle 0x2 classid 1:20
____________________________________________________________
linux-5rdx:/home/dim/Desktop/other # tc -s -d filter ls dev ifb0
filter parent 1: protocol all pref 11 fw
filter parent 1: protocol all pref 11 fw handle 0x2 classid 1:20
_____________________________________________________________
Кроме того были выполнены след команды:
tc filter add dev dsl0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

tc qdisc add dev dsl0 ingress

ferrum2688
() автор топика
Ответ на: комментарий от nnz

>Нормально рулить можно только исходящим трафиком

Но для моего случая я рулю входящим и это работает(торренты не мешают).

Если же это конечный комп, то проще и удобнее задать ограничения на скорость непосредственно в конфигах программ.


(Да проще)
Но во-первых вдруг программа не поддерживает, во-вторых программа скорее всего предложит жёсткое ограничение и тогда канал будет простаивать, а если я буду в инете, то мой интернет станет медленнее.

ferrum2688
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.