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

Исходное сообщение
"ipfw pipe + if_bridge ограничивается скорость только на icmp"

Отправлено weldpua2008 , 17-Янв-07 03:36 
Привет ВСЕМ
Что хочу - что бы проходяший через мост поток ограничивался по скорости
Вот что Я делаю скриптом:

Значение sysctl-ом устанавливаю - только эти
По ходу выполнения правил устанавливается правило 97 потом
/sbin/ipfw pipe 1 config bw 999Kbit/s queue 20
/sbin/ipfw pipe 2 config bw 999Kbit/s  queue 20
/sbin/ipfw pipe 3 config bw 100kbit/s

и Уже под номером 4001-4003 устанавливаются правила токого плана
/sbin/ipfw add pipe 2 all from any to 10.11.25.3

Я получаю что ограничивается скорость только на icmp:
FreeBSD 6.2RC1

rt# ipfw pipe show
00001: 200.000 Kbit/s    0 ms   20 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.3/0      442    32708  0    0   0
00002: 200.000 Kbit/s    0 ms   20 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.3/0     2365   157146  0    0   0
00003: 100.000 Kbit/s    0 ms   50 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.5/0     2112   152566  0    0   0


{ipfw.sh}

#!/bin/sh
vr0=rl0
vr1=sk0
routerip="10.11.25.6"
ifconfig bridge0 create
ifconfig bridge0 addm $vr0 up
ifconfig bridge0 addm $vr1 up
ifconfig bridge0 up
ifconfig bridge0 maxaddr 1000
ifconfig bridge0 timeout 1000
############### SYSCTL ########################
#net.inet.ip.fastforwarding=1 #?
sysctl net.inet.ip.fw.one_pass=0
sysctl net.link.bridge.ipfw=1
sysctl net.inet.ip.fw.enable=1
sysctl net.link.ether.ipfw=0
sysctl net.link.bridge.pfil_member=0
sysctl net.link.bridge.pfil_bridge=0
sysctl net.link.bridge.pfil_onlyip=0
sysctl net.inet.ip.fw.verbose_limit=10000
############################################

s_v="-1"
n_v="$s_v"
ipfw="/sbin/ipfw "
ipf="$ipfw add "
ipf_del="/sbin/ipfw delete "
pr_r=""
r=""
appyrule=/appyrule.txt
echo "\n">$appyrule
ftpserver="10.11.25.3"
denyports=123,136-139,445,7777,7551,7550,8167
denylocalport=136-139,445,7550,7551,7777,8167
f ()
{
n_v=$n
if [ $s_v -gt 0  ]; then
echo "add number for rule: $r"
elif [ "$s_v" != "$n_v" ]; then
    if [ "$r" = "" ]; then
    echo "no rule for number: $n"
    elif [ "$pr_r" != "$r" ]; then
    $ipf_del $n
    $ipf $n $r
    echo "$ipf $n $r">>$appyrule
    fi
fi
}
n=80
r="allow udp from  0.0.0.0 2054 to 0.0.0.0"
f

n=81
r="allow layer2 from any to any mac-type arp"
f

n=82
r="allow all from any to any via lo0"
f

n=83
r="deny udp from any 53 to any via $deny_dns_card"
#f

n=84
r="deny tcp from any 53 to any via $deny_dns_card"
#f


n=89
r=" deny all from any to any $denyports"
f
n=800
r="allow all from any to any 53"
f
n=96
r=" deny icmp from any to any in icmptype 5,9,13,14,15,16,17"
f
n=97
r="allow all from any to $routerip"
f
#################PIPES ######################
p=/sbin/ipfw
#to dc
$p pipe 1 config bw 999Kbit/s queue 20
#to ftp
$p pipe 2 config bw 999Kbit/s  queue 20
#for pings
$p pipe 3 config bw 100kbit/s

n=4000
r="pipe 3 icmp from any to any"
f
n=4001
r="pipe 2 all from any to $ftpserver"
#f
n=4002
r="pipe 1 all from any to $dcserver"
f
$ipf_del 320
$ipf 320 deny tcp from any to $routerip in tcpflags syn,fin,!ack,

$ipf_del 321
$ipf 321 deny tcp from any to $routerip in tcpflags syn,fin,urg,psh,!ack

$ipf_del 322
$ipf 322 deny tcp from any to $routerip in tcpflags fin,urg,psh,!ack

########allow vpn####
$ipf_del 350
$ipf 350 allow gre from any to any
$ipf_del 351
$ipf 351 allow udp from any to any 500
$ipf_del 352
$ipf 352 allow tcp from any to any 1023,1723
$ipf_del 353
$ipf 353 allow esp from any to any


Содержание

