Shorewall: Un buen Cortafuego para sus Servidores GNU/Linux

Un_Buen_Firewall

¿Qué es un Firewall?

Un Firewall o Cortafuego es un dispositivo de tipo Hardware o Software que nos permite filtrar o gestionar todo el tráfico entrante y saliente que hay que entre dos o más redes. Todo tráfico saliente o entrante es controlado por una serie de Reglas para acceder conexión desde la red pública o acceder conexión desde la red privada. En caso de no cumplir con las reglas, el tráfico saliente o entrante es denegada.

Cuando se instala por primera vez alguna distribución de GNU/Linux derivados para Servidores, tales como: CentOS, Red Hat, Debian, Ubuntu Server o Fedora; por lo general en la mayoría de las distros vienen integrado en el kernel de estos sistemas un firewall de tipo software llamado iptables de netfilter.

Debido a que muchos administradores de sistemas que se adentran al mundo de GNU/Linux le dificultan administrar y configurar el firewall con Iptables, Shorewall es la herramienta ideal para crear y manipular de forma automatizada las reglas, cadenas y modulos de Iptables.

¿Qué es Shorewall (Shoreline Firewall)?

Shorewall o originalmente llamado como Shoreline Firewall es una robusta y extensible herramienta de alto nivel para la configuración de muros cortafuego.

VIDEO TUTORIAL CREADO Y ELABORADO POR EL CEO Y SYSADMIN DE TECNISERVICIOS.NET

DESCARGAR, INSTALAR, Y CONFIGURAR SHOREWALL EN EL SERVIDOR FW

Antes de descargar, instalar, y configurar Shorewall en su Servidor FW, hay que tomar en cuenta paso por paso ciertos puntos importantes

  • Identificar el Sistema del Servidor FW: Es importante identificar y conocer el sistema de la distribución del servidor firewall para descargar correctamente el repositorio necesario para la instalación correcta del Shorewall que utilizará como muro de cortafuego.
  • Identificar las Direcciones Ip del Servidor FW: Todo servidor de cortafuego dispondrá más de una tarjeta de red y debido a esto, es sumamente importante identificar las Interfaces de Red, las Direcciones Ip Públicas y Privadas (si es Pública, identificar si es Dinámica o Estática), las Subredes o Nodos de cada Interfaz, las Máscaras de Red, los Enlaces de Salida (Gateways), las Redes de Difusión y sus Tablas de Enrutamiento.
  • Habilitar el Enrutamiento (Router) del Servidor FW: Debido a que un servidor fw dispone de más de una interfaz de red, es sumamente importante que el servidor pueda enrutar los paquetes de datos entre diferentes subredes o nodos de red.
  • Detener y deshabilitar Iptables en el Servidor FW: Iptables es el firewall por defecto pre-instalado en todas las distribuciones GNU/Linux especializados para servidores, debido a esto, no se puede y tampoco es recomendable ejecutar 2 firewalls al mismo tiempo en un solo servidor de cortafuego.
  • Para conocer más información de cada uno de los puntos importantes de forma más detallada, pueden descargar nuestro tutorial en formato PDF.

Después de haber tomado en cuenta paso por paso los puntos importantes explicados anteriormente, es hora de instalar y configurar Shorewall en el Servidor FW con la finalidad de implementar ciertas medidas de seguridad informática en el servidor. El sistema del Servidor Firewall que estamos utilizando como laboratorio para éste tutorial es una distribución llamado CentOS Versión 6.8 de 64 bits pre-instalado como Máquina Virtual con VMware Workstation y asumimos que todo estos procedimientos se hará en un Servidor (No Virtualizado) en Producción. Por lo tanto, para proceder con los pasos de instalación y configuración del mismo, es necesario descargar par de archivos desde el sitio web oficial de Shorewall.

Los archivos que debemos descargar son los siguientes:

  • Shorewall-core: Necesario para instalar Shorewall para el Protocolo de Internet IPv4 o IPv6.
  • Shorewall: Junto con Shorewall-core, lo cual incluye todos los archivos necesarios para crear un muro cortafuego IPv4.

Entonces, debido a que estamos utilizando la distribución CentOS (6.8) de 64 bits y que ésta distribución es una distro derivado de Red Hat, en este caso es necesario descargar los archivos mencionados anteriormente para los repositorios RPMs dentro de la librería ILS-6.

Descargar_Shorewall_RPM_para_CentOS

INSTALAR SHOREWALL

Una vez que tengamos descargado nuestros archivos necesarios de acuerdo a la versión de la distribución (En nuestro caso: ILS-6 para CentOS 6.8), debemos proceder con la instalación de Shorewall. Hay que tomar en cuenta instalar las dependencias necesarios para su debida instalación:

