[EMAIL PROTECTED] wrote:

        Hola a [EMAIL PROTECTED],
        estoy añadiendo algunas reglas a iptables, pero no se como comprobar que
abren los puertos correctamente y demas, con iptables -L -n compruebo las
reglas, pero ¿como hago para q actualice los cambios? ¿es necesario
reiniciar todo el sistema? con /etc/init.d/iptables lo que sea no consigo
modificar la salida de iptables -L -n, por lo que supongo que no se realizan
cambios si no reinicio completamente, pero debe de haber una manera de
hacerlo sin reiniciar, si hago -F y luego -L -n me vuelve a cargar lo mismo
que antes ¿es posible porque este como established y este conectado? ¿como
se comprueba?
        Gracias..




Aquí va una pequeña introducción a iptables y las reglas permanentes,
Lo mando como un fichero adjunto porque ya no me acuerdo de donde
lo bajé.

Salu2. ;-)



--
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Alberto Seoane ;-)
Jabber: [EMAIL PROTECTED]
E-Mail: [EMAIL PROTECTED]
Usuario Registrado Linux #362136
Registrate en http://counter.li.org

Podemos acabar con los archivos adjuntos en Word:
http://www.fsf.org/philosophy/no-word-attachments.es.html

Di NO a las patentes de software:
http://proinnova.hispalinux.es/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFBBWcqq6Cd1ym4K2gRAhwFAJ0d0u1vekJCY0MGv2zzt1gJRXnPUQCeLbU8
Kgpc0QcXDl5Y7xZnKRi79LA=
=L5jn
-----END PGP SIGNATURE-----

Title: Configuración de un cortafuegos (firewall) en Debian

Configuración de un cortafuegos (firewall) en Debian

Un cortafuegos se construye mediante un filtro de paquetes y tiene el propósito de controlar el tipo de acceso o salida por las interfases de red y resguardar el computador de ataques maliciosos. El filtro de paquetes es un código que lee el encabezado de un paquete que recibe una interfase (e.g. lo, eth0 o ppp0) y luego decide si aceptarlo o rechazarlo completamente antes de alcanzar un proceso local (demonio). En Linux, el filtro de paquetes es parte del núcleo. A partir de la versión 2.4 se reescribió completamente y pasó a llamarse 'iptables', reemplazando al antiguo 'ipchains'.

La palabra "cortafuegos" puede dar una sensación falsa de seguridad. No existe red complemente segura y si bien un cortafuegos puede ser considerado como una primera línea de defensa, la vigilancia ante actividades extrañas en el computador son esenciales para mantener el sistema seguro. Si no has leído aún sobre la seguridad del sistema Debian sugerimos que lo hagas antes de continuar.

Configurar un cortafuegos puede resultar extremadamente complejo si el servidor presta servicios en forma restrictiva. Este es comúnmente el caso de redes comerciales en donde se está más interesado en controlar y bloquear el uso de la red por parte de los empleados que de resguardar la red de intrusos. Aquí obviamente no estamos interesados en este tipo de aplicaciones. Nuestra propuesta de configuración intenta ser lo más simple y transparente posible y está ideada para proteger un servidor Debian de intrusos externos sin restringir de ningún modo al usuario.

Si tienes el núcleo de instalación con el sabor bf24 (versión 2.4), tienes en el sistema todos los módulos del filtro. Estos van a ser cargados en forma automática cuando uses la herramienta iptables. Si tienes el núcleo con el sabor idepci (versión 2.2) sugerimos que actualices a la versión 2.4 (lee sobre la compilación del núcleo de Linux), compilando con los siguientes componentes: En la sección "Networking options", marca "Networking packet filtering", luego en la subsección "IP: Netfilter Configuration", marca como módulo "Connection tracking" y todos los soportes asociados, marca "IP tables support" y todos los soportes asociados, incluyendo los de "Packet filtering", "Full NAT" y "Packet mangling".

Filtro de paquetes
iptables es la herramienta que inserta o remueve "reglas" en la tabla del filtro de paquetes del núcleo y es instalada por omisión en el sistema base. El núcleo parte con una tabla que contiene tres listas básicas de reglas llamadas "cadenas". Estas son INPUT, OUTPUT y FORWARD, respectivamente (entrada, salida y redirección). Cuando un paquete entra a una interfase de red, el núcleo examina primero el destino del paquete y decide que ruta tomar (INPUT o FORWARD). Luego el paquete es examinado en la cadena, en donde la decisión de desechar (DROP) o aceptar (ACCEPT) el paquete es tomada. Si la decisión es aceptar, el paquete continua hacia el destino, siendo recibido por algún proceso local (demonio). En cambio, si la decisión es desechar, el paquete es descartado completamente, muriendo en el lugar, antes de alcanzar un proceso local.
                          _____
Entrante / \ Saliente
-->[Decisión]--->|FORWARD|------->
[de ruta ] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> Proceso local ----
Un cadena es entonces una lista de reglas de control. Cada regla dice, "si el encabezado del paquete es de esta manera, aplico tal acción sobre él". La regla puede estar compuesta de una o múltiples condiciones. Si cualquiera de las condiciones de la regla no se cumple, la próxima regla es consultada. Si el paquete llega al final de la cadena sin que alguna regla le aplique, el núcleo consulta la "norma" (policy) definida para la cadena. La norma puede ser DROP o ACCEPT. En un sistema en donde la seguridad es prioridad, la norma de las cadenas INPUT y FORWARD debería ser DROP.

Un programa o proceso también puede generar un paquete para ser enviado, pasando por la cadena OUTPUT. Si la decisión es ACCEPT, el paquete continua, saliendo por la interfase de red. Un sistema en donde el control sobre sus usuarios es mínimo, la norma de la cadena OUTPUT debería ser ACCEPT.

Aparte de las tres cadenas básicas, que son imborrables, iptables permite crear nuevas cadenas e insertar reglas en ellas. Estas no tienen norma y al llegar al final retornan al punto que fueron llamadas. Las operaciones que se pueden realizar sobre una cadena son:
  1. Crear una nueva cadena (-N).
  2. Borrar una cadena vacía (-X).
  3. Cambiar la norma de una cadena básica (-P).
  4. Lista de reglas en una cadena (-L).
  5. Vaciar las reglas de una cadena (-F).
  6. Volver a cero el contador de paquetes y bytes de todas las reglas de una cadena (-Z).
Las operaciones para manipular una regla dentro de una cadena son:
  1. Añadir una regla a una cadena (-A).
  2. Insertar una regla en algún punto de la cadena (-I).
  3. Reemplazar una regla en algún punto de la cadena (-R).
  4. Borrar una regla en algún punto de la cadena, o la primera que coincida (-D).
A modo de ejemplo
Para comenzar, da el comando 'iptables -L' para producir una lista de las cadenas y reglas. Ya que la tabla del filtro de paquetes no ha sido manipulada, el comando retornará a la pantalla las tres cadenas básicas vacías de reglas,

  Chain INPUT (policy ACCEPT)
  target     prot opt source               destination

  Chain FORWARD (policy ACCEPT)
  target     prot opt source               destination

  Chain OUTPUT (policy ACCEPT)
  target     prot opt source               destination


La norma por omisión de las tres cadenas es ACCEPT.

A modo de ejemplo, vamos a manipular la tabla para bloquear paquetes del protocolo ICMP (Internet Control Message Protocol) provenientes de la dirección IP 127.0.0.1 (loopback). Este protocolo es usado por ejemplo por ping para recibir un eco de un servidor en la red. Para comenzar da el comando,

# ping -c1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.1 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.1 ms


Este comando envía un paquete ICMP tipo 8 (echo request) a la interfase loopback y el servidor (localhost) responde con otro paquete ICMP tipo 0 (echo reply). El argumento -c1 obliga a ping a enviar uno de estos paquetes y luego terminar.

Vamos a añadir (-A) una regla a la cadena INPUT para que pruebe todos aquellos paquetes cuyo protocolo (-p) es ICMP, provenientes de la fuente (source, -s) 127.0.0.1 y luego "salte" (jump, -j) al blanco (target) DROP,

# iptables -A INPUT -p ICMP -s 127.0.0.1 -j DROP

Ahora la lista en la tabla (iptables -L) contiene la regla recién introducida,

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       icmp --  localhost            anywhere


Si un paquete recibido proviene de la fuente 127.0.0.1 y cuyo protocolo es ICMP, entonces la regla es cumplida y salta (-j) al blanco DROP, es decir, el paquete es descartado. El blanco también puede ser ACCEPT o el nombre de otra cadena, en cuyo caso el paquete sufre un nuevo escrutinio con las reglas de esa cadena. Todas las partes de una regla tienen que cumplirse para que la regla salte al blanco. Si no es así, se consulta la siguiente regla hasta que haya un concordancia completa o llegue al final de la cadena y se le aplique la norma.

