BSD DevCenter
oreilly.comSafari Books Online.Conferences.

advertisement


BSD Firewalls: IPFW
Pages: 1, 2, 3

Crear un buen conjunto de reglas es un poco del arte fino; si va a crear un firewall por vez primera, espere hasta que tenga un período de tiempo en el cual no es esencial tener la conexión de red y tenga el tiempo de probar cosas y rearrancar y probar algo más y rearrancar, etc. Encontrará que la lógica usada por ipfw no necesariamente será la misma que use usted.



También, un firewall no es algo que usted sólo instala y se olvida del asunto. Planee invertir algún tiempo probándolo y rascándose la cabeza cuando no parezca hacer las cosas de la manera que ested esperaba que las haría. Una vez que que haya rearrancado con su nuevo kernel habilitado como firewall, querrá planear y completar las siguientes tres tareas:

  1. Metódicamente agregue reglas a su conjunto de reglas y prueba cada una de ellas para asegurar que se está permitiendo sólo los paquetes que usted desea permitir.
  2. Decida qué desea registrar (log) y mire el resultante archivo de registro. Probablemente termine modificando sus reglas a medida que descubra que inadvertidamente permitió o denegó algunos paquetes que no deseaba hacer.
  3. Una vez que esté satisfecho de que su firewall está soltando y aceptando los paquetes que desea, pruébelo para asegurarse de que se está comportando com esperaría.

Está bien, rearrancaré mi computadora para cargar el nuevo kernel. Y voy a ver cuidadosamente mis pantallas de arranque; debería ver el siguiente mensaje justo después que se ha cargado mi NIC:

Flushed all rules.
00100 allow ip from any to any via lo0
00200 deny ip from any to any to 127.0.0.0/8
Firewall rules loaded, starting divert daemons:.
Additional routing options: tcp extensions=NO ignore ICMP redirect=YES TCP keepalive=YES restrict TCP reset=YES drop SYN+FIN packets=YES.


Additional TCP options: log_in_vain=YES.

Also in FreeBSD Basics:

Fun with Xorg

Sharing Internet Connections

Building a Desktop Firewall

Using DesktopBSD

Using PC-BSD

Se preguntará porqué recibí esas primeras tres líneas si no he creado aún el archivo que contiene mi conjunto de reglas. Cuando edité /etc/rc.conf,agregué la línea:

firewall_script="/etc/rc.firewall"

El archivo /etc/rc.firewall fue leído a tiempo de arranque y contiene las siguientes líneas:

############
# Flush out the list before we begin.
#
${fwcmd} -f flush

############
# Only in rare cases do you want to change these rules
#
${fwcmd} add 100 pass all from any to any via lo0
${fwcmd} add 200 deny all from any to 127.0.0.0/8

Como muestra claramente las reglas 100 y 200 deberán usarse, yo arranco con la regla 300 cuando cree mi conjunto de reglas. Antes de hacerlo, deseo verificar un par de veces que ipfw está denegando todos los paquetes por omisión. Puede hacer esto usando el comando ipfw show.

ipfw show
ipfw: socket: Operation not permitted

Parece como si sólo al superusuario le está permitido ver las reglas del firewall, así que trataré de nuevo como el supersusuario:

su
Password:
ipfw show
00100   0     0 allow ip from any to any via lo0
00200   0     0 deny ip from any to 127.0.0.0/8
65535 115 14092 deny ip from any to any

Después, para estar realmente seguro, trataré de usar mi conexión a red:

ping www.freebsd.org
ping: cannot resolve www.freebsd.org: Host name lookup failure

traceroute www.freebsd.org
traceroute: unknown host www.freebsd.org

lynx www.freebsd.org
Alert!: Unable to access document.

Bueno, la resolución de nombres definitivamente no está trabajando; vamos a tratar de hacer ping por la dirección IP:

ping 24.141.116.1
PING 24.141.116.1 (24.141.116.1): 56 data bytes
ping: sendto: Permission denied
ping: sendto: Permission denied
^C
--- 24.141.116.1 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

Como ejecuté el último ping como superusuario, parece como ipfw que en verdad está descartando todos los paquetes IP. Ahora que verdaderamente me he quedado encerrado afuera de mi conexión de red, es tiempo de crear un conjunto de reglas que me permita enviar y recibir los paquetes IP que deseo.

Hay dos formas de crear las reglas que son leídas por ipfw:

  • Si usa ipfw add, no tiene que rearrancar para que la regla tenga efecto; sin embargo, la regla se perderá si rearranca su computadora.
  • Puede agregar una línea al archivo que ha dicho a ipfw que lea; no obstante, no lo leerá hasta que usted rearranque.

Debido a que soy la única persona que usa la computadora de casa, agregaré mis reglas directamente al archivo y rearrancaré. Lo que precisamente, he hecho en /etc/rc.conf

firewall_type="/etc/ipfw.rules"

Así, estaré creando un archivo llamado /etc/ipfw.rules.

Tomará todo un artículo crear y probar el conjunto de reglas, así que esperemos una semana para hacer esto. Mientras tanto, querrá echar una mirada a lo siguiente para que tenga un acercamiento a la sintaxis de las reglas de ipfw y qué tipo de reglas debería incluir en su conjunto de reglas:

man ipfw

http://www.robertgraham.com/pubs/firewall-seen.html

http://www.defcon1.org//html/Networking_Articles/Firewall-Ipfw/firewall-ipfw

http://www.interhack.net/pubs/fwfaq/

http://www.freebsddiary.org/firewall.html

http://www.bsdtoday.com/2000/December/Features359.html

http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO

http://www.daemonnews.org/200103/firewall.html

Como puede ver, hay muchos recursos disponibles y no tendrá que reinventar la rueda cuando cree su conjunto de reglas. Notará también que esos conjuntos de reglas tienden a ser específicas a las necesidades de un usuario; encontrará que terminará adoptando buenas ideas de varios recursos. Hasta la siguiente semana, feliz lectura.

Dru Lavigne is a network and systems administrator, IT instructor, author and international speaker. She has over a decade of experience administering and teaching Netware, Microsoft, Cisco, Checkpoint, SCO, Solaris, Linux, and BSD systems. A prolific author, she pens the popular FreeBSD Basics column for O'Reilly and is author of BSD Hacks and The Best of FreeBSD Basics.


Read more FreeBSD Basics columns.

Return to the BSD DevCenter.





Sponsored by: