OpenBSD PF example

a pf.conf configuration example

external_interface = "{vio0}"
wg_interface = "{wg0}"
allowed_ports_tcp = "{80,443}"
wg_port = "{8152}"
rate_limited_ports = "{3303,4404}"
prometheus_host = "{192.168.1.54}"
node_exporter = "{9100}"

#set skip on { lo wg }
set block-policy return
block log all

# pass wg0 peering
pass on $wg_interface

pass out quick from any to any

table <bruteforce> persist

# only block for 5 min, put
# */5     * * * *    pfctl -t bruteforce -T expire 300
# on roots crontab

block in log quick proto tcp from <bruteforce> to any port $rate_limited_ports

# == pass in inet6
#pass in on egress inet6 proto icmp6 all icmp6-type { echoreq routeradv neighbrsol neighbradv }

## == tcp input
pass in quick proto tcp from any to any port $allowed_ports_tcp

## == udp input
pass in quick on egress proto udp to port $wg_port

## == rate limit
pass log quick proto tcp from any to any port $rate_limited_ports flags S/SA keep state (max-src-conn 10, max-src-conn-rate 10/30, overload <bruteforce> flush global)