El comando 'ping -c1 127.0.0.1' no producirá eco alguno del servidor, pues el paquete enviado morirá en la interfase loopback antes que se produzca una respuesta. Para terminar ping cancela con <ctrl>-<c>. Nota que la primera manipulación de la tabla inserta automáticamente los módulos ip_iptables y iptable_filter en el núcleo. Nota también que cualquier regla que insertes en la tabla será borrada cada vez que reinicies el computador. Más adelante mostraremos como hacerlas permanentes en el sistema Debian.

Para borrar la regla recién insertada existen varias posibilidades. El comando 'iptables -D INPUT 1' borra la primera regla de la cadena INPUT. Una réplica del comando, reemplazando '-A' por '-D', 'iptables -D INPUT -p ICMP -s 127.0.0.1 -j DROP', produce el mismo efecto. Esta última forma es conveniente de usar cuando la cadena contiene reglas complejas. Finalmente, el comando 'iptables -F INPUT' vacía la cadena INPUT de todas sus reglas.

El protocolo (-p) del paquete a que se aplica la regla puede ser 'TCP', 'UDP', 'ICMP' o 'ALL' (todos). Mayúsculas o minúsculas no tienen importancia. El prefijo "!" invierte el argumento. Por ejemplo, '-p ! TCP' especifica todos los protocolos a excepción de los de tipo TCP. "!" es equivalente a un not lógico.

La dirección de la fuente (-s) o destino (-d) puede especificarse de cuatro maneras. Puede ser un nombre, como 'localhost' o 'fusion.nuclear.cl', o un número IP. También puede ser un rango de números IP, como '200.79.123.0/24' o equivalentemente '200.79.123.0/255.255.255.0'. Ambos casos especifican el rango de números IP de 200.79.123.0 a 200.79.123.255. Los dígitos después de "/" denotan la parte del número IP que es significativo. "/24" dice que los 24 primeros bits del número son significativos, o si quieres, los tres primeros grupos de 8 bits. "/32" o "/255.255.255.255" es equivalente a una correspondencia completa del número IP que va delante. "/0" o "/0.0.0.0" especifica cualquier número IP y es quivalente a omitir -s o -d completamente. La cuarta forma de especificar la fuente o destino es similar a la máscara de red y es por ende conveniente de usar cuando la máscara es poco convencional. El prefijo "!" invierte el argumento. Por ejemplo, '-s ! localhost' especifica toda fuente a excepción de localhost.

Existen muchos blancos. Aquí vamos a usar solo los blancos DROP y ACCEPT. Otro blanco común es RETURN usado para terminar la cadena actual y retornar a la cadena inicial.

También se puede especificar la interfase de entrada (-i), la que recibe el paquete, o la interfase de salida (-o). Por ejemplo, '-i eth0' o '-i ppp0'. En ambos casos se puede invertir el argumento con un "!".

El puerto de destino del paquete o el puerto de la fuente lo especifican las opciones '--destination-port' (o '--dport') y '--source-port' (o '--sport'). Por ejemplo, '--dport 80', prueba aquellos paquetes destinados al puerto http. Para saber qué número de puerto corresponde a cada protocolo consulta el archivo /etc/services.

Existen condiciones genéricas, implícitas y explícitas. Las genéricas son aquellas condiciones que no dependen del protocolo que se está probando, por ejemplo, el protocolo (-p), la fuente (-s), el destino (-d), la interfase de entrada (-i) o de salida (-o). Las condiciones implícitas son aquellas que están asociadas a un protocolo, por ejemplo, el puerto de la fuente o destino, '-p TCP --sport 80' y '-p UDP --dport 80', respectivamente, o el tipo de paquete ICMP, '-p ICMP --icmp-type 8'. Las condiciones explícitas, a diferencia de las implícitas, no son cargadas automáticamente por iptables y tienen que cargarse con la opción '-m' antes de la condición. Por ejemplo, la condición '--state' requiere declararse previamente, '-m state --state NEW,RELATED,ESTABLISHED'.

Cortafuegos
Ahora vamos a manipular la tabla en serio, modificando la norma de las cadenas básicas, creando nuevas cadenas e insertando reglas en ellas para probar todos los paquetes recibidos por red. Primero es necesario crear un "script", darle permisos de ejecución y protegerlo de que sea leído por otros,

# touch cortafuegos.sh
# chmod 700 cortafuegos.sh