yum -y install perl-Digest-SHA.x86_64 bc.x86_64

Después de instalar todas las dependencias necesarias, ahora procedemos con instalar los archivos "shorewall-core" y "shorewall" de las siguientes maneras:

  • Instalar el archivo Shorewall-Core:
    [root@fwlab1 Downloads]# rpm -Uvh shorewall-core-5.1.3.2-1.el6.noarch.rpm
    Preparing... ########################################### [100%]
    1:shorewall-core ########################################### [100%]
  • Instalar el archivo Shorewall:
    [root@fwlab1 Downloads]# rpm -Uvh shorewall-5.1.3.2-1.el6.noarch.rpm
    Preparing... ########################################### [100%]
    1:shorewall ########################################### [100%]

CONFIGURAR SHOREWALL

Ya que Shorewall está instalado, debemos configurar ciertos archivos importantes ubicados dentro del directorio "/etc/shorewall/".

Archivos_Configuracion_Shorewall

Los archivos necesarios para la configuración son los siguientes:

  • Shorewall.conf: Este es el archivo de configuración global en donde se configura las opciones que aplica a todo Shorewall como Cortafuego.
  • Zones: Este es el archivo para declarar las zonas de cada red o subredes. Por ejemplo: fw, loc, net, dmz o vpn.
  • Params: Este es el archivo para especificar parámetros o variables shell procesados por "/bin/sh" or por el parámetro "SHOREWALL_SHELL" en el archivo shorewall.conf.
  • Interfaces: Este es el archivo para especificar o definir los interfaces de red por cada zona.
  • Policy: Este es el archivo para definir las políticas de seguridad de alto nivel para las conexiones entre diferentes zonas de la red
  • Snat: Este es el archivo para definir el Enmascaramiento dinámico NAT o para definir la fuente del NAT en caso que la fuente sea Estático (Dirección Ip Privada/Pública Estático). Este archivo reemplaza el archivo Masq de las versiones anteriores del 5.0.14.
  • Rules: Este es el archivo en donde se especifica las reglas para establecer y filtrar las conexiones de los paquetes de datos.

Estos archivos NO son los únicos archivos accesibles y configurables para fortalecer el muro de cortafuego con Shorewall ya que este dispone de muchos más archivos de configuración más complejos y avanzados. Por este medio le compartimos un enlace en donde se muestra todos los archivos para más consejos y sugerencias para cada uno de los archivos de configuración de Shorewall.

A continuación, vamos a configurar cada uno de los archivos de Shorewall mencionados anteriormente:

CONFIGURAR EL ARCHIVO SHOREWALL.CONF

Tal como se explicó anteriormente, este archivo es para configurar globalmente todo el muro cortafuego Shorewall y dentro de este archivo vamos a configurar o editar los siguientes parámetros necesarios:

  • STARTUP_ENABLED=Yes # Este permite inicializar automáticamente el muro de cortafuego cuando el sistema del Servidor FW arranca o se enciende el servidor. Si el valor es "No", entonces el muro de cortafuego no se inicializará de manera automática.
  • LOG_LEVEL="info" # Este es el Nivel de Registro, lo cual el valor "info" significa que se mostrará solamente información de los registros del Firewall
  • LOGFILE=/var/log/messages # Esto especifica la ruta del archivo de registros, es decir, el archivo "messages" es en donde se muestra toda información de los registros.
  • IPTABLES=/sbin/iptables # Debido a que el objetivo de Shorewall es implementar y manipular de forma automatizada las reglas y cadenas de Iptables, es necesario especificar la ruta ejecutable de Iptables.
  • DETECT_DNAT_IPADDRS=Yes # Cuando el valor es "Yes" se detectará una Traducción de Dirección de Red Destino (DNAT) cuando se necesita direccionar una conexión de origen externo hacia una dirección ip destino de algún equipo o servidor ubicado detrás del Servidor FW.
  • DISABLE_IPV6=Yes # Cuando el valor es "No", significa que se habilitará el Protocolo IPV6, y debido a que nuestro valor es "Yes", significa que no necesitamos habilitar el protocolo IPV6 ya que sólo estamos ocupando el Protocolo IPV4.
  • FASTACCEPT=Yes # Debido a que el valor es "Yes", significa que anticipadamente estamos aceptando conexiones de paquetes de datos cuando el estado de los paquetes están ESTABLECIDOS y RELACIONADOS (ESTABLISHED/RELATED) en las cadenas INPUT, FORWARD y OUTPUT de Iptables.
  • IP_FORWARDING=On # Cuando el valor es "On", significa que estamos habilitando el Enrutamiento de Datos (/proc/sys/net/ipv4/ip_forward) con el objetivo de intercomunicar paquetes de datos entre diferentes nodos.

