Instalación de Filtros IP (IPCHAINS)

Ipchains es una nueva versión del código cortafuegos en Linux IPv4 y de ipfwadm, que, según creo, deriva del código de filtrado en BSD (ipfw). Para poder administrar los filtros de paquete IP en Linux, se requiere una versión del núcleo 2.1.102 o superior.

Las limitaciones del código de filtrado BSD (ipfw) son que no trabaja con fragmentos, tiene contadores de 32 bits (al menos en Intel), sólo puede manejar los protocolos TCP, UDP o ICMP, no permite hacer grandes cambios de forma automática, no permite especificar reglas inversas, presenta algunas anomalías, y, sin embargo, puede servir para gestionar (aunque es más fácil que se comentan errores). Al menos, eso es lo que dice el autor.

En realidad, no voy a profundizar sobre cómo controlar un cortafuegos IPChains, porque sobre ello ya existe un ¡GRAN! Cómo en la dirección http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html. Simplemente acabaría duplicándolo aquí. Apuntaré los conceptos básicos.

Empieza con tres listas de reglas denominadas "chains" (cadenas): input, output y forward, que no se pueden borrar. Usted mismo puede crear cadenas y, entonces, las reglas pueden ser insertadas o eliminadas desde ese conjunto de reglas.

Las operaciones para trabajar con cadenas completas son:

  1. Crear una nueva cadena (-N).

  2. Borrar un cadena vacía (-X).

  3. Cambiar la política por defecto de una cadena (-P).

  4. Listar las reglas contenidas en una cadena (-L).

  5. Vaciar una cadena eliminando las reglas que contiene (-F).

  6. Poner a cero los contadores de bytes y de paquetes en todas las reglas de una cadena (-Z).

Existen varias formas de maninpular las reglas de una cadena:

  1. Añadir una nueva reglas a una cadena ya existente (-A).

  2. Insertar una nueva reglas en una posición determinada en una cadena (-I).

  3. Reemplazar la regla que ocupa una posición determinada en una cadena (-R).

  4. Eliminar la regla que ocupa una posición determinada en una cadena (-D).

  5. Eliminar la primera regla igual a la especificada de entre todas las reglas de una cadena (-D).

También hay algunas operaciones relativas al enmascaramiento IP, a falta de un lugar mejor donde colocarlas:

  1. Ver una lista de todas las conexiones actuales que están siendo enmascaradas (-M -L).

  2. Establecer el tiempo de espera máximo para una conexión enmascarada (-M -S).

Hay algunos elementos de la temporalización que pueden alterar las reglas del cortafuegos; por ello, si no es usted cuidadoso, podría dejar pasar algún paquete mientras realiza los cambios. Una aproximación simple es hacer lo siguiente:

# ipchains -I input 1 -j DENY 
# ipchains -I output 1 -j DENY 
# ipchains -I forward 1 -j DENY

... hacer los cambios ...

# ipchains -D input 1 
# ipchains -D output 1 
# ipchains -D forward 1 
#

Esto evitará que entren paquetes mientras usted esté realizando los cambios.

Aquí le presento un duplicado de las reglas del cortafuegos anterior en una IPChains.

#!/bin/sh
#
# rc.firewall
#
## Flush everything, start from scratch
  /sbin/ipchains -F input
  /sbin/ipchains -F output
  /sbin/ipchains -F forward

## Redirect for HTTP Transparent Proxy
  #$IPCHAINS  -A input -p tcp -s 192.1.2.0/24 \
               -d 0.0.0.0/0 80 -j REDIRECT 8080

## Create your own chain
  /sbin/ipchains -N my-chain
  # Allow email to got to the server
  /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp \
                    -d 192.1.2.10 1024:-j ACCEPT
  # Allow email connections to outside email servers
  /sbin/ipchains -A my-chain -s 192.1.2.10 \
                 -d 0.0.0.0/0 smtp -j ACCEPT 	
  # Allow Web connections to your Web Server
  /sbin/ipchains -A my-chain -s 0.0.0.0/0 www \
                  -d 192.1.2.11 1024: -j ACCEPT
  # Allow Web connections to outside Web Server
  /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: \
                          -d 0.0.0.0/0 www -j ACCEPT
  # Allow DNS traffic
  /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns \
                             -d 192.1.2.0/24 -j ACCEPT

## If you are using masquerading
  # don't masq internal-internal traffic
  /sbin/ipchains -A forward -s 192.1.2.0/24 \
                    -d 192.1.2.0/24 -j ACCEPT
  # don't masq external interface direct
  /sbin/ipchains -A forward -s 24.94.1.0/24 \
                       -d 0.0.0.0/0 -j ACCEPT
  # masquerade all internal IP's going outside
  /sbin/ipchains -A forward -s 192.1.2.0/24 \
                         -d 0.0.0.0/0 -j MASQ

## Deny everything else
  /sbin/ipchains -P my-chain input DENY

No se detenga aquí. Este cortafuegos no es muy grande y estoy seguro de que usted tiene otros servicios que le pueden ayudar. Por ello, lea de nuevo el Cómo IPCHAINS.