2012/05/18

Firewall PF

Introduccion:

Requerimientos:
* Conexion a Internet
* FreeBSD instalado
* Leer este manual

Diagrama:

ISP---(ext_if)-[FreeBSD]-(int_if)---Switch---LAN
                                   \
                                    '-(dmz_if)

El proceso:

Hacer que PF se cargue con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar las lineas

# Activamos OpenBSD Packet Filter (PF)
pf_enable="YES"                     # Enable PF (load module if required)
pf_rules="/etc/pf.conf"             # rules definition file for pf
pf_flags=""                                # additional flags for pfctl startup
pflog_enable="YES"                 # start pflogd(8)
pflog_logfile="/var/log/pflog"   # where pflogd should store the logfile
pflog_flags=""                           # additional flags for pflogd startup
gateway_enable="YES"            # Enable as LAN gateway (PF)

Crear el archivo con las politicas usando el de ejemplo

# cp /usr/share/examples/pf/pf.conf /etc

Editelo y ajuste las macros de red

# edit /etc/pf.conf

Debe quedar similar a este

# egrep -v '#|^ *$' /etc/pf.conf
ext_if="bge0"
int_if="bge1"
table <spamd-white> persist
set skip on lo
scrub in
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $int_if proto tcp to port ftp -> 127.0.0.1 port 8021
no rdr on $ext_if proto tcp from <spamd-white> to any port smtp
rdr pass on $ext_if proto tcp from any to any port smtp \
        -> 127.0.0.1 port spamd
anchor "ftp-proxy/*"
block in
pass out
pass quick on $int_if no state
antispoof quick for { lo $int_if }
pass in on $ext_if proto tcp to ($ext_if) port ssh
pass in log on $ext_if proto tcp to ($ext_if) port smtp
pass out log on $ext_if proto tcp from ($ext_if) to port smtp
pass in on $ext_if inet proto icmp from any to ($ext_if) icmp-type { unreach, redir, timex }

Nota:
Al final de este manual esta el link para descargar un pf.conf muy completo

Cargar el modulo PF

# /etc/rc.d/pf start

Los comandos basicos son:

Verifica el archivo sin aplicar las reglas

# pfctl -nf /etc/pf.conf

Verifica el archivo y muestra como si aplicara las reglas sin hacerlo

# pfctl -nvf /etc/pf.conf

Cargar las reglas

# pfctl -f /etc/pf.conf

Muestra las reglas actuales de filtrado

# pfctl -sr

Muestra las reglas actuales de nat

# pfctl -sn

Recuerde que si hace cambios en /etc/pf.conf debe recargar PF

# pfctl -f /etc/pf.conf

Si quiere aqui estan los archivos de configuracion:
Google Drive