5. Las Reglas del Cortafuegos

Casi hemos acabado. Lo único que nos falta es definir las reglas del cortafuegos, reiniciar y deberíamos tener nuestro cortafuegos funcionando perfectamente. Soy consciente de que cada cual tendrá necesidades distintas como reglas básicas. He intentado escribir unas reglas básicas que puedan cubrir las necesidades de un usuario de conexión telefónica normal. Vamos a comenzar por lo básico de un cortafuegos cerrado. Lo que se busca es rechazar todo por defecto y dejar pasar solamente lo que necesitemos. Las reglas deberían ir en la forma “al principio permitir, luego rechazar”. La premisa es que vamos a an˜adir reglas para lo que vamos a aceptar y luego rechazamos todo lo demás. :)

Ahora vamos a crear el directorio /etc/firewall. Sitúese en el directorio y edite el fichero fwrules tal y como hemos escrito dentro de rc.conf. Por favor, no olvide que puede cambiar el nombre del fichero por cualquier otro que prefiera. Éste documento solamente facilita un ejemplo del nombre del fichero.

Vamos a echar un vistazo a un ejemplo de fichero de configuración del cortafuegos que hemos comentado cuidadosamente.

# Definimos el comando con el que invocamos al cortafuegos  
# (tal y como hemos incluído en /etc/rc.firewall) para 
# facilitarnos la lectura.  
fwcmd="/sbin/ipfw"

# Fuerza el borrado de todas las reglas existentes en nuestro 
# cortafuegos antes de cargar el contenido de éste fichero.
$fwcmd -f flush

# Desvía todos los paquetes a través del interfaz tunnel.
$fwcmd add divert natd all from any to any via tun0

# Permite todas las conexiones incluídas en reglas 
# dinámicas pero rechaza todas aquellas conexiones 
# establecidas que no estén incluídas en alguna
# regla dinámica. 
$fwcmd add check-state
$fwcmd add deny tcp from any to any established

# Aceptar todas las conexiones de localhost.
$fwcmd add allow tcp from me to any out via lo0 setup keep-state
$fwcmd add deny  tcp from me to any out via lo0
$fwcmd add allow ip  from me to any out via lo0 keep-state

# Aceptar todas las conexiones desde mi tarjeta de red que yo inicie. 
$fwcmd add allow tcp from me to any out xmit any setup keep-state
$fwcmd add deny  tcp from me to any
$fwcmd add allow ip from me to any out xmit any keep-state

# Todo el mundo a lo largo y ancho de Internet puede conectarse 
# a los siguientes servicios de la máquina.  Éste 
# ejemplo permite específicamente las conexiones a sshd 
# y al servidor web.
$fwcmd add allow tcp from any to me dst-port 22,80 in recv any setup keep-state

# Ésto envía un RESET a todos los paquetes ident.
$fwcmd add reset log tcp from any to me 113 in recv any

# Activa ICMP: borre el tipo 8 si no quiere que su máquina 
# responda al ping.
$fwcmd add allow icmp from any to any icmptypes 0,3,8,11,12,13,14

# Rechazamos todo lo demás.
$fwcmd add deny log ip from any to any

Ya tiene usted un cortafuegos totalmente funcional que acepta todas las conexiones a los puertos 22 y 80 y registrará cualquier otro tipo de intento de conexión en un fichero log. Ahora podemos reiniciar tranquilamente y su cortafuegos debería empezar a trabajar tal y como le hemos dicho. Si le parece que hay algún dato incorrecto o tiene alguna sugerencia para mejorar éste documento por favor envíeme un correo electrónico.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.