CONFIGURAR EL ARCHIVO ZONES

Dentro de este archivo, vamos a especificar el tipo de Protocolo IPV4 para las zonas: loc, net, y dmz y nuestra configuración es de la siguiente manera:

#ZONE TYPE
fw firewall # Zona del mismo Servidor FW con la Dirección Ip 192.168.2.10.
net ipv4 # Zona de las Redes Externas para la WAN o Internet.
loc ipv4 # Zona para la Red Local con la Dirección Ip 172.16.20.1 para la LAN.
dmz ipv4 # Zona para la Red Desmilitarizada con la Dirección Ip 10.16.20.1 para la DMZ.

CONFIGURAR EL ARCHIVO PARAMS

Dentro de este archivo, vamos a especificar todos los variables o parámetros (aliases) para engrupar interfaces, direcciones ip, puertos, opciones para cada interfaz de red y mucho más y nuestra configuración es de la siguiente manera:

# Interfaces de Red
WAN_INTERFACE=eth0 # Interfaz de Red de la WAN.
LAN_INTERFACE=eth1 # Interfaz de red de la LAN.
DMZ_INTERFACE=eth2 # Interfaz de red de la DMZ
# Opciones para las Interfaces de Red
WAN_OPTIONS=dhcp,routeback,nosmurfs,logmartians
LAN_OPTIONS=dhcp,routeback,nosmurfs,routefilter,logmartians
DMZ_OPTIONS=dhcp,routeback,nosmurfs,routefilter,logmartians
# Subredes de la WAN, LAN y DMZ
WAN_SUBNET="192.168.2.0/24" # Subred de la WAN.
LAN_SUBNET="172.16.20.0/28" # Subred de la LAN.
DMZ_SUBNET="10.16.20.0/29" # Subred de la DMZ.
# Direccion ip del Servidor FW
WAN_IP_FW="192.168.2.10"
# Direccion Ip del Gateway de la LAN
LAN_IP_GATEWAY="172.16.20.1"
# Direccion Ip del Gateway de la DMZ
DMZ_IP_GATEWAY="10.16.20.1"
# Direcciones Ip Privadas de los Ordenadores Anfitriones de la WAN
WAN_IP_PRIVATE_HOSTS="192.168.2.2,192.168.2.3,192.168.2.4"
# Direcciones Ip Publicas de los Ordenadores Anfitriones de la WAN
WAN_IP_PUBLIC_HOSTS="181.115.10.245"
# Direcciones Ip Privadas Estaticas de la LAN
LAN_IP_PRIVATE_HOSTS="172.16.20.2,172.16.20.3,172.16.20.4,172.16.20.5"
# Puertos HTTP y HTTPS para la Conexion y Navegacion a Internet
PORTS_INTERNET="80,443"
# Puerto para el Servidor Webmin
PORT_WEBMIN="10000"
# Puertos SSH y WEBMIN para conexion y gestion del Servidor FW
PORTS_FW_ADMIN="22,10000"

CONFIGURAR EL ARCHIVO INTERFACES

Dentro de este archivo y ya que tenemos nuestros parámetros o variables configurados, vamos a especificar y adicionar las interfaces por cada zona agregando nuestros variables poniendo antes de cada variable el símbolo de dólar "$". Hay que tomar en cuenta que en este archivo ahora se utiliza el "FORMAT 2", el cual es un formato que en las versiones después del 5.0.14 se omite la columna de la Red de Difusión (BROADCASTS). Entonces, nuestra configuración es de la siguiente manera:

?FORMAT 2
#ZONE INTERFACE OPTIONS
net $WAN_INTERFACE $WAN_OPTIONS # Interfaz de Red eth0 para la zona NET.
loc $LAN_INTERFACE $LAN_OPTIONS # Interfaz de Red eth1 para la zona LOC.
dmz $DMZ_INTERFACE $DMZ_OPTIONS # Interfaz de Red eth2 para la zona DMZ.

CONFIGURAR EL ARCHIVO POLICY

Este archivo es sumamente importante para especificar las políticas de seguridad de informática del mismo servidor fw y de las demás zonas (nodos de red) y nuestras políticas configuradas es de la siguiente manera:

