Entendiendo como configurar el Firewall en GNU/Linux

Introducción

La información contenida en este documento se aplica sólo a versiones 4.x de Shorewall.

Glosario

Netfilter - Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

ipchains - ipchains es un cortafuegos libre para Linux. Es el código reescrito del código fuente del cortafuego IPv4 anterior de Linux. En Linux 2.2, ipchains es requerido para administrar los filtros de paquetes IP. ipchains fue escrito porque el cortefuegos IPv4 anterior utilizado en Linux 2.0 no functionaba con fragmentos IP y no permitía que se especifiquen otros protocolos que no sean TCP, UDP o ICMP.
ipchains ha sido reemplazado por iptables en Linux 2.4 y superior.

iptables - iptables es una aplicación en espacio de usuario que le permite a un administrador de sistema configurar las tablas, cadenas y reglas de netfilter. Debido a que iptables requiere privilegios elevados para operar, el único que puede ejecutarlo es el superusuario. En la mayoría de los sistemas Linux, iptables está instalado como /sbin/iptables. La sintaxis detallada del comando iptables está documentada en su página de man, la cual puede verse tipeando el comando "man iptables" desde la línea de comandos.

iptables-restore - un programa incluido con iptables que permite la instalación atómica de un conjunto de reglas de Netfilter. Esta es una manera mucho más eficiente para instalar un conjunto de reglas que ejecuta la utilidad iptables una vez para cada regla en el conjunto de reglas.

ifconfig - Un programa obsoleto incluido en el paquete net-utils. ifconfig se utiliza para configurar las interfaces de red.

route - Un programa obsoleto incluido en el paquete net-utils. Route se utiliza para configurar el enrutamiento.

ip - Un programa incluido en el paquete iproute2. ip reemplaza ifconfig y route en los modernos sistemas Linux.

tc - Un programa incluido en el paquete iproute2. tc se utiliza para configurar QoS/Traffic Shaping en sistemas Linux.

¿Qué es Shorewall?

El Firewall shoreline, más comúnmente conocido como "Shorewall", es una herramienta de alto nivel para configurar Netfilter. Usted describe su cortafuegos/puerta de enlace con los requisitos de las entradas en un conjunto de archivos de configuración. Shorewall lee los archivos de configuración y con la ayuda de las herramientas iptables, iptables-restore, IP y tc, Shorewall configura Netfilter y el subsistema de red de Linux para satisfacer sus necesidades. Shorewall se puede utilizar en un sistema dedicado a ser firewall, ser multifunción de gateway/router/servidor o en un sitema independiente GNU/Linux. Shorewall no usar el modo de compatibilidad Netfilter con ipchains y por lo tanto pueden aprovechar las capacidades de seguimiento de estado de conexiones de Netfilter.

Shorewall no es un demonio. Una vez que ha configurado Shorewall en el subsistema de red de Linux, su trabajo se ha completado y no hay más trabajo para shorewall en su sistema. El programa /sbin/shorewall se puede utilizar en cualquier momento para controlar el cortafuegos Netfilter.

Shorewall no es más fácil de usar en comparación a las herramientas disponibles de configuración de iptables, pero creo que es el más flexible y potente. Así que si usted está buscando una solución simple de un firewall para un servidor Linux que requiere un mínimo de conocimientos de redes, yo animo a que echa un vistazo a las siguientes alternativas:

KMyFirewall

firestarter

Si está buscando una solución de firewall de Linux que puede manejar complejas y cambiantes entornos de red rápidamente, Shorewall es una elección lógica.

Shorewall (Conceptos)

Los archivos de configuración de Shorewall se encuentran en el directorio /etc/shorewall.

Shorewall ve la red donde se está ejecutando como compuesta de un conjunto de zonas. En la configuración de trez interfaces de red, por ejemplo, se utilizan los siguientes nombres para las zonas :

#NAME                  DESCRIPTION
fw                     The firewall itself
net                    The Internet
loc                    Your Local Network
dmz                    Demilitarized Zone

Las zonas son declaradas y teniendo en cuenta un tipo en el archivo /etc/shorewall/zones. Este es el archivo /etc/shorewall/zones donde se muestran las tres interfaces de red:

#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
loc     ipv4
dmz     ipv4
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE

Tenga en cuenta que Shorewall reconoce el sistema del firewall como su propia zona. El nombre de la zona para designar el propio cortafuegos (por lo general es 'fw' como se muestra en el archivo de arriba) se almacena en la variable de entorno $FW que pueden ser utilizados en la configuración de Shorewall para referirse a la zona de firewall.

La forma más sencilla de definir los host en una zona es la de asociar la zona con una interfaz de red mediante el archivo /etc/shorewall/interfaces. En el ejemplo de tres interfaces, las tres zonas se definen utilizando el archivo de la siguiente manera:

#ZONE      INTERFACE     BROADCAST     OPTIONS
net        eth0          detect        dhcp,routefilter
loc        eth1          detect
dmz        eth2          detect