Una advertencia. Existen procesos internos que funcionan haciendo llamados a la interfase loopback (127.0.0.1) u otros números IP de las redes privadas. Puede suceder que un cortafuegos mal configurado bloquee estos procesos causando una pérdida del control de computador. Para evitar esto, mientras configuras el cortafuegos, sugerimos correr un "cron" que cada cierto tiempo borre la tabla. Da el comando 'crontab -e' e inserta las siguientes líneas,

# m     h       dom     mon     dow     command
*/15    *        *       *       *      /etc/init.d/iptables clear


Luego sal del editor. Este cron va a borrar la tabla cada 15 minutos. Si el computador se cuelga, espera a que la hora sea un múltiplo de 15 minutos y volverás a controlar el computador. Una vez que el cortafuegos este configurado, comenta o borra la segunda línea corriendo 'crontab -e' nuevamente.

Cortafuegos para ppp0
La primera propuesta de cortafuego es apta para un sistema Debian conectado a la red por módem o ADSL (interfase ppp0) y que no presta ningún servicio de red. Si tienes una conexión tipo T1 (ethernet) sugerimos que igual estudies el ejemplo ya que contiene aspectos comunes que se usarán más adelante. Edita el archivo cortafuegos.sh e inserta las siguientes líneas:

-----------------------------------------------------------------------------
#!/bin/sh

# 1) Borrar la actual tabla
/etc/init.d/iptables clear

# 2) Definir la norma de cada cadena básica
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 3) Manipular la cadena INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
#iptables -A INPUT -j LOG --log-level debug --log-prefix "Drop INPUT: "

# 4) Grabar las reglas de la tabla
/etc/init.d/iptables save active
-----------------------------------------------------------------------------


En 1) se borra la actual tabla de todas sus cadenas y reglas a excepción de las cadenas básicas que quedan vacías.

En 2) se modifica la norma de las cadenas INPUT y FORWARD a DROP. Nota que la cadena OUTPUT se deja con la norma ACCEPT. A estas alturas, la tabla va a descartar cualquier paquete entrante o redirigido en cualquier interfase de red y va aceptar cualquier paquete saliente.

En 3) se añade una regla a la cadena INPUT que acepta todo paquete de una conexión ya establecida o relacionada. Si una interfase envía o recibe un paquete de cualquier dirección interna o externa requiriendo una conexión, todo paquete que el receptor o emisor envíe de vuelta y llegue a INPUT será en estado establecido o relacionado, siendo aceptada por esta regla. La próxima línea acepta todo paquete en INPUT que requiere una nueva conexión pero que no provenga de la interfase ppp0, es decir la interfase externa. En particular, cualquier nueva conexión requerida por la interfase loopback será aceptada. Esto es aceptable solo si tienes una (y solo una) interfase (ppp0) conectada a la red externa. Cualquier otra interfase conectada al exterior (una tarjeta ethernet en eth0 o un segundo módem en ppp1) quedará desprotegida con esta regla, creando un agujero por el cual un intruso podría meterse. La tercera regla (que esta comentada) sirve para hacer diagnósticos. Al descomentarla todo paquete que no haya cumplido ninguna de las dos reglas previas es registrado con syslog. El blanco LOG siempre retorna a donde fue llamado. El nivel de registro puede ser 'debug', 'info', 'notice', 'warning', 'err', 'crit', 'alert' o 'emerg'. Si el nivel es 'debug' todo paquete descartado por la norma será registrado en /var/log/debug con el prefijo "Drop INPUT:". Como ves, un paquete que cruza una cadena lo hace en forma secuencial, probándose cada regla una por una. Si la regla no se aplica al paquete en su totalidad, la próxima regla es probada. Si el paquete cumple cualquiera de estas reglas, salta inmediatamente al blanco y sale de la cadena. Si un paquete logra llegar al final de la cadena, es descartado por la norma de INPUT. La regla que está comentada es para

Finalmente, en 4) se graba la tabla con el nombre 'active'. En Debian, la tabla se graba en el directorio /var/lib/iptables con el nombre especificado.

Ahora corre el script './cortafuegos.sh', luego conéctate a la red con PPP o PPPoE y prueba conexiones a servidores externos. Si no encuentras ningún problema, puedes borrar el cron usado para borrar la tabla cada 15 minutos. Si deseas puede ir a la sección que describe como hacer las reglas permanentes en la tabla.

Cortafuegos para eth0
Ahora vamos a presentar un cortafuegos de uso más amplio, apto para un servidor conectado a la red por una interfase ethernet (eth0) y que presta algunos servicios de red, como servicios ftp, http, ssh, ntp y otros.