#SOURCE DEST POLICY LOGLEVEL
fw all ACCEPT # Permitir al Servidor FW todo tipo de conexión hacia cualquier destino.
loc net ACCEPT # Permitir conexión a la Red Local LAN hacia la Red de la Internet.
dmz net ACCEPT # Permitir conexión a la Red de la Zona Desmilitarizada DMZ hacia la Red de la Internet.
loc dmz ACCEPT # Permitir conexión a la Red Local LAN hacia la Red de la DMZ.
net dmz ACCEPT # Permitir conexión a la Red de la Internet hacia la Red de la DMZ.
net fw DROP info # Denegar y botar conexión de la Red de la Internet hacia al Servidor FW y registrar la denegación.
loc fw DROP info # Denegar y botar conexión de la Red Local LAN hacia al Servidor FW y registrar la denegación.
dmz fw DROP info # Denegar y botar conexión de la Red DMZ hacia al Servidor FW y registrar la denegación.
dmz loc DROP info # Denegar y botar conexion de la Red DMZ hacia la Red local LAN y registrar la denegación.
all all REJECT info # Rechazar toda conexión omitida desde cualquier origen hacia cualquier destino y registrar el rechazo.

CONFIGURAR EL ARCHIVO SNAT

Para que todo equipo y servidores ubicados en las zonas loc y dmz puedan disponer de conexión y navegación hacia al Internet, es necesario enmascarar o hacer NAT las subredes de ambas zonas. Sin la existencia del NAT, es imposible que las redes internas (direcciones ip privadas) se comuniquen con las redes externas (direcciones ip públicas) y viceversa debido a que ambas redes son incompatibles. Entonces, dentro de este archivo y tomando en cuenta nuestras variables, nuestra configuración del enmascaramiento es de la siguiente manera:

#ACTION SOURCE DEST
MASQUERADE $LAN_SUBNET $WAN_INTERFACE # Enmascarar la subred 172.16.20.0/28 con la Interfaz de Red eth0.
MASQUERADE $DMZ_SUBNET $WAN_INTERFACE # Enmascarar la subred 10.16.20.0/29 con la Interfaz de Red eth0.

CONFIGURAR EL ARCHIVO RULES

Este archivo también es de suma importancia debido a que dentro de este archivo se especifica toda regla para filtrar (permitir, denegar, rechazar, y registrar) todo tipo de conexión de paquetes de datos desde cualquier origen y hacia cualquier destino por medio de cualquier protocolo, puertos destinos, puertos de origen y mucho más opciones más avanzadas de configuración. Utilizando nuestras siempre nuestras variables y tomando en cuenta que nuestro Estado de Conexión de Paquetes de Datos es siempre NUEVA (NEW), nuestras reglas configuradas son de las siguientes maneras:

#ACTION SOURCE DEST PROTO DPORT
?SECTION NEW
?COMMENT Aceptar conexion desde la Subred de la WAN hacia al FW via ICMP
Ping(ACCEPT) net:$WAN_SUBNET fw:$WAN_IP_FW
?COMMENT Aceptar conexion desde la Subred de la LAN hacia al FW via ICMP
Ping(ACCEPT) loc:$LAN_SUBNET fw:$LAN_IP_GATEWAY
?COMMENT Aceptar conexion desde la Subred de la DMZ hacia al FW via ICMP
Ping(ACCEPT) dmz:$DMZ_SUBNET fw:$DMZ_IP_GATEWAY
?COMMENT Aceptar conexion desde las Direcciones Ip Privadas de la WAN hacia al FW via SSH
SSH(ACCEPT) net:$WAN_IP_PRIVATE_HOSTS fw:$WAN_IP_FW
?COMMENT Aceptar conexion desde la Subred de la WAN hacia al FW via TCP por medio del puerto WEBMIN
ACCEPT net:$WAN_SUBNET fw:$WAN_IP_FW tcp $PORT_WEBMIN
?COMMENT Aceptar conexion desde las Direcciones Ip Publicas de la WAN hacia al FW via TCP por medio de los puertos SSH y WEBMIN
ACCEPT net:$WAN_IP_PUBLIC_HOSTS fw:$WAN_IP_FW tcp $PORTS_FW_ADMIN
?COMMENT Aceptar conexion desde la Subred de la LAN hacia al FW via DNS
DNS(ACCEPT) loc:$LAN_SUBNET fw:$LAN_IP_GATEWAY
?COMMENT Aceptar conexion desde la Subred de la DMZ hacia al FW via DNS
DNS(ACCEPT) dmz:$DMZ_SUBNET fw:$DMZ_IP_GATEWAY
?COMMENT Aceptar conexion desde la Subred de la LAN hacia al Internet via TCP por medio de los puertos HTTP y HTTPS
ACCEPT loc:$LAN_SUBNET net tcp $PORTS_INTERNET
?COMMENT Aceptar conexion desde la Subred de la DMZ hacia al Internet via TCP por medio de los puertos HTTP y HTTPS
ACCEPT dmz:$DMZ_SUBNET net tcp $PORTS_INTERNET
?COMMENT Aceptar conexion desde las Direcciones Ip Privadas Estaticas de la LAN hacia al FW via SSH
SSH(ACCEPT) loc:$LAN_IP_PRIVATE_HOSTS fw:$LAN_IP_GATEWAY
?COMMENT Permitir direccion de conexion desde la Subred de la WAN hacia Ordenador WINXP de la LAN via RDP
RDP(DNAT) net:$WAN_SUBNET loc:172.16.20.2

