5. Ejemplo del uso de PF en una DMZ

De las secciones anteriores resultaría un archivo /etc/pf.conf (adaptado de la Guía de PF) como el siguiente:

# Recordar poner net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# en /etc/sysctl.conf 

ext_if="dc1"  # Cambiar por interfaz externa
int_if="dc0"  # Cambiar por interfaz interna

int_ip="192.168.1.1"  # Cambiar por dirección en LAN
ext_ip="200.93.171.42"  # Cambiar por IP pública

# LAN. Segmento de red
lan="192.168.1/24"  

# Servicios que presta cortafuegos
servicios_tcp="{ssh,domain}" 
servicios_udp="{domain}" 
servicios_icmp="echoreq"

# Servidor interno
serv_ip="192.168.2.2"
servicios_serv="{ldap,smtp,www,https,imaps}"


set block-policy return
set loginterface $ext_if

set skip on {lo enc0}
scrub in all

match out on $ext_if from !($ext_if) nat-to ($ext_if:0)

block in log all 
pass out keep state
pass quick on { lo }
antispoof quick for { lo $int_if }

pass in on $int_if proto tcp from $lan to any port ftp
pass out proto tcp from $ext_ip to any port 21

match in on $int_if proto tcp from $lan to any port ftp rdr-to \
	127.0.0.1 port 8021

pass in quick on $int_if

match in on $ext_if proto tcp from any to any port 80 rdr-to \
	$serv_ip port 80
match in on $ext_if proto tcp from any to any port 443 rdr-to \
	$serv_ip port 443
match in on $ext_if proto tcp from any to any port 993 rdr-to \
	$serv_ip port 993
match in on $ext_if proto tcp from any to any port smtp rdr-to \
	$serv_ip port smtp
match in on $ext_if proto tcp from any to any port 389 rdr-to \
	$serv_ip port 389 

match in on $ext_if proto tcp from any to any port 10022 rdr-to \
	$serv_ip port 22
pass on $ext_if proto tcp from any to any port 10022 

match in on $ext_if proto tcp from any to any port 10465 rdr-to \
	$serv_ip port 465
pass on $ext_if proto tcp from any to any port 10465 


pass in on $ext_if inet proto tcp from any to ($ext_if) \
	port $servicios_tcp keep state
pass in on $ext_if inet proto udp from any to ($ext_if) \
	port $servicios_udp keep state
pass in inet proto icmp all icmp-type $servicios_icmp keep state

pass in on $ext_if proto tcp from any to $serv_ip port $servicios_serv \
	flags S/SA synproxy state

5.1. Referencias y lecturas recomendadas

Guía del usuario de PF [PF].