------------------------------------------------------
#!/bin/sh
/etc/init.d/iptables clear

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 1) Definir la interfase externa y loopback y respectivos no. IPs
INET_IFACE="eth0"
INET_IP="200.89.74.17"
LO_IFACE="lo"
LO_IP="127.0.0.0/8"

# 2) Cadena INPUT general
iptables -A INPUT -i $INET_IFACE -p TCP -j bloquear-spoof
iptables -A INPUT -p TCP -m state --state NEW ! --syn -j DROP
iptables -A INPUT -i $INET_IFACE -s $INET_IP -j DROP
iptables -A INPUT -i $INET_IFACE -d ! $INET_IP -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $LO_IFACE -p ALL -s $LO_IP -j ACCEPT
iptables -A INPUT -i $LO_IFACE -p ALL -s $INET_IP -j ACCEPT
iptables -A INPUT -i $INET_IFACE -p ICMP -j pqtes-icmp-permitidos
iptables -A INPUT -i $INET_IFACE -p UDP -j pqtes-udp-permitidos
iptables -A INPUT -i $INET_IFACE -p TCP -j pqtes-tcp-permitidos

# 3) Cadena OUTPUT
iptables -A OUTPUT -o $INET_IFACE -p TCP -j bloquear-spoof
iptables -A OUTPUT -p TCP -m state --state NEW ! --syn -j DROP

# 4) Definir la cadena "bloquear-spoof" para proteger números IP privados desde el exterior
iptables -N bloquear-spoof
iptables -A bloquear-spoof -p TCP -s 192.168.0.0/16 -j DROP
iptables -A bloquear-spoof -p TCP -s 10.0.0.0/8 -j DROP
iptables -A bloquear-spoof -p TCP -s 172.16.0.0/12 -j DROP

# 5) Cadena "pqtes-icmp-permitidos"
iptables -A pqtes-icmp-permitidos -i $INET_IFACE -p ICMP --icmp-type 8 -j ACCEPT
iptables -A pqtes-icmp-permitidos -i $INET_IFACE -p ICMP --icmp-type 11 -j ACCEPT
iptables -A pqtes-icmp-permitidos -i $INET_IFACE -p ICMP -j DROP

# 6) Cadena "pqtes-udp-permitidos"
iptables -N pqtes-udp-permitidos
iptables -A pqtes-udp-permitidos -i $INET_IFACE -p UDP -m state --state NEW \
                                 --dport 123 -j ACCEPT
iptables -A pqtes-udp-permitidos -i $INET_IFACE -p UDP -j DROP

# 7) Cadena "pqtes-tcp-permitidos"
iptables -N pqtes-tcp-permitidos
iptables -A pqtes-tcp-permitidos -i $INET_IFACE -p TCP -m state --state NEW \
                                 -m multiport --dport 21,25,80,443 -j ACCEPT
iptables -A pqtes-tcp-permitidos -i $INET_IFACE -p TCP -m state --state NEW \
                                 -s 200.89.74.0/24 --dport 22 -j ACCEPT
iptables -A
pqtes-tcp-permitidos -i $INET_IFACE -p TCP -j DROP

/etc/init.d/iptables save active

------------------------------------------------------


Recuerda que esta es una proposición para ser modificada de acuerdo a tus necesidades. Comenta o borra toda línea que no se aplique a tu caso en particular.

En 1) se define la interfase conectada al la red externa (eth0) y loopback (lo) y sus respectivos números IP. Modifica la variable INET_IP con el número IP de tu servidor.

En 2) comienza la manipulación de la cadena INPUT. La primera regla hace saltar todo paquete que llega a la interfase externa a la cadena "bloquear-spoof" para descartar todo paquete obviamente malicioso. La segunda regla requiere explicación. Todo paquete TCP tiene una serie de indicadores llamados banderines (flags). En iptables los banderines TCP se prueban con '--tcp-flags', por ejemplo, 'iptables -p TCP --tcp-flags SYN,ACK,FIN SYN'. En este caso, los banderines SYN, ACK y FIN son probados exigiéndose que SYN esté puesto pero no ACK y FIN. En un paquete TCP que requiere una nueva conexión, SYN debería estar puesto, pero no ACK y FIN. El acrónimo '--syn' es equivalente a esto. La segunda regla dice entonces que descarte todo paquete TCP en estado nuevo que no tenga los banderines SYN puestos y ACK y FIN no puestos. La tercera regla descarta todo paquete que llega a la interfase externa con un número IP idéntico al mio. La cuarta regla descarta todo paquete que llega a la interfase externa cuyo destino no soy yo. La quinta regla acepta todo paquete en estado establecido y relacionado. La sexta y septima regla acepta todo paquete que llega a la interfase loopback provenientes de 127.0.0.0/24 y del número IP del servidor. Las proximas tres reglas hacen saltar todo paquete de los protocolos ICMP, UDP y TCP que llega a la interfase externa en INPUT a las cadenas "pqtes-icmp-permitidos", "pqtes-udp-permitidos" y "pqtes-tcp-permitidos", respectivemante.

