ext_if="rl0" int_if="xl0" tcp_services="{ 21, 22, 25, 53, 80, 110, 113, 143, 220, 993, 995 }" icmp_types="echoreq" # options set block-policy drop set require-order yes set fingerprints "/etc/pf.os" set loginterface $ext_if set limit { states 10000, frags 10000 } # ignore local loopback set skip on lo # scrub scrub in all # nat nat on $ext_if from !($ext_if) to any -> ($ext_if:0) # Redirection (rdr) for forwarding from external IP to internal IP rdr pass on $ext_if inet proto {udp tcp} from any to any port 3389 -> 192.168.1.100 port 3389 rdr pass on $ext_if inet proto tcp from any to any port 54321 -> 192.168.1.251 port 22 # Default block rule for passing traffic on all attached interface block in log all block out log all # Pass internal traffic freely pass on $int_if all # Pass external traffic with rules pass out keep state # Allow TCP/UDP services to the box via port # pass in on $ext_if inet proto {udp tcp} from any to $ext_if \ port $tcp_services flags S/SA keep state # Allow high TCP Ports for FTP pass in on $ext_if inet proto tcp from any to $ext_if \ port > 49151 flags S/SA modulate state # Allow ICMP basic network packets pass in inet proto icmp all icmp-type $icmp_types keep state # check for incoming sp00f antispoof for rl0 inet