ext_if="nfe0"
int_if="dc0"
icmp_types="echoreq"
ssh_allowed="{ 172.16.11.27, 172.16.11.25, 172.16.10.1 }"
mail_server="{ 210.4.62.2, 210.4.62.1 }"
# options
set block-policy return
set loginterface $ext_if
set limit frags 10000
set limit src-nodes 30000
set limit states 30000
set skip on lo
# scrub
scrub in
# nat/rdr
nat on $ext_if from !($ext_if) -> ($ext_if:0)
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $int_if proto tcp to port ftp -> 127.0.0.1 port 8021
# filter rules
block in
pass quick on $int_if
pass out keep state
anchor "ftp-proxy/*"
antispoof quick for { lo $int_if }
pass in on $ext_if inet proto tcp from any to ($ext_if) \
port 113 flags S/SA keep state
pass in quick on { $ext_if, $int_if } proto tcp from $ssh_allowed to any port 33 keep state
pass in inet proto icmp all icmp-type $icmp_types keep state
block out on { $int_if $ext_if } proto tcp from any to any port smtp
pass out on { $int_if $ext_if } proto tcp from any to $mail_server port smtp
block out on { $int_if $ext_if } proto tcp from any to any port { 135, 137, 138, 139 }
anchor "ftp-proxy/*"
pass out proto tcp from any to any port 21 keep state