Shorewall firewall más alla de la seguridad en tu gnu/linux

Suguridad Informática

Shorewall es un software que permite crear más o menos fácilmente un firewall a partir del firewall interno de Linux (IPTables). Shorewall viene con casi todas las distribuciones de Linux, así­ que si no lo tienes instalado busca el paquete que por ahí andará. Este artículo detalla solamente (y de forma muy básica) la configuración de Shorewall para un ordenador conectado a Internet a través de una pasarela (sea esta un router DSL u otro ordenador) y que está integrado en una red sencilla.

No se detallará la instalación, así que, insisto, si puedes instala el paquete de tu distribución.

Lo primero que debo decir es que no soy un experto, ni mucho menos, de shorewall; de hecho aprendí a medio usarlo ayer y este artículo es más que nada una referencia futura. Pero esta configuración a mi me funciona y me imagino que podrá ser útil a más gente.

La configuración de shorewall puede ser tan sencilla o tan complicada como nosotros queramos, pero en este artículo intentaremos una configuración sencilla (aunque práctica) que filtrará algunos puertos, pero permitirá otros según la máquina desde la que vengan. Nuestra red de ejemplo es bastante sencilla (en realidad se corresponde con la red de mi casa) y consta de:

La red

Un router DSL que da acceso a Internet re-direccionando todos los puertos a la máquina 192.168.0.2 (el router no realiza ningún tipo de filtrado), con IP 192.168.0.1. El proxy además hace de switch entre las otras dos máquinas dándoles acceso entre sí. Algún lector podría apuntarme (no sin razón) que es más seguro dejar que el router realice la función de filtrado de puertos en lugar del ordenador. El motivo por el que tengo esta configuración es que dicho router requiere de un reinicio (que se toma un par de minutillos, más otro par de minutillos hasta que entra el PPPoE) cada vez que se hace un cambio en la configuración de puertos por lo que para cosas puntuales como abrir determinados puertos me es más cómodo usar Shorewall.

Un PC de escritorio, con IP 192.168.0.2 conectado mediante un cable ethernet (su interfaz eth0) al router, el cual como ya hemos dicho puede poner servicios porque tiene todos los puertos re-direccionados a su IP. Además tiene acceso, mediante el router, al otro ordenador de la red. Un portátil con IP 192.168.0.3 conectado mediante una conexión wireless al router a través de su interfaz eth1. Puesto que el router no re-direcciona ningún puerto al portátil la configuración segura de este sería mucho más sencilla (y en este artículo en todo caso no se tratará, salvo como compañero de la 192.168.0.2.)

El objetivo

La configuración que se desea para la máquina 192.168.0.2 es la siguiente: Todos los puertos estarán, por defecto, cerrados para las conexiones que vengan desde Internet, salvo los que se especifiquen.

Todos los puertos estarán abiertos para las conexiones que vengan desde el portátil (192.168.0.3).

Se abrirán, para internet los puertos 22 (ssh, para permitir logins remotos), 4462, 4711, 4472, 4461 y 4460 (amule), y el puerto 20 (ftp-data.) Además se dejarán también abiertos el rango de puertos del 25000 al 26000 para las aplicaciones que necesitan esporádicamente puertos de servidor (transferencia de archivos con Gaim o KVIrc, por ejemplo, y para servidores esporádicos que queramos levantar de vez en cuando) Es importante que en dichas aplicaciones le indiquemos el rango de puertos que ponemos disponibles para ellas en su configuración (la forma de hacerlo variará según la aplicación.)

Responderemos a los pings.

Con estos objetivos en mente ya podemos pasar a la configuración.

Ficheros de shorewall

Shorewall se configura modificando unos ficheros de texto situados en el directorio /etc/shorewall. Estos ficheros son varios (26 en mi sistema) pero en realidad sólo necesitaremos tocar unos pocos para nuestros simples objetivos. Empecemos.

El fichero "interfaces", definición de las idems

En este fichero vamos a especificar las interfaces de red de nuestro sistema y las asociaremos a redes que vienen predefinidas en la configuración de Shorewall. Estas redes predefinidas son:

net: Internet

loc: Red local

fw: Máquina que ejerce de firewall (no noto ninguna diferencia con loc en este caso) En el caso de mi red, el ordenador que ejecuta shorewall (192.168.0.2) accede tanto a la red local como a Internet a través de la interfaz eth0 así que definiremos dicha interfaz como la red más peligrosa de las dos (net, Internet) y dejaremos que ella sóla determine el rango:

net eth0 detect

Si se hubiera dado el caso de haber tenido una segunda tarjeta de red (eth1) como interfaz hacia la red local, además habría tenido que definir:

loc eth1 detect

Pero como no es el caso, se definirá eth0 como “netâ€? y después le especificaremos que el portátil tiene “libertadâ€? en otro fichero. Con respecto a la zona “fwâ€? por defecto no hace falta definirla pues automáticamente apuntará a la máquina que ejecuta Shorewall.

El fichero de modulos del kernel "modules"

En este fichero vamos a especificar los módulos del kernel que se tendrán que cargar. Una configuración muy recomendable podría ser:

loadmodule ip_tables loadmodule
iptable_filter loadmodule ip_conntrack
loadmodule
ip_conntrack_ftp loadmodule ip_conntrack_tftp loadmodule
ip_conntrack_irc loadmodule
iptable_nat loadmodule ip_nat_ftp
loadmodule ip_nat_tftp loadmodule ip_nat_irc

El fichero "policy" de políticas generales
En este fichero estableceremos las políticas de actuación con respecto a las distintas interfaces. Estas serán reglas generales (en el sentido de todo o nada) que después podremos afinar en otro fichero que veremos más adelante. En el caso de esta red vamos a especificar que se acepte todo lo que vaya de la red local a Internet, del firewall a la red local, del firewall a Internet, que rechazaremos toda conexión entrante desde Internet y que en caso de duda rechace la conexión. Esto se hace con las reglas:
loc net ACCEPT fw loc ACCEPT fw net ACCEPT net all DROP info all all REJECT info
La diferencia entre "DROP" (dejar caer) y "REJECT" (denegar) es el con DROP no se responde a la conexión entrante (y por lo tanto para la máquina remota es como si hubiera hecho una conexión a una máquina que no existe) y REJECT hace un rechazo activo (la máquina remota sabe que la hemos rechazado.) Además el parámetro adicional "info" especifica que cuando se deje caer o se rechace una conexión, mande un mensaje a un fichero de registro del sistema (normalmente /var/log/syslog o /var/log/messages, según la distribución de Linux) indicándolo.

El fichero de reglas "rules"
En este fichero se especificarán las reglas concretas del firewall que podemos imaginar como excepciones a las reglas generales del fichero “policyâ€?. Como lo que queremos en esta red es abrir los puertos 20,22,4662,4711,4712,4661 y 4600 así como responder a los pings, añadiremos las siguientes reglas para permitir la conexión a esos puertos usando tanto TCP como UDP y los pings: ACCEPT net fw tcp 20,22,4662,4711,4712,4661,4600,8000:9000 - ACCEPT net fw udp 20,22,4662,4711,4712,4661,4600 ,8000:9000 - ACCEPT net fw icmp 8 -

Los puertos del 8000 al 9000 los hemos dejado abiertos para que algunos programas que eventualmente necesitan puertos de servidor funcionen (por ejemplo, transferencias de ficheros con gaim, transferencias de ficheros DCC con clientes de IRC, otros programas P2P, bittorrent, etc) pero necesitaremos configurar dicho programas para que en sus opciones les especifiquemos un puerto en el rango 8000-9000 para esos servicios.

Ahora para permitir al portátil conectar a cualquier puerto de la máquina (en el rango 1-65535) para lo cual usaremos las reglas:

ACCEPT net:192.168.0.3 fw tcp 1:65535
ACCEPT net:192.168.0.3 fw udp 1:65535

Como puede verse, los rangos en estas reglas se establecen utilizando el puerto inicial y el final separados por un carácter dos puntos (en este caso hemos especificado todos los puertos posibles, tanto UDP como TCP.) En el caso de la IP correspondiente al portatil hemos especificado todos los puertos, que en la práctica es como no hacer ningún filtrado (seguramente hay una forma mejor de hacer esto pero a mi me funciona y soy un vago.)

El fichero zones: Definición de las zonas En este fichero vamos a definir alias y descripciones para las zonas de red que maneja Shorewall. El contenido consiste en lineas zona_shorewall alias descripción. La descripción me imagino que servirá para las interfaces gráficas existentes para shorewall (que no he usado.) El contenido en mi sistema es: net Net Internet loc Local Local networks dmz DMZ Demilitarized zone

Concluyendo

Con esto ya tendríamos una configuración bastante decente para una cutre red casera; Shorewall es muy potente y por supuesto va a permitir cortafuegos mucho más avanzados pero con esta configuración a mi me basta, y espero que a los posibles lectores que busquen algo similar les sea útil.

Fuente: juanjoalvarez

Tema Relacionado: Suguridad Informática