BSD Firewalls: IPFW
04/25/2001Su sistema FreeBSD viene con dos mecanismos interconstruidos para
inspeccionar paquetes IP:ipfw ye ipfilter. Ambos
tienen su peculiar sintaxis para crear conjuntos de reglas para determinar qué
paquetes permitir y cuáles descartar, así que quisiera demostrar el uso de
ambos. Debido a que usted puede ejecutar uno u otro, empezaré con
ipfw; una vez que hayamos tenido una buena mirada en éste,
nos dedicaremos a ipfilter.
ipfw, tendrá que agregar algunas opciones
a su archivo de configuración del kernel y recompilar éste. Si usted está un
poco oxidado para compilar kernels, querrá echar una mirada a
esa
sección del manual.
Hay varias opciones que pueden usarse por ipfw, así que
empecemos echando una mirada a LINT. Haré una búsqueda usando "/"
para encontrar rápidamente la sección correcta:
cd /usr/src/sys/i386/conf
more LINT
/IPFIREWALL
# IPFIREWALL enables support for IP firewall construction,
# in conjunction with the 'ipfw' program. IPFIREWALL_VERBOSE
# sends logged packets to the system logger.
# IPFIREWALL_VERBOSE_LIMIT limits the number of times a
# matching entry can be logged.
#
# WARNING: IPFIREWALL defaults to a policy of "deny ip
# from any to any" and if you do not add other rules during
# startup to allow access, YOU WILL LOCK YOURSELF OUT. It
# is suggested that you set firewall_type=open in /etc/rc.conf
# when first enabling this feature, then refining the firewall
# rules in /etc/rc.firewall after you've tested that the new
# kernel feature works properly.
#
# IPFIREWALL_DEFAULT_TO_ACCEPT causes the default rule (at boot)
# to allow everything. Use with care, if a cracker can crash
# your firewall machine, they can get to your protected machines.
# However, if you are using it as an as-needed filter for
# specific problems as they arise, then this may be for you.
# Changing the default to 'allow' means that you won't get stuck
# if the kernel and /sbin/ipfw binary get out of sync.
Como mínimo, necesita incluir la opción IPFIREWALL para habilitar a
ipfw; esto le dice a su kernel que examine cada paquete IP y lo
compare con el conjunto de reglas. Es siempre una buena idea incluir soporte al
ingreso (logging support), que se hace aņadiendo la opción
IPFIREWALL_VERBOSE. También debería limitar la cantidad de
paquetes que el kernel registrará por la misma razón que vimos la semana pasada
en limitando la cantidad de paquetes ICMP que fueran registrados. Usted limita
el registro de paquetes IP con la opción IPFIREWALL_VERBOSE_LIMIT.
|
También en lo básico de FreeBSD: Firewalls BSD: Conjuntos de reglas para sintonización fina |
Note que la condición por omisión de ipfw es botar todos los
paquetes IP excepto aquellos que especificamente haya permitido en su conjunto
de reglas. Yo prefiero esta condición pues da control más fino sobre qué
paquetes están siendo aceptados; odiaría pensar que mi kernel estaba aceptando
paquetes de los cuales no estaba consciente. Definitivamente notaría si los
paquetes que quiero no estuvieran siendo aceptados y puedo cambiar mi conjunto
de reglas para permitirlos; nunca sabría la diferencia si los paquetes de los
cuales no había tenido cuidado estuvieran durmiendo por mi firewall debido a
que no hice un conjunto de reglas para denegarlos explícitamente. En
consecuencia, no pasaría sobre la condición por omisión incluyendo la opción
IPFIREWALL_DEFAULT_TO_ACCEPT.
# IPDIVERT enables the divert IP sockets, used
# by ''ipfw divert''
Esta opción es utilizada en conjunción con natd. Debido a que
sólo estoy construyendo un firewall para proteger una sola máquina, no
necesitaré esta opción
# IPSTEALTH enables code to support stealth forwarding
# (i.e., forwarding packets without touching the ttl).
# This can be useful to hide firewalls from traceroute
# and similar tools.
Esto suena como una opción interesante, así que la incluiré en mi firewall y veré como funciona cuando pruebe mi firewall.
# Statically Link in accept filters
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP
No estoy ejecutando un servidor web en esta computadora, así que no compilaré en estas dos opciones.
# The following options add sysctl variables for controlling
# how certain TCP packets are handled.
#
# TCP_DROP_SYNFIN adds support for ignoring TCP packets with
# SYN+FIN. This prevents nmap et al. from identifying the
# TCP/IP stack, but breaks support for RFC1644 extensions
# and is not recommended for web servers.
#
# TCP_RESTRICT_RST adds support for blocking the emission
# of TCP RST packets. This is useful on systems which are
# exposed to SYN floods (e.g. IRC servers) or any system
# which one does not want to be easily portscannable.
De nuevo, voy a incluir esas opciones para ver los resultados cuando pruebe mi firewall.
# ICMP_BANDLIM enables icmp error response bandwidth
# limiting. You typically want this option as it will
# help protect the machine from D.O.S. packet attacks.
#
options ICMP_BANDLIM
Esta opción viene habilitada con el kernel por omisión; vimos su
comportamiento la semana pasada cuando usamos la utilería nmap.
# DUMMYNET enables the "dummynet" bandwidth limiter.
# You need IPFIREWALL as well. See the dummynet(4)
# manpage for more info. BRIDGE enables bridging between
# ethernet cards -- see bridge(4).
No incluiré esas dos opciones debido a que no necesito hacer ningún análisis de tráfico en esta sola computadora.




