Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
org
Índice de contenido
1.Licencia (BSD)..................................................................................................................................2
2.Introducción.......................................................................................................................................2
3.Que es un Firewall?...........................................................................................................................2
4.Que es packet filter?..........................................................................................................................3
5.Configuración previa.........................................................................................................................3
5.1.Definir las políticas....................................................................................................................3
5.2.Configuración de las interfaces de red.......................................................................................3
5.3.Habilitar el reenvío de paquetes.................................................................................................4
5.4.Configurar el gateway por defecto.............................................................................................4
5.5.Verificar el DNS.........................................................................................................................5
5.6.Habilitar el PF............................................................................................................................5
5.7.Chequeos de conectividad.........................................................................................................5
6.Ejemplos de firewalls........................................................................................................................6
6.1.Gateway sin restricciones..........................................................................................................6
a.Planteamiento del problema.................................................................................................6
b.Análisis.................................................................................................................................7
c.Solución PASS by default....................................................................................................7
d.Solución BLOCK by default................................................................................................9
6.2.LAN-WAN con restricciones básicas......................................................................................11
a.Planteamiento del problema...............................................................................................11
b.Analisis...............................................................................................................................12
c.Solución PASS by default..................................................................................................12
d.Solución BLOCK by default .............................................................................................14
6.3.LAN-WAN con DMZ..............................................................................................................16
a.Planteamiento del problema...............................................................................................17
b.Análisis...............................................................................................................................17
c.Solución PASS by default..................................................................................................18
d.Solución BLOCK by default..............................................................................................20
7.CONCLUSIONES...........................................................................................................................23
8.Enlaces relacionados.......................................................................................................................23
________________________________________________________________________________
1/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
1. Licencia (BSD)
Copyright (c) 2009, Fernando Quintero,
2. Introducción
En este documento se explicará la forma de crear un firewall basado en Packet Filter (en adelante
PF), para esto se presentarán escenarios básicos que ejemplifiquen como proceder desde el
principio. También se tendrán en cuenta las políticas por defecto que se usarán para la creación de
los mismos:
● PASS BY DEFAULT – ACEPTAR POR OMISIÓN
● BLOCK BY DEFAULT – DENEGAR POR OMISIÓN
Se recomienda leer el documento llamado “¿Como funciona PF?” que se puede encontrar en el sitio
de OpenBSD Colombia1.
Espero que este documento les sea de utilidad y como siempre, cualquier duda o comentario lo
trataremos por la lista de correo.
3. Que es un Firewall?
Un “cortafuegos” (o firewall en inglés) es un elemento de hardware o software que se utiliza en una
red de computadoras para controlar las comunicaciones, permitiéndolas o prohibiéndolas según las
políticas de red que haya definido la organización responsable de la red. Su modo de funcionar es
indicado por la recomendación RFC 2979, que define las características de comportamiento y
requerimientos de interoperabilidad. La ubicación habitual de un cortafuegos es el punto de
conexión de la red interna de la organización con la red exterior, que normalmente es Internet; de
este modo se protege la red interna de intentos de acceso no autorizados desde Internet, que puedan
aprovechar vulnerabilidades de los sistemas de la red interna.”2
1 http://groups.google.com/group/OpenBSD-Colombia?hl=es
2 http://es.wikipedia.org/wiki/Cortafuegos_(inform%C3%A1tica)
________________________________________________________________________________
3.Que es un Firewall? 2/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
5. Configuración previa
Como fase previa a la implantación del firewall se seguirán unos pasos importantes para garantizar
que todo funcione como se espera. Por favor, se deben siguir estos pasos en orden y uno a uno, así
se evitarán contratiempos en el futuro.
3 http://www.openbsd.org/faq/pf/index.html
4 http://www.benzedrine.cx/dhartmei.html
5 http://www.openbsd.org/cgi-bin/man.cgi?query=pf&sektion=4&manpath=OpenBSD+4.4
________________________________________________________________________________
5.Configuración previa 3/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
TARJETA WAN:
bash-3.2#
cat
hostname.rl0
inet
192.168.0.5
255.255.255.0
TARJETA LAN:
bash-3.2#
cat
hostname.sis0
inet
10.0.0.1
255.255.255.0
TARJETA DMZ:
bash-3.2#
cat
hostname.rl1
inet
172.16.0.1
255.255.255.0
No hay nada de misterio en esto, se editan los archivos y se definen las IPs con las que se va a
trabajar. En este ejemplo se asume que la WAN esta conectada por un enlace ETHERNET, pero
recuerde que su conexión puede estar por PPPoE 7 o puede ser un enlace WAN de otro tipo.
Verifique el tipo de conexión que tiene en la WAN antes de proceder con los pasos siguientes.
bash-3.2# cat /etc/sysctl.conf | grep “net.inet.ip.forwarding”
net.inet.ip.forwarding=1 # 1=Permit forwarding (routing) of IPv4 packets
Si se quiere hacer el cambio de forma temporal y no definitiva entonces se hace desde la línea de
comandos:
bash-3.2#
sysctl
-w
net.inet.ip.forwarding=1
6 http://www.openbsd.org/faq/faq6.html#Setup
7 http://www.openbsderos.org/wiki/index.php?title=PPPoE_in-kernel
________________________________________________________________________________
5.Configuración previa 4/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
La IP 192.68.0.100 representa el router que provee la salida a Internet (recuerde que esto es un
escenario diseñado para la creación del manual, posiblemente su ruta por defecto sea una IP pública
o privada pero en el rango del ISP).
5.6. Habilitar el PF
En este paso se va a habilitar el servicio de filtrado en OpenBSD, esto se hace modificando el
archivo /etc/rc.conf.local.
bash-3.2#
cat
/etc/rc.conf.local
#!/bin/sh
-
#
#
$OpenBSD:
rc.conf,v
1.128
2008/01/31
14:18:03
reyk
Exp
$
#
use
-u
to
disable
chroot,
see
httpd(8)
#httpd_flags=""
#
for
normal
use:
""
(or
"-DSSL"
after
reading
pf=YES
bash-3.2#
Como se puede ver en el ejemplo solo se agrega o modifica la variable pf para que sea igual a YES.
Puede leer estos dos manuales para comprender este paso:
http://www.openbsd.org/faq/pf/config.html
http://www.openbsderos.org/wiki/index.php?title=OpenBSD_%2B_PF
Una vez configurada esta variable se debe reiniciar el firewall para que los cambios tengan efecto y
el PF habilite un dispositivo de logueo (pflog0) durante el arranque, este permitirá hacer debugging
de errores durante la configuración del firewall.
bash-3.2# reboot
________________________________________________________________________________
5.Configuración previa 5/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
bash-3.2#
ping
www.google.com
PING
www.l.google.com
(209.85.165.147):
56
data
bytes
64
bytes
from
209.85.165.147:
icmp_seq=0
ttl=237
time=95.024
ms
---
www.l.google.com
ping
statistics
---
1
packets
transmitted,
1
packets
received,
0.0%
packet
loss
round-trip
min/avg/max/std-dev
=
95.024/95.024/95.024/0.000
ms
bash-3.2#
Si en este punto todo esta bien, puede procederse a crear el conjunto de reglas.
6. Ejemplos de firewalls
Se construirán tres firewalls típicos, usando políticas PASS y BLOCK por defecto:
● Gateway (2 tarjetas de red)
● LAN y WAN (2 tarjetas de red)
● LAN, DMZ y WAN (3 tarjetas de red)
Por favor haga muchas pruebas antes de concluir que PF no es lo suyo, realmente la sintaxis de PF
es la mas simple que he conocido, sin embargo el proceso de aprendizaje en la construcción de
reglas toma un tiempo, no se desespere y haga pruebas y mas pruebas. Recuerde que tiene
comunidades de Software Libre que le pueden ayudar.
________________________________________________________________________________
6.Ejemplos de firewalls 6/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
b. Análisis
Para solucionar este ejercicio se debe habilitar el paso de paquetes por la interfaz sis0 y al mismo
tiempo hacer NAT en la interfaz de salida, con el fin de que los paquetes que quieran salir se
enmascaren y puedan regresar, para los que sepan un poco de Linux se trata del enmascaramiento
que se hace en la cadena POSTROUTING cuando salen los paquetes.
#Definicion
de
interfaces,
con
macros
para
usar
palabras
mas
nemotecnicas
externa="rl0"
interna="sis0"
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
ataques
#de
fragmentación
y
similares.
scrub
in
all
scrub
out
all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
#y
vayan
para
cualquier
#lugar.
nat on $externa inet from !($externa) to any -> ($externa)
#La
politica
de
acceso
por
defecto,
acepte
todo,
sin
embargo
no
es
necesario
poner
estas
dos
#reglas
por
que
PF
por
omisión
lo
tomará
así.
Lo
dejo
como
algo
ilustrativo.
pass
in
keep
state
________________________________________________________________________________
6.Ejemplos de firewalls 7/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
pass out keep state
#Bloquee
todo
lo
que
intente
entrar
por
la
WAN
block
in
quick
on
$externa
Una vez creado el archivo se debe grabar, observe que las reglas de NAT deben ir antes de las reglas
de filtrado, esto es requisito para que PF considere correcto el archivo de configuración.
Se usarán varias opciones del comando pfctl para verificar el funcionamiento del firewall.
Verificando que las reglas estén bien escritas:
bash-3.2# pfctl -nf /etc/pf.conf
Si este comando NO produce errores, entonces se procede a recargar la configuración del firewall:
bash-3.2# pfctl -f /etc/pf.conf
bash-3.2#
pfctl
-sr
scrub
in
all
fragment
reassemble
scrub
out
all
fragment
reassemble
pass
in
all
flags
S/SA
keep
state
pass
out
all
flags
S/SA
keep
state
block
drop
in
quick
on
rl0
all
Reglas de NAT:
bash-3.2#
pfctl
-sn
nat
on
rl0
from
!
(rl0)
to
any
->
(rl0)
round-robin
bash-3.2#
Las reglas pueden aparecer con mas o menos información, pero en general deben ser las mismas
reglas que definimos en el archivo.
Una vez recargado el firewall se procede a realizar pruebas desde la LAN hacia la WAN y desde la
WAN al firewall, por ejemplo haciendo un nmap desde la WAN:
________________________________________________________________________________
6.Ejemplos de firewalls 8/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
nonroot$
nmap
192.168.0.5
Starting
Nmap
4.76
(
http://nmap.org
)
at
2009-03-19
19:59
COT
Note:
Host
seems
down.
If
it
is
really
up,
but
blocking
our
ping
probes,
try
-PN
Nmap
done:
1
IP
address
(0
hosts
up)
scanned
in
2.10
seconds
ahhhh, como la política es aceptar por defecto, entonces todo el tráfico desde la LAN estará
permitido, por lo que crear una regla adicional no es necesario ;).
No sobra decir que se debe tener habilitado el servidor SSH escuchando en la interfaz sis0.
bash-3.2# cat /etc/pf.conf
#
$OpenBSD:
pf.conf,v
1.35
2008/02/29
17:04:55
reyk
Exp
$
#
#
See
pf.conf(5)
and
/usr/share/pf
for
syntax
and
examples.
#
Remember
to
set
net.inet.ip.forwarding=1
and/or
net.inet6.ip6.forwarding=1
#
in
/etc/sysctl.conf
if
packets
are
to
be
forwarded
between
interfaces.
#Definicion
de
interfaces,
con
macros
para
usar
palabras
mas
nemotecnicas
externa="rl0"
interna="sis0"
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
ataques
#de
fragmentación
y
similares.
________________________________________________________________________________
6.Ejemplos de firewalls 9/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
scrub
in
all
scrub
out
all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
y
#vayan
para
cualquier
#lugar.
nat
on
$externa
inet
from
!($externa)
to
any
->
($externa)
#La
politica
de
acceso
por
defecto,
bloquee
todo
en
cualquier
dirección
block
in
all
block
out
all
#Se
habilita
la
entrada
de
paquetes
desde
la
LAN
hacia
cualquier
destino
pass
in
log
quick
on
$interna
from
10.0.0.0/24
to
any
#Se
habilita
la
salida
de
paquetes
para
la
interfaz
WAN,
es
necesario
porque
de
lo
contrario
los
#paquetes
solo
llegan
hasta
la
interfaz
interna
y
no
se
les
permite
el
#paso
aunque
se
haga
NAT.
pass
out
log
quick
on
$externa
from
any
to
any
Observe que en el ejemplo se agrega una palabra mágica “log”, esta palabra lo que hace es loguear
cada paquete que coincida (match), de esta forma se puede verificar si los paquetes están pasando o
no por las interfaces. Para verificar esto se usa la interfaz que el PF crea durante el arranque en
conjunto con la utilidad tcpdump que viene por defecto en el sistema.
bash-3.2# tcpdump -e -n -ttt -i pflog0
tcpdump: listening on pflog0, link-type PFLOG
Mar 19 17:13:16.583078 rule 3/(match) pass in on sis0: 10.0.0.2 > 192.168.0.100: icmp: echo request (DF)
Mar 19 17:13:16.583199 rule 4/(match) pass out on rl0: 192.168.0.5 > 192.168.0.100: icmp: echo request (DF)
Mar 19 17:13:31.891655 rule 3/(match) pass in on sis0: 10.0.0.2 > 192.168.0.100: icmp: echo request (DF)
Mar 19 17:13:31.891781 rule 4/(match) pass out on rl0: 192.168.0.5 > 192.168.0.100: icmp: echo request (DF)
Mar 19 17:13:38.482841 rule 3/(match) pass in on sis0: 10.0.0.2.56030 > 192.168.0.100.53:[|domain] (DF)
Mar 19 17:13:38.482965 rule 4/(match) pass out on rl0: 192.168.0.5.61275 > 192.168.0.100.53:[|domain] (DF)
Mar 19 17:13:38.485611 rule 3/(match) pass in on sis0: 10.0.0.2 > 209.85.165.104: icmp: echo request (DF)
Mar 19 17:13:38.485645 rule 4/(match) pass out on rl0: 192.168.0.5 > 209.85.165.104: icmp: echo request (DF)
Mar 19 17:13:38.596109 rule 3/(match) pass in on sis0: 10.0.0.2.38059 > 192.168.0.100.53:[|domain] (DF)
Mar 19 17:13:38.596137 rule 4/(match) pass out on rl0: 192.168.0.5.52771 > 192.168.0.100.53:[|domain] (DF)
Se ve que las reglas hacen match en orden, primero la de entrada en la interfaz interna y luego en la de salida
Esta captura es el resultado de un ping que se hace desde una maquina interna 10.0.0.2 al gateway
________________________________________________________________________________
6.Ejemplos de firewalls 10/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
________________________________________________________________________________
6.Ejemplos de firewalls 11/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
b. Análisis
Para resolver este problema se deben conocer los puertos que usan los servicios que nos piden,
entonces tenemos:
Servidor web: 443 (https), 80 (http)
Servidor de correo: 25 (smtp), 993 (imap seguro), 995 (pop3 seguro), 110 (pop3), 143 (imap)
Planta telefónica VoIP: 5060 udp (señalización sip) + 10000 al 20000 para RTP (la voz)
Los puertos para correo y web son TCP, los de la planta VoIP son UDP.
Para filtrar el acceso al MSN: podemos usar el puerto por omisión: tcp 1863.
Muchos pensarán que esto NO es suficiente para bloquear el MSN, pero entonces vamos a
pretender que SI es suficiente, de lo contrario que lo demuestre con un documento en español y lo
envíe a la lista :P, recuerden que es un ejemplo, cuyo único propósito es aprender PF.
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
________________________________________________________________________________
6.Ejemplos de firewalls 12/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
ataques
#de
fragmentación
y
similares.
scrub
in
all
scrub
out
all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
y
#vayan
para
cualquier
#lugar.
nat
on
$externa
inet
from
!($externa)
to
any
->
($externa)
#Redireccionando
los
puertos
al
servidor
de
correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
25
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
110
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
143
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
993
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
995
->
$servidor_correo
#Redireccionando
los
puertos
al
servidor
web
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
80
->
$servidor_web
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
443
->
$servidor_web
#Redireccionando
los
puertos
a
la
planta
IP,
observe
que
estos
son
UDP
rdr
log
on
$externa
proto
udp
from
any
to
($externa)
port
5060
->
$servidor_voip
rdr
log
on
$externa
proto
udp
from
any
to
($externa)
port
10000:20000
->
$servidor_voip
#La
politica
de
acceso
por
defecto,
acepte
todo,
sin
embargo
no
es
necesario
poner
estas
dos
#reglas
por
que
PF
por
omisión
lo
tomará
así.
Lo
dejo
como
algo
ilustrativo.
pass
in
keep
state
pass
out
keep
state
#Acepte
conexiones
desde
la
WAN
a
los
puertos
a
redireccionar
y
al
puerto
22
local
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
($externa)
port
22
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_web
port
80
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_web
port
443
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
25
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
110
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
143
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
993
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
995
pass
in
log
quick
on
$externa
proto
udp
from
any
to
$servidor_voip
port
5060
pass
in
log
quick
on
$externa
proto
udp
from
any
to
$servidor_voip
port
10000:20000
________________________________________________________________________________
6.Ejemplos de firewalls 13/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
#No
permita
el
paso
de
las
conexiones
del
MSN
provenientes
desde
la
LAN
block
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
any
port
1863
#Bloquee
todo
el
resto
de
peticiones
que
intenten
entrar
por
la
WAN
block
in
quick
on
$externa
#Redireccionando
los
puertos
al
servidor
de
correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
110
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
143
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
993
->
$servidor_correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
995
->
$servidor_correo
________________________________________________________________________________
6.Ejemplos de firewalls 14/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
servidor_correo=”10.0.0.3”
servidor_voip=”10.0.0.4”
puerto_msn
=
“1863”
puertos_correo=”{25
110
143
993
995}”
puertos_web=”{
80
443
}”
puertos_voip=”{
5060
10000:20000
}”
red_lan=”10.0.0.0/24”
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
#ataques
de
fragmentación
y
similares.
scrub
in
all
scrub
out
all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
y
#vayan
para
cualquier
#lugar.
nat
on
$externa
inet
from
!($externa)
to
any
->
($externa)
#Redireccionando
los
puertos
al
servidor
de
correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
$puertos_correo
->
$servidor_correo
#Redireccionando
los
puertos
al
servidor
web
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
$puertos_web
->
$servidor_web
#Redireccionando
los
puertos
a
la
planta
IP,
observe
que
estos
son
UDP
rdr
log
on
$externa
proto
udp
from
any
to
($externa)
port
$puertos_voip
->
$servidor_voip
#La
politica
de
acceso
por
defecto,
bloquee
todo
block
in
all
block
out
all
#Acepte
conexiones
desde
la
WAN
al
puerto
SSH
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
($externa)
port
22
pass
out
log
quick
on
$externa
proto
tcp
from
any
to
any
port
22
#Acepte el paso de las conexiones entrantes por la WAN
________________________________________________________________________________
6.Ejemplos de firewalls 15/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
#Para
puertos
de
correo
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
$puertos_correo
#Para
puertos
web
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_web
port
$puertos_web
#para
puertos
VoIP
pass
in
log
quick
on
$externa
proto
udp
from
any
to
$servidor_voip
port
$puertos_voip
#Permita
el
acceso
de
salida
en
la
interfaz
interna,
puesto
que
habilitamos
la
entrada
en
la
WAN,
#debemos
garantizar
la
salida
en
la
LAN,
recuerden
las
reglas
(1)
y
(2)
en
#el
manual
de
como
#funciona
PF.
pass
out
log
quick
on
$interna
from
any
to
$servidor_web
pass
out
log
quick
on
$interna
from
any
to
$servidor_correo
pass
out
log
quick
on
$interna
from
any
to
$servidor_voip
#No
permita
el
paso
de
las
conexiones
del
MSN
provenientes
desde
la
LAN
block
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
any
port
1863
#Permita
el
resto
de
conexiones
desde
la
LAN,
observe
que
siempre
se
aplican
las
reglas
por
#parejas,
en
una
interfaz
dejo
entrar
los
paquetes
y
en
la
otra
los
dejo
#salir.
pass
in
log
quick
on
$interna
from
$red_lan
to
any
pass
out
log
quick
on
$externa
from
any
to
any
bash-3.2# pfctl -f /etc/pf.conf
8 http://es.wikipedia.org/wiki/DMZ
________________________________________________________________________________
6.Ejemplos de firewalls 16/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
b. Análisis
Para trabajar en este firewall se debe usar la experiencia obtenida en la implementación de los
ejercicios anteriores. Se diseñará bloqueando los accesos en las interfaces correspondientes, en las
reglas de entrada (in) y se le dará paso por la interfaz donde vaya a salir, en las reglas de salida
(out).
Los puertos de este ejercicio son los mismos con los que se trabajó en el ejercicio anterior, excepto
por el puerto del servidor MySQL que es el 3306 tcp y el puerto del servicio DNS que puede ser
udp o tcp y es el 53.
________________________________________________________________________________
6.Ejemplos de firewalls 17/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
También se piden reglas relacionadas los pings, que son paquetes icmp.
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
ataques
#de
fragmentación
y
similares.
scrub
in
all
scrub
out
all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
y
#vayan
para
cualquier
#lugar.
nat
on
$externa
inet
from
!($externa)
to
any
->
($externa)
#Redireccionando los puertos al servidor de correo
________________________________________________________________________________
6.Ejemplos de firewalls 18/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
rdr log on $externa proto tcp from any to ($externa) port $puertos_correo -> $servidor_correo
#Redireccionando
los
puertos
al
servidor
web
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
$puertos_web
->
$servidor_web
#Redireccionando
los
puertos
a
la
planta
IP,
observe
que
estos
son
UDP
rdr
log
on
$externa
proto
udp
from
any
to
($externa)
port
$puertos_voip
->
$servidor_voip
#La
politica
de
acceso
por
defecto,
acepte
todo,
sin
embargo
no
es
necesario
poner
estas
dos
#reglas
por
que
PF
por
omisión
lo
tomará
así.
Lo
dejo
como
algo
ilustrativo.
pass
in
keep
state
pass
out
keep
state
#Acepte
conexiones
externas
al
servidor
SSH
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
($externa)
port
22
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
($interna)
port
22
#Acepte
conexiones
externas
a
los
diferentes
servidores
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_web
port
$puertos_web
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
$puertos_correo
pass
in
log
quick
on
$externa
proto
udp
from
any
to
$servidor_voip
port
$puertos_voip
#Acepte
solo
conexiones
HTTP
y
HTTPS
de
la
LAN
a
la
WAN
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
any
port
$puertos_web
#Acepte
solo
conexiones
de
la
LAN
para
la
DMZ
a
los
puertos
de
correo
y
web
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
$servidor_web
port
$puertos_web
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
$servidor_correo
port
$puertos_correo
#Permita
el
paso
desde
los
servidores
de
la
DMZ
al
servidor
MySQL
pass
in
log
quick
on
$dmz
proto
tcp
from
$red_dmz
to
$servidor_mysql
port
$puerto_mysql
#El
paso
de
tráfico
PING
es
permitido
entre
todas
las
interfaces
pass
in
log
quick
on
$interna
proto
icmp
from
any
to
any
pass
in
log
quick
on
$dmz
proto
icmp
from
any
to
any
#El
paso
de
tráfico
DNS
es
permitido
entre
todas
las
interfaces
pass
in
log
quick
on
$interna
proto
tcp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$interna
proto
udp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$dmz
proto
tcp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$dmz
proto
udp
from
any
to
any
port
$puerto_dns
#Bloquee todo el resto de peticiones que intenten entrar por las interfaces
________________________________________________________________________________
6.Ejemplos de firewalls 19/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
block
in
quick
on
$externa
block
in
quick
on
$dmz
block
in
quick
on
$interna
En este firewall se bloquea al final todos los paquetes que entran en las interfaces para hacerlo mas
seguro, con eso estamos garantizando que solo el tráfico especificado es el que tiene acceso:
DNS, ICMP, WEB ,CORREO y MySQL.
externa="rl0"
interna="sis0"
dmz=”rl1”
servidor_web=”172.16.0.2”
servidor_correo=”172.16.0.3”
servidor_voip=”10.0.0.4”
servidor_mysql=”10.0.0.3”
red_lan=”10.0.0.0/24”
red_dmz=”172.16.0.0/24”
puerto_dns
=
“53”
puerto_mysql=”3306”
puertos_correo=”{
25
110
143
993
995
}”
puertos_web=”{
80
443
}”
puertos_voip=”{
5060
10000:20000
}”
#Esta
regla
es
para
que
no
se
apliquen
filtros
en
la
interfaz
loopback
=
127.0.0.1
=
lo
set
skip
on
lo
#El
scrub
organiza
paquetes
de
entrada
y
de
salida,
es
recomendable
tenerlo
para
evitar
ataques
#de
fragmentación
y
similares.
scrub
in
all
________________________________________________________________________________
6.Ejemplos de firewalls 20/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
scrub out all
#Aqui
se
hace
el
enmascaramiento,
la
regla
dice:
haga
NAT
en
la
interfaz
externa
(rl0)
siempre
y
#cuando
los
paquetes
vengan
desde
una
red
que
no
sea
la
externa
y
#vayan
para
cualquier
#lugar.
nat
on
$externa
inet
from
!($externa)
to
any
->
($externa)
#Redireccionando
los
puertos
al
servidor
de
correo
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
$puertos_correo
->
$servidor_correo
#Redireccionando
los
puertos
al
servidor
web
rdr
log
on
$externa
proto
tcp
from
any
to
($externa)
port
$puertos_web
->
$servidor_web
#Redireccionando
los
puertos
a
la
planta
IP,
observe
que
estos
son
UDP
rdr
log
on
$externa
proto
udp
from
any
to
($externa)
port
$puertos_voip
->
$servidor_voip
#La
politica
de
acceso
por
defecto
bloquee
todo
block
in
all
block
out
all
#Acepte
conexiones
externas
al
servidor
SSH
regla
IN
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
($externa)
port
22
pass
in
log
quick
on
$interna
proto
tcp
from
any
to
($interna)
port
22
#Acepte
conexiones
externas
al
servidor
SSH
regla
OUT
pass
out
log
quick
on
$externa
proto
tcp
from
any
to
any
port
22
pass
out
log
quick
on
$interna
proto
tcp
from
any
to
any
port
22
#Acepte
conexiones
externas
a
los
diferentes
servidores
reglas
IN
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_web
port
$puertos_web
pass
in
log
quick
on
$externa
proto
tcp
from
any
to
$servidor_correo
port
$puertos_correo
pass
in
log
quick
on
$externa
proto
udp
from
any
to
$servidor_voip
port
$puertos_voip
#Acepte
conexiones
externas
a
los
diferentes
servidores
reglas
OUT
pass
out
log
quick
on
$interna
proto
udp
from
any
to
$servidor_voip
port
$puertos_voip
________________________________________________________________________________
6.Ejemplos de firewalls 21/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
#Acepte
solo
conexiones
HTTP
y
HTTPS
de
la
LAN
a
la
WAN
reglas
IN
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
any
port
$puertos_web
#Acepte
solo
conexiones
HTTP
y
HTTPS
de
la
LAN
a
la
WAN
reglas
OUT
pass
out
log
quick
on
$externa
proto
tcp
from
any
to
any
port
$puertos_web
#Acepte
solo
conexiones
de
la
LAN
para
la
DMZ
a
los
puertos
de
correo
y
web
reglas
IN
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
$servidor_web
port
$puertos_web
pass
in
log
quick
on
$interna
proto
tcp
from
$red_lan
to
$servidor_correo
port
$puertos_correo
#Acepte
solo
conexiones
de
la
LAN
para
la
DMZ
a
los
puertos
de
correo
y
web
reglas
OUT
pass
out
log
quick
on
$dmz
proto
tcp
from
any
to
$servidor_web
port
$puertos_web
pass
out
log
quick
on
$dmz
proto
tcp
from
any
to
$servidor_correo
port
$puertos_correo
#Permita
el
paso
desde
los
servidores
de
la
DMZ
al
servidor
MySQL
regla
IN
pass
in
log
quick
on
$dmz
proto
tcp
from
$red_dmz
to
$servidor_mysql
port
$puerto_mysql
#Permita
el
paso
desde
los
servidores
de
la
DMZ
al
servidor
MySQL
regla
OUT
pass
out
log
quick
on
$interna
proto
tcp
from
$red_dmz
to
$servidor_mysql
port
$puerto_mysql
#El
paso
de
tráfico
PING
es
permitido
entre
todas
las
interfaces
reglas
IN
pass
in
log
quick
on
$interna
proto
icmp
from
any
to
any
pass
in
log
quick
on
$dmz
proto
icmp
from
any
to
any
#El
paso
de
tráfico
PING
es
permitido
entre
todas
las
interfaces
reglas
OUT
pass
out
log
quick
on
$externa
proto
icmp
from
any
to
any
pass
out
log
quick
on
$dmz
proto
icmp
from
any
to
any
pass
out
log
quick
on
$interna
proto
icmp
from
any
to
any
#El
paso
de
tráfico
DNS
es
permitido
entre
todas
las
interfaces
reglas
IN
pass
in
log
quick
on
$interna
proto
tcp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$interna
proto
udp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$dmz
proto
tcp
from
any
to
any
port
$puerto_dns
pass
in
log
quick
on
$dmz
proto
udp
from
any
to
any
port
$puerto_dns
#El
paso
de
tráfico
DNS
es
permitido
entre
todas
las
interfaces
reglas
OUT
pass
out
log
quick
on
$interna
proto
tcp
from
any
to
any
port
$puerto_dns
pass
out
log
quick
on
$dmz
proto
tcp
from
any
to
any
port
$puerto_dns
pass
out
log
quick
on
$externa
proto
tcp
from
any
to
any
port
$puerto_dns
pass
out
log
quick
on
$interna
proto
udp
from
any
to
any
port
$puerto_dns
pass
out
log
quick
on
$dmz
proto
tcp
udp
any
to
any
port
$puerto_dns
pass
out
log
quick
on
$externa
proto
udp
from
any
to
any
port
$puerto_dns
NOTA: Para todos los firewalls que usan macros, verifique que los valores estén encerrados entre comillas
dobles, de lo contrario PF presentará errores al cargar las reglas.
________________________________________________________________________________
6.Ejemplos de firewalls 22/23
Como crear un firewall con Packet Filter (PF) - Fernando Quintero (a.k.a nonr00t), http://www.openbsdcolombia.org
7. CONCLUSIONES
● Diseñar un firewall es, en un alto porcentaje, una tarea que consiste en entender realmente
que es lo que se quiere hacer, la mayoría de las veces vamos a intentar crea reglas tratando
de cubrir nuestras necesidades sobre la marcha y esa falta de planeación hará que las reglas
implementadas no sean las mas adecuadas, independiente del firewall a implementar
siempre debe haber una planeación como se muestra en cada ejercicio propuesto.
Planteamiento del problema, análisis, diseño y pruebas.
● De las configuraciones se puede observar que las reglas con “BLOCK by default” son mas
fáciles de entender que las “PASS by default”, pero no siempre serán útiles, dado que esta
elección depende de los requerimientos que tengamos. Use las primeras cuando haya mas
asuntos que prohibir que los que se deban permitir, en caso contrario trabaje con las
segundas.
8. Enlaces relacionados
________________________________________________________________________________
8.Enlaces relacionados 23/23