Greetings,
I have been trying to shape my outgoing ssh traffic. I am not trying to
distinguish interactive and bulk traffic. The trouble is that after the initial
logon, even though the ssh rule passes packets(its packet count increases) the
ssh queue does nothing(packet count stays the same.

This is with the 2/24/03 snapshot. It was also failing in the same way with the
2/8 snapshot.

I also tested an http queue/rule combo and that works somewhat.

Shouldn't the packet counts for the rule and corresponding queue be the same?

Here are some examples of pfctl -vs rules and queue:
for ssh:
before logon:
pass out on xl0 inet proto tcp from any to any port = ssh keep state queue ssh 
[ Evaluations: 0         Packets: 0         Bytes: 0           States: 0     ]
queue  ssh bandwidth 76.40Kb priority 7 cbq( borrow ) 
[ pkts:          0  bytes:          0  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

just after logon:
pass out on xl0 inet proto tcp from any to any port = ssh keep state queue ssh 
[ Evaluations: 3         Packets: 46        Bytes: 7174        States: 1     ]
queue  ssh bandwidth 76.40Kb priority 7 cbq( borrow ) 
[ pkts:         21  bytes:       2976  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

about 30 seconds later of activity:
pass out on xl0 inet proto tcp from any to any port = ssh keep state queue ssh 
[ Evaluations: 5         Packets: 238       Bytes: 26502       States: 1     ]
queue  ssh bandwidth 76.40Kb priority 7 cbq( borrow ) 
[ pkts:         21  bytes:       2976  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

http for contrast:
zeroed:
pass out on xl0 inet proto tcp from any to any port = www keep state queue http 
[ Evaluations: 226       Packets: 0         Bytes: 0           States: 0     ]
queue  http bandwidth 229.20Kb priority 0 cbq( borrow ) 
[ pkts:          0  bytes:          0  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

after some traffic:
pass out on xl0 inet proto tcp from any to any port = www keep state queue http 
[ Evaluations: 245       Packets: 18        Bytes: 9444        States: 1     ]
queue  http bandwidth 229.20Kb priority 0 cbq( borrow ) 
[ pkts:         10  bytes:       1203  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

after more traffic:
pass out on xl0 inet proto tcp from any to any port = www keep state queue http 
[ Evaluations: 571       Packets: 409       Bytes: 160147      States: 22    ]
queue  http bandwidth 229.20Kb priority 0 cbq( borrow ) 
[ pkts:        219  bytes:      29015  dropped pkts:      0 bytes:      0 ]
[ qlength:   0/ 50  borrows:      0  suspends:      0 ]

Even though I wonder why the http queue and rule have different packet counts,
I guess it is better that nothing.

My pf.conf:

int = "tx0"
ext = "xl0"

scrub in all

#altq QOS rules

altq on $ext cbq bandwidth 382Kb queue { deflt, ssh, http }
queue deflt bandwidth 95% priority 0 cbq(default ecn)

#an http queue for comparison (and it works)
queue http bandwidth 60% priority 0 cbq(borrow)

#ssh queue attempt without interactive v. bulk
queue ssh bandwidth 20% priority 7 cbq(borrow)

#nat
nat on $ext proto {tcp, udp, icmp} from 10.0.0.0/8 to any -> $ext

# rdr: packets coming in through ext0 with destination 192.168.1.1:1234 will
# be redirected to 10.1.1.1:5678. a state is created for such packets, and
# outgoing packets will be translated as coming from the external address.

rdr on $ext proto {tcp, udp} from any to any port 33333 -> 10.0.0.2 port 22
rdr on $ext proto {tcp, udp} from any to any port 993 -> 10.0.0.2 port 993
rdr on $ext proto {tcp, udp} from any to any port 8000 -> 10.0.0.6 port 80
rdr on $ext proto {tcp, udp} from any to any port 11255 -> 10.0.0.6 port 11255

rdr on $ext proto {tcp, udp} from any to any port 33334 -> 10.0.0.8 port 22
rdr on $ext proto {tcp, udp} from any to any port 3560 -> 10.0.0.8 port 3560

rdr on $ext proto {tcp, udp} from any to any port 27005 -> 10.0.0.7 port 27005
rdr on $ext proto {tcp, udp} from any to any port 27015 -> 10.0.0.7 port 27015
rdr on $ext proto {tcp, udp} from any to any port 80 -> 10.0.0.7 port 80
rdr on $ext proto {tcp, udp} from any to any port 5050 -> 10.0.0.7 port 5050
rdr on $ext proto {tcp, udp} from any to any port 20000 -> 10.0.0.7 port 20000
rdr on $ext proto {tcp, udp} from any to any port 6881:6889 -> 10.0.0.7 port
6881

# pass all packets in and out (these are the implicit first two rules)
pass in all
pass out all

#http for comparison
pass out on $ext inet proto tcp from any to any port 80 keep state queue http

#ssh queue rule
pass out on $ext inet proto tcp from any to any port 22 keep state queue ssh

block in on $ext proto tcp from any to any port = 13
#block in on $ext proto tcp from any to any port = 22
block in on $ext proto tcp from any to any port = 37
block in on $ext proto tcp from any to any port = 53
block in on $ext proto tcp from any to any port = 111
#block in on $ext proto tcp from any to any port = 113
block in on $ext proto tcp from any to any port = 137
block in on $ext proto tcp from any to any port = 138
block in on $ext proto tcp from any to any port = 139
block in on $ext proto tcp from any to any port = 10000

-- 
Have a nice day,
Jeff Strunk
sigfree.utacm.org
siglinux.utacm.org
-- 
Maybe in order to understand mankind, we have to look at the word itself.
Mankind. Basically, it's made up of two separate words---"mank" and "ind".
What do these words mean? It's a mystery, and that's why so is mankind.
                      (Jack Handy)

Reply via email to