Сообщения в этом обсуждении
"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено weldpua2008 , 17-Янв-07 22:19 
Люди ХЕЛП
Вот отдельно от скрипта проблема
Значение sysctl-ом устанавливаю - только эти
sysctl net.inet.ip.fw.one_pass=0
sysctl net.link.bridge.ipfw=1
sysctl net.inet.ip.fw.enable=1
sysctl net.link.ether.ipfw=0
sysctl net.link.bridge.pfil_member=0
sysctl net.link.bridge.pfil_bridge=0
sysctl net.link.bridge.pfil_onlyip=0
sysctl net.inet.ip.fw.verbose_limit=10000

По ходу выполнения правил устанавливается правило 97 потом
/sbin/ipfw pipe 1 config bw 999Kbit/s queue 20
/sbin/ipfw pipe 2 config bw 999Kbit/s  queue 20
/sbin/ipfw pipe 3 config bw 100kbit/s

и Уже под номером 4001-4003 устанавливаются правила токого плана
/sbin/ipfw add pipe 2 all from any to 10.11.25.3

Я получаю что ограничивается скорость только на icmp:
FreeBSD 6.2RC1

rt# ipfw pipe show
00001: 200.000 Kbit/s    0 ms   20 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.3/0      442    32708  0    0   0
00002: 200.000 Kbit/s    0 ms   20 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.3/0     2365   157146  0    0   0
00003: 100.000 Kbit/s    0 ms   50 sl. 1 queues (1 buckets) droptail
   mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 icmp     10.11.25.11/0          10.11.25.5/0     2112   152566  0    0   0


"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено Евгений , 17-Фев-07 05:00 
- вот здесь http://www.opennet.me/base/net/net_bridge.txt.html человек популярно рассказал, кстати ОБЯЗАТЕЛЬНО прочитай  комментарии к этой статье.

А так сходу вот что тебе надо поменять:
sysctl net.link.bridge.pfil_member=0
sysctl net.link.bridge.pfil_bridge=0
на
sysctl net.link.bridge.pfil_member=1
sysctl net.link.bridge.pfil_bridge=1


"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено weldpua2008 , 19-Фев-07 15:15 
Не проверял в действии для ДС и фтп
#!/bin/sh
vr0=rl0
vr1=rl1
router_card=$vr0 #card where add ip
routerip="10.11.25.6"
cards="$vr0 $vr1" #card to up
deny_dns_card="" # deny_dns_card="$vr0 $vr1"
deny_netbios_cards="$vr0 $vr1" #deny netbios through this card's
d_dhcp_cards=""  #deny dchp through this card's
ftp="10.11.25.3"
dc="10.11.25.3" #dc="( 10.11.25.3 or 10.11.13.8 )"
denyports="20 21 123 136 137 138 139 445 7777 7551 7550 8167" #to all
allow_ports="1-66 69-134 140-444 446-7549 7552-7776 7778-8166 8168-65535" #to all
speed1="2000Kbit/s" # to ftp
speed2="5000Kbit/s" # to dc
speed3="5000Kbit/s" # from any to any LOCAL
speed4="2000Kbit/s"  # internet
speed5="200Kbit/s"  # ping's

local_net="192.168.0.0/16 10.0.0.0/8 172.168.0.0/16"
deny_ftp_ip="" #deny ip to ftp server
deny_dc_ip=""  #deny ip to dc server
deny_ftp_card="" #deny all to ftp server via card
deny_dc_card=""  #deny all to dc server via card

ifc="/sbin/ifconfig "
$ifc bridge0 create
for cd in $cards;
    do
   $ifc $cd up;
   $ifc bridge0 addm $cd up
done

$ifc $router_card $routerip
$ifc bridge0 up
$sysctl net.inet.ip.fw.one_pass=0
$sysctl    net.link.bridge.ipfw=1
$sysctl    net.link.bridge.ipfw_arp=1
$sysctl net.inet.ip.fw.verbose_limit=10000
######################################## ####

#/usr/local/etc/rc.d/ipfw.sh
echo "/usr/local/etc/rc.d/ipfw.sh"
#don't edit this
s_v="-1"
n_v="$s_v"
ipfw="/sbin/ipfw "
ipf="$ipfw add "
ipf_del="/sbin/ipfw delete "
pr_r=""
r=""
appyrule=/appyrule.txt
echo '#!/bin/sh
'>$appyrule

ipf="/sbin/ipfw add"
ipf_del="/sbin/ipfw delete"


f ()
{
#s_v="-1"
#n_v="$s_v"

n_v=$n
if [ $s_v -gt 0  ]; then
echo "add number for rule: $r"
elif [ "$s_v" != "$n_v" ]; then
    if [ "$r" = "" ]; then
    echo "no rule for number: $n"
    elif [ "$pr_r" != "$r" ]; then
    n=` expr $n + 1 `
    $ipf_del $n
    $ipf $n $r
    echo "$ipf $n $r">>$appyrule
    fi
fi
}


