ok, turns out i needed to allow udp in on ports 33434-33525.
in case anyone ever does a search for ipf on these forums, here's my full, working ipf.conf
### rtk0 in ###
block in log level auth.info on rtk0 from any to any head 1
# ip ranges we dont want
block in quick from 0.0.0.0/8 to any group 1
block in quick from 10.0.0.0/8 to any group 1
block in quick from 224.0.0.0/3 to any group 1
block in quick from 127.0.0.0/8 to any group 1
block in quick from 172.16.0.0/12 to any group 1
block in quick from 20.20.20.0/24 to any group 1
block in quick from 169.254.0.0/16 to any group 1
block in quick from 204.152.64.0/23 to any group 1
# oddness, alert!
block in log level auth.alert quick from 192.168.0.0/24 to any group 1
block in log level auth.alert quick from any to 192.168.0.0/16 group 1
# if tcp, tell them there's no service running, instead of playing dead
block return-rst in log level auth.info proto tcp from any to any group 1
# let people ping us, and traceroute us
pass in log level auth.info quick proto icmp from any to any icmp-type 3 group 1
pass in log level auth.info quick proto icmp from any to any icmp-type 8 group 1
pass in log level auth.info quick proto icmp from any to any icmp-type 11 group 1
pass in log level auth.info quick proto udp from any to any port 33434 >< 33525 keep state keep frags group 1
## services
# log all, except 80
# www - dont log it, access_log and error_log are good enough for me
# domain/udp, domain/tcp, mail, ssh.
pass in quick proto tcp from any to any port = 80 flags S keep state keep frags group 1
pass in log level auth.info quick proto udp from any to any port = 53 keep state keep frags group 1
pass in log level auth.info quick proto tcp from any to any port = 53 flags S keep state keep frags group 1
pass in log level auth.info quick proto tcp from any to any port = 25 flags S keep state keep frags group 1
pass in log level auth.info quick proto tcp from any to any port = 22 flags S keep state keep frags group 1
### end rtk0 in ###
### rtk0 out ###
# let it all hang out!
pass out on rtk0 from any to any head 2
# except for these - oddness, log it
block out log level auth.alert quick from any to 0.0.0.0/8 group 2
block out log level auth.alert quick from any to 10.0.0.0/8 group 2
block out log level auth.alert quick from any to 224.0.0.0/3 group 2
block out log level auth.alert quick from any to 127.0.0.0/8 group 2
block out log level auth.alert quick from any to 172.16.0.0/12 group 2
block out log level auth.alert quick from any to 20.20.20.0/24 group 2
block out log level auth.alert quick from any to 192.168.0.0/16 group 2
block out log level auth.alert quick from any to 169.254.0.0/16 group 2
block out log level auth.alert quick from any to 204.152.64.0/23 group 2
# anything we initiate, keep state in case it needs to get back in
pass out quick proto tcp from any to any flags S keep state keep frags group 2
pass out quick proto udp from any to any keep state keep frags group 2
pass out quick proto icmp from any to any keep state keep frags group 2
### end rtk0 out ###
edit:
just did a little test for fun, this ruleset caused a 1.7% decrease in the number of packets transmitted during a few-minute long ping flood, and increased average latency by 2/1000th of a millisecond (2 nanoseconds? is a ms/1000 == 1ns?)
