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:
- 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.
- 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.
- 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: |
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
ipfwque 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.