p="/sbin/ipfw "
n=100

$p pipe 1 config bw $speed1 # to ftp
$p pipe 2 config bw $speed2 # to dc
$p pipe 3 config bw $speed3 # from any to any
$p pipe 4 config bw $speed4 # internet
$p pipe 5 config bw $speed5 # ping's


n=` expr $n + 100 `
r="allow udp from  0.0.0.0 2054 to 0.0.0.0"
f

r="allow layer2 from any to any mac-type arp"
f

r="allow all from any to any via lo0"
f

for card in $deny_dns_card;
    do
    r="deny udp from  any to any 53 via $card";
    f;
    r="deny tcp from  any to any 53 via $card";
    f;
done


for ftp_ip in $deny_ftp_ip;
    do
    r=" deny all from $ftp_ip to $ftp 20,21";
    f;
    r=" deny all from $ftp 20,21 to $ftp_ip";
    f;
    done

for dc_ip in $deny_dc_ip;
    do
    r=" deny all from $dc_ip to $dc 411";
    f;
    r=" deny all from $dc 411 to $dc_ip";
    f;
    done

for ftp_card in $deny_ftp_card;
    do
    r=" deny all from any to $ftp 20,21 via $ftp_card";
    f;
    r=" deny all from $ftp 20,21 to any via $ftp_card";
    f;
    done

for dc_card in $deny_dc_card;
    do
    r=" deny all from any to $dc 411 via $ftp_card";
    f;
    r=" deny all from $ftp 20,21 to any via $ftp_card";
    f;
    done

for d_nb_card in $deny_netbios_cards;
    do
    r="deny all from any to any 135-139 via $d_nb_card";
    f;
    done

for d_dhcp_card in $d_dhcp_cards;
    do
    r="deny all from any to any 67-68 via $d_dhcp_card"
    f
    done


n=` expr $n + 100 `
r=" deny icmp from any to any in icmptype 5,9,13,14,15,16,17"
f
r="allow all from any to $routerip"
f

#################PIPES ######################
r=" pipe 5 icmp from any to any"
f
r=" allow tcp from any to $ftp limit src-addr 10"
f
r=" pipe 1 all from  any to $ftp 21,20"
f
r=" pipe 1 all from  $ftp 21,20 to any"
f
r=" pipe 2 all from  any to $dc 411"
f
r=" pipe 2 all from  $dc 411 to any"
f

for net in $local_net;
    do
    for net1 in $local_net;
        do
    r=" pipe 4 all from  $net to not $net1" #Internet
    f
    done
done

for net in $local_net;
    do
    for net1 in $local_net;
        do
    r=" pipe 3 all from  $net to $net1" #local
    f
    done
done

r=" deny tcp from any to $routerip in tcpflags syn,fin,!ack"
f
r=" deny tcp from any to $routerip in tcpflags syn,fin,urg,psh,!ack"
f
r=" deny tcp from any to $routerip in tcpflags fin,urg,psh,!ack"
f
r=" allow gre from any to any"
f
r=" allow udp from any to any 500"
f
r=" allow tcp from any to any 1023,1723"
f
r=" allow esp from any to any"
f

for port1 in $allow_ports;
    do
    r=" allow all from any to any $port1";
    f;
    done
for port in $denyports;
    do
    r=" deny all from any to any $port";
    f;
    done
r="allow all from any to any 53"
f
n=` expr $n + 100 `
r="allow all from any to any"
f
r="deny log  all from any to any"
#f
echo "" > /var/log/security


"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено weldpua2008 , 19-Фев-07 15:26 
Это Я ваял правила, что бы можно было легче управлять...

Я единственное не проверял как ограничить скорость на фтп - наверное надо динамические(если не ошибаюсь keep-state) использовать


"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено vladinet , 22-Окт-08 13:56 
>Это Я ваял правила, что бы можно было легче управлять...
>
>Я единственное не проверял как ограничить скорость на фтп - наверное надо
>динамические(если не ошибаюсь keep-state) использовать

а для чего r=" pipe 5 icmp from any to any" в отдельной трубе?


"ipfw pipe + if_bridge ограничивается скорость только на icmp"
Отправлено weldpua2008 , 22-Окт-08 18:44 
>>Это Я ваял правила, что бы можно было легче управлять...
>>
>>Я единственное не проверял как ограничить скорость на фтп - наверное надо
>>динамические(если не ошибаюсь keep-state) использовать
>
>а для чего r=" pipe 5 icmp from any to any" в
>отдельной трубе?

Такие были условия - ограничить протокол