En 3) se manipula la cadena OUTPUT para que bloquear números IP indebidos y paquetes tipo TCP en estado nuevo que no tengas los banderines correctos.

En 4) se define la cadena "bloquear-spoof" para descartar paquetes TCP en la interfase externa cuya fuente son números IP de las redes privadas. Estos números son reservados para redes internas y no deberían circular en forma externa.

En 5) se define la cadena "pqtes-icmp-permitidos" con reglas relacionadas al protocolo ICMP. La primera regla acepta paquetes ICMP de tipo 8 (echo request) para permitir que la red externa reciba una respuesta con ping. La segunda regla acepta paquetes ICMP de tipo 11 (time exceeded). La última regla de la cadena descarta todo paquete ICMP que no haya cumplido las reglas previas. Al no especificarse una dirección de la fuente con '-s' las reglas aceptan todo número IP.

En 6) se define la cadena "pqtes-udp-permitidos" con reglas relacionadas al protocolo UDP. La primera regla prueba paquetes de la interfase externa, en estado nuevo, cuyo destino es el puerto ntp (puerto 123) para permitir a ntp servir correctamente requerimientos externos. La última regla de la cadena descarta todo paquete UDP que no haya cumplido la regla previa.

En 7) se define la cadena "pqtes-tcp-permitidos" con reglas relacionadas al protocolo TCP. En la primera regla los puertos 21 (ftp), 25 (smtp), 80 (http) y 443 (https) son abiertos a requerimientos de todo número IP por la interfase de la red externa. Para poder especificar múltiples puertos es necesario cargar la condición 'multiport' explícitamente. Si no prestas servicios por cualquiera de estos puertos, borra el número correspondiente, o agrega propios. Para que la regla del puerto 21 (ftp) funcione correctamente, es necesario insertar en módulo ip_conntrack_ftp en el núcleo. Abrir el puerto 25 (smtp) es necesario para recibir correo electrónico con exim. La regla siguiente permite a los números IP 200.89.74.0 a 200.89.74.255 hacer requerimientos SSH (puerto 22). La última regla de la cadena descarta todo paquete TCP que no haya cumplido las reglas previas.

Las reglas en las cadenas "pqtes-icmp-permitidos", "pqtes-udp-permitidos" y "pqtes-tcp-permitidos" son las que definen los servicios permitidos y las que deberías modificar para tu caso en particular. El resto de cadenas y reglas son de uso general y no requieren modificación alguna.

Ahora corre el script './cortafuegos.sh', prueba conexiones a servidores externos y si tienes acceso a un computador externo a tu red, prueba conexiones a los servicios de red que prestas. Si no encuentras ningún problema, puedes borrar el cron usado para borrar la tabla cada 15 minutos.

Reglas permanentes
Para hacer permanentes las reglas insertadas en la tabla, edita el archivo de configuración /etc/default/iptables y modifica la variable 'enable_autosave' a 'true'. Luego anda al directorio /etc/rcS.d/ y da el comando,

# ln -s ../init.d/iptables S38iptables

para crear un link simbólico de /etc/init.d/iptables a /etc/rcS.d/S38iptables. Esto va a permitir que la tabla grabada en /var/lib/iptables bajo el nombre 'active' sea cargada al momento de arranque. Nota en particular que la tabla se va a cargar antes de que la red sea activada ya que ésta se carga con /etc/rcS.d/S40networking.

El comando 'iptables -L -v' hará un listado de las cadenas y reglas de la tabla del filtro con los contadores de paquetes y bytes.

Finalmente, hemos basado estas instrucciones en la documentación, escrita por el creador de iptables, 'Rusty' Russell, incluida en el paquete Debian iptables y que puedes encontrar en,

  /usr/share/doc/iptables/html/packet-filtering-HOWTO.html

También hemos usado el tutorial escrito por Oskar Andreasson y que puedes encontrar en el depositario de software (paquete iptables-tutorial).

© Copyright 2002-2004 Ricardo Yanez


[EMAIL PROTECTED]

Responder a