3. Cortafuegos: filtrado y túneles

Un cortafuegos permite filtrar tráfico que puede llegar o salir a un computador conectado a una red como Internet.

El siguiente ejemplo muestra parte del archivo /etc/pf.conf para que permita toda conexión que salga de la red privada hacia Internet, y para que bloquee toda conexión que llegue excepto tráfico TCP por los puertos para ssh (22) y dns (53), también permite llegada de tráfico UDP por el puerto 53 y tráfico ICMP (para responder ping). Suponemos que ya se han configurado las variables int_if y ext_if con las interfaces de red interna y externa respectivamente:

servicios_tcp="{ssh,domain}
servicios_udp="{domain}"
servicios_icmp="echoreq"

block in log all
pass out keep state

pass quick on { lo $int_if }
antispoof quick for { lo $int_if }

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

Si tiene un servidor interno (por ejemplo en una DMZ con IP 192.168.2.2) y necesita que este preste servicios visibles al exterior como: web (80), https (443), imaps (993), smtp (25) y ldap (389), deberá establecer un túnel para cada uno de estos puertos, de forma que las conexiones que lleguen al cortafuegos sean redirigidas al servidor interno. El siguiente ejemplo presenta como puede hacerse:

serv_ip="192.168.2.2"
servicios_serv="{ldap,smtp,www,https,imaps, 389}"

match in on $ext_if proto tcp from any to any port www rdr-to $serv_ip port www
match in on $ext_if proto tcp from any to any port https rdr-to $serv_ip port https
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


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

3.1. Referencias y lecturas recomendadas

Las siguientes páginas man: pf(4), pfctl(4).

Guía del usuario de PF [PF].