REVISAR, INICIAR/REINICIAR, SALVAR Y RESTAURAR SHOREWALL

Al finalizar de configurar el Shorewall, es muy importante revisar que toda su configuración elaborada por el SysAdmin (Administrador de Sistemas) y/o por el NetAdmin (Administrador de Red) ejecutando el comando "shorewall check", tal como se muestra de la siguiente manera:

[root@fwlab1 ~]# shorewall check
Checking using Shorewall 5.1.3.2...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Checking /etc/shorewall/zones...
Checking /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Action Files...
Checking /etc/shorewall/policy...
Running /etc/shorewall/initdone...
Adding Anti-smurf Rules
Adding rules for DHCP
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking /etc/shorewall/snat...
Checking MAC Filtration -- Phase 1...
Checking /etc/shorewall/rules...
Checking MAC Filtration -- Phase 2...
Applying Policies...
Checking /usr/share/shorewall/action.Broadcast for chain Broadcast...
Checking /usr/share/shorewall/action.Multicast for chain Multicast...
Shorewall configuration verified

Si es el mensaje de la revisión del Shorewall es "Shorewall configuration verified", significa que toda la configuración del Shorewall está verificada y correctamente configurada, de lo contrario, hay que revisar minuciosamente cada archivo de configuración gestionada para encontrar el error y corregirlo. Por consiguiente, es necesario iniciar el muro de cortafuego Shorewall ejecutando el comando "shorewall start", tal como se muestra de la siguiente manera:

[root@fwlab1 ~]# shorewall start
Starting Shorewall....
Initializing...
Processing /etc/shorewall/init ...
Processing /etc/shorewall/tcclear ...
Setting up Route Filtering...
Setting up Martian Logging...
Setting up Proxy ARP...
Preparing iptables-restore input...
Running /sbin/iptables-restore ...
IPv4 Forwarding Enabled
Processing /etc/shorewall/start ...
Processing /etc/shorewall/started ...
done.

Si por alguna razón es necesario gestionar el muro de cortafuego (cambiar la configuración del Shorewall), al finalizar el cambio de la misma configuración, es necesario reiniciar el Shorewall ejecutando el comando "shorewall restart", tal como se muestra de la siguiente manera:

[root@fwlab1 ~]# shorewall restart
Stopping Shorewall....
Processing /etc/shorewall/stop ...
Processing /etc/shorewall/tcclear ...
Preparing iptables-restore input...
Running /sbin/iptables-restore...
IPv4 Forwarding Enabled
Processing /etc/shorewall/stopped ...
done.
Starting Shorewall....
Initializing...
Processing /etc/shorewall/init ...
Processing /etc/shorewall/tcclear ...
Setting up Route Filtering...
Setting up Martian Logging...
Setting up Proxy ARP...
Preparing iptables-restore input...
Running /sbin/iptables-restore ...
IPv4 Forwarding Enabled
Processing /etc/shorewall/start ...
Processing /etc/shorewall/started ...
done.

Para finalizar del todo, es sumamente importante salvar toda la configuración gestionada ejecutando el comando "shorewall save", tal como se muestra de la siguiente manera:

[root@fwlab1 ~]# shorewall save
Currently-running Configuration Saved to /var/lib/shorewall/restore

Toda configuración salvada se almacena en un script "/var/lib/shorewall/restore", lo cual sirve para restaurar toda la configuración solo y cuando la configuración de la misma es perdida o borrada. Para restaurar toda la configuración se ejecuta el comando "shorewall restore", tal como se muestra de la siguiente manera:

[root@fwlab1 ~]# shorewall restore
Restoring Shorewall...
Initializing...
Processing /etc/shorewall/init ...
Processing /etc/shorewall/tcclear ...
Setting up Route Filtering...
Setting up Martian Logging...
Setting up Proxy ARP...
IPv4 Forwarding Enabled
Processing /etc/shorewall/restored ...
done.
Shorewall restored from /var/lib/shorewall/restore

Comentarios

Comentarios