El archivo anterior define la zona net como todos los hosts IPv4 interconectados con el firewall a través de eth0, la zona loc como todos los hosts Ipv4 interconectados a través de la interfaz eth1 y la zona dmz como todos los hosts IPv4 interconectados a través de la interfaz eth2. Es importante tener en cuenta que la composición de una zona se define en términos de una combinación de direcciones e interfaces. Cuando se utiliza el archivo /etc/shorewall/interfaces para definir una zona, todas las direcciones están incluidas; cuando se quiere definir una zona que contiene un subconjunto limitado del espacio de direcciones IPv4, se utiliza el archivo /etc/shorewall/hosts.

Reglas sobre cuál es el tráfico permitido y cuál tráfico bloquear se expresan en términos de zonas.
Usted expresa su política por defecto para las conexiones de una zona a otra zona en el archivo /etc/shorewall/policy. Las opciones básicas de la política son los siguientes:
ACCEPT - Aceptar la conexión.
DROP - No haga caso de la solicitud de conexión.
REJECT - Devolver un error correspondiente a la solicitud de conexión.

La autenticación de la solicitud de conexión puede ser especificado como parte de una política y que es convencional (y muy recomendable) para las políticas de autenticación DROP Y REJECT.
Se definen las excepciones a estas políticas por defecto en el archivo /etc/ shorewall/rules.
Sólo es necesario se preocupe por las solicitudes de conexión. No es necesario para definir las reglas de manejo de tráfico que forma parte de una conexión establecida es y en la mayoría de los casos usted no tiene que preocuparse de cómo se manejan las conexiones relacionadas (paquetes de error ICMP y las solicitudes de conección relacionados con TCP, como las utilizadas por FTP).
Para cada solicitud de conexión de entrada en el firewall, la solicitud se comprueba en primer lugar con el archivo /etc/shorewall/rules. Si ninguna regla en ese archivo coincide con la solicitud de conexión a continuación, se aplica la primera política en /etc/shorewall/policy que coincide con la solicitud. Si hay una acción predeterminada definida para la política en /etc/shorewall/shorewall.conf entonces la acción se invoca antes de que la directiva se aplique. En la distribución estándar de Shorewall, la política DROP tiene una acción predeterminada llamada Drop y la política REJECT tiene una acción predeterminada llamada Reject. Las acciones predeterminadas se utiliza principalmente para descartar los paquetes silenciosos para que no irrumpan desordenadamente en su registro.
El archivo /etc/shorewall/policy incluidos en el ejemplo de tres interfaces tiene las siguientes políticas:

#SOURCE    DEST        POLICY      LOG LEVEL    LIMIT:BURST
loc        net         ACCEPT
net        all         DROP        info
all        all         REJECT      info

En el ejemplo de tres interfaces, la línea de abajo se incluye, pero como comentario. Si usted quiere que su sistema de firewall para tener pleno acceso a los servidores de Internet, descomente esta línea.

#SOURCE    DEST        POLICY      LOG LEVEL    LIMIT:BURST
$FW        net         ACCEPT

Acerca de las políticas de arriba:
Permita que todas las solicitudes de conexión de su red local a Internet
Drop (ignorar) todas las solicitudes de conexión de Internet a su FIREWALL o las redes locales; estos ignoran las solicitudes de conexión cuando se autentican usando la prioridad syslog info (nivel de registro).

Opcionalmente acepta todas las solicitudes de conexión del firewall a Internet (si descomenta la política adicional)
Rechazar todas las solicitudes de conexión; estas solicitudes de conexión rechazada se registra utilizando la prioridad syslog info información (nivel de registro).
Para ilustrar cómo las reglas establecen excepciones a las políticas, supongamos que usted tiene la políticas antes mencionadas, pero que desea ser capaz de conectarse a su firewall desde Internet a través de Secure Shell (SSH). Recordemos que SSH se conecta utilizando el puerto TCP 22.

#ACTION    SOURCE        DEST      PROTO      DEST
#                                             PORT(S)
ACCEPT     net           $FW       tcp        22

Así que aunque usted tiene una política de ignorar todos los intentos de conexión desde la zona de red (de Internet), la excepción antes mencionada de que la política le permite conectar con el servidor SSH que se ejecuta en el firewall.
Debido a que Shorewall no hace suposiciones sobre cuál es el tráfico que desea ser aceptado, hay ciertas reglas (excepciones) que hay que añadir a casi cualquier configuración.
Compilar y "Ejecutar"
El compilador de configuración Shorewall lee los archivos de configuración y genera un script de shell. Los errores en el paso de compilación causa que el script descartado y el comando abortado. Si en el paso de compilación no se encuentra ningún error entonces el script se ejecuta.
Los scripts "compilados" se colocan en el directorio /var/lib/shorewall y se nombran para que corresponda al comando que se ejecuta. Por ejemplo, el comando "/sbin/shorewall start" va a generar un script llamado /var/lib/shorewall/.start y, si es que la compilación está libre de errores, el script (guión) será ejecutado.

Fuente: http://www.shorewall.net/