Cómo configurar un muro cortafuegos con Shorewall
Publicado: Lun, 24 Mar 2014, 09:08
Cómo configurar un muro cortafuegos con Shorewall y tres interfaces de red
Introducción.
Acerca de Shorewall.
Shorewall (Shoreline Firewall) es una robusta y extensible herramienta de alto nivel para la configuración de muros cortafuego. Shorewall solo necesita se le proporcionen algunos datos en algunos archivos de texto simple y éste creará las reglas de cortafuegos correspondientes a través de iptables. Shorewall puede permitir utilizar un sistema como muro cortafuegos dedicado, sistema de múltiples funciones como puerta de enlace, dispositivo de encaminamiento y servidor.
Acerca de Iptables y Netfilter.
Netfilter es un conjunto de ganchos (Hooks, es decir, técnicas de programación que se emplean para crear cadenas de procedimientos como manejador) dentro del núcleo de GNU/Linux y que son utilizados para interceptar y manipular paquetes de red. El componente mejor conocido es el cortafuegos, el cual realiza procesos de filtración de paquetes. Los ganchos son también utilizados por un componente que se encarga del NAT (acrónimo de Network Address Translation o Traducción de dirección de red). Estos componentes son cargados como módulos del núcleo.
Iptables es el nombre de la herramienta de espacio de usuario (User Space, es decir, área de memoria donde todas las aplicaciones, en modo de usuario, pueden ser intercambiadas hacia memoria virtual cuando sea necesario) a través de la cual los administradores crean reglas para cada filtrado de paquetes y módulos de NAT. Iptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux.
Acerca de Iproute.
Iproute es una colección de herramientas (ifcfg, ip, rtmon y tc) para GNU/Linux que se utilizan para controlar el establecimiento de la red TCP/IP, así como también el control de tráfico. Aunque ifconfig sigue siendo la herramienta de configuración de red estándar en las distribuciones de GNU/Linux, iproute tiende a sustituirlo al proveer soporte para la mayoría de las tecnologías modernas de red (incluyendo IP versiones 4 y 6), permitiendo a los administradores configurar los parámetros de red y el control de tráfico.
Requisitos.
• Un sistema GNU/Linux con todos los parches de seguridad correspondientes instalados.
• Shorewall 3.0.8 o versiones posteriores.
• Tres interfaces de red:
• Interfaz para acceso hacia Internet.
• Interfaz para acceso hacia una DMZ, tras la cual se podrán colocar servidores.
• Interfaz para acceso hacia la LAN (acrónimo de Local Area Network o Área de Red Local).
Conceptos requeridos.
¿Qué es una zona desmilitarizada?
Una zona desmilitarizada (DMZ), es parte de una red que no está dentro de la red interna (LAN) pero tampoco está directamente conectada hacia Internet. Podría resumirse como una red que se localiza entre dos redes. En términos más técnicos se refiere a un área dentro del cortafuegos donde los sistemas que la componen tienen acceso hacia las redes interna y externa, sin embargo no tienen acceso completo hacia la red interna y tampoco acceso completamente abierto hacia la red externa. Los cortafuegos y dispositivos de encaminamiento (routers) protegen esta zona con funcionalidades de filtrado de tráfico de red.
Diagrama de una Zona Desmilitarizada.
Imagen de dominio público tomada de Wikipedia y modificada con el Gimp.
¿Que es una Red Privada?
Una Red Privada es aquella que utiliza direcciones IP establecidas en el RFC 1918. Es decir, direcciones IP reservadas para Redes Privadas dentro de los rangos 10.0.0.0/8 (desde 10.0.0.0 hasta 10.255.255.255), 172.16.0.0/12 (desde 172.16.0.0 hasta 172.31.255.255) y 192.168.0.0/16 (desde 192.168.0.0 hasta 192.168.255.255).
¿Qué es un NAT?
NAT (acrónimo de Network Address Translation o Traducción de dirección de red), también conocido como enmascaramiento de IP, es una técnica mediante la cual las direcciones de origen y/o destino de paquetes IP son reescritas mientras pasan a través de un dispositivo de encaminamiento (router) o muro cortafuegos. Se utiliza para permitir a múltiples anfitriones en una Red Privada con direcciones IP para Red Privada para acceder hacia una Internet utilizando una sola dirección IP pública.
¿Qué es un DNAT?
DNAT, (acrónimo de Destination Network Address Translation o traducción de dirección de red de destino) es una técnica mediante la cual se hace público un servicio desde una Red Privada. Es decir permite redirigir puertos hacia direcciones IP de Red Privada. El uso de esta técnica puede permitir a un usuario en Internet alcanzar un puerto en una Red Privada (dentro de una LAN) desde el exterior a través de un encaminados (router) o muro cortafuegos donde ha sido habilitado un NAT.
Equipamiento lógico necesario.
• iptables: Controla el código del núcleo de GNU/Linux para filtración de paquetes de red.
• iproute: Conjunto de utilidades diseñadas para utilizar las capacidades avanzadas de gestión de redes del núcleo de GNU/Linux.
• shorewall: Shoreline Firewall.
La instalación a través del mandato yum requiere utilizar lo siguiente:
yum -y install shorewall
Procedimientos.
Configuración de SELinux.
Con las versiones más recientes del conjunto de políticas de SELinux, Shorewall es incapaz de iniciar debido a que SElinux impide a éste ejecutar componentes localizados en /usr/. El siguiente procedimiento detalla cómo crear una política en SELinux que permita a Shorewall operar de manera normal.
Procedimiento para crear política.
Crear el directorio /usr/share/selinux/packages/shorewall:
mkdir /usr/share/selinux/packages/shorewall
Cambiarse al directorio /usr/share/selinux/packages/shorewall:
cd /usr/share/selinux/packages/shorewall
Descargar desde Alcance Libre el archivo http://www.alcancelibre.org/linux/secrets/shorewall.te:
wget http://www.alcancelibre.org/linux/secrets/shorewall.te
Editar el archivo shorewall.te:
vim shorewall.te
Verificar que el archivo shorewall.te tenga el siguiente contenido:
module shorewall 1.0;
require {
type shorewall_t;
type usr_t;
class file { execute execute_no_trans };
}
#============= shorewall_t ==============
allow shorewall_t usr_t:file { execute execute_no_trans };
Crear el archivo de módulo shorewall.mod a partir del archivo shorewall.te:
checkmodule -M -m -o shorewall.mod shorewall.te
Crear el archivo de política shorewall.pp a partir del archivo shorewall.mod
semodule_package -o shorewall.pp -m shorewall.mod
Incluir la política al sistema:
semodule -i /usr/share/selinux/packages/shorewall/shorewall.pp
Archivo de configuración /etc/shorewall/shorewall.conf
En éste se definen, principalmente, dos parámetros. STARTUP_ENABLED y CLAMPMSS.
STARTUP_ENABLED se utiliza para activar Shorewall. De modo predefinido está desactivado, solo se necesita cambiar No por Yes.
STARTUP_ENABLED=Yes
CLAMPMSS se utiliza en conexiones tipo PPP (PPTP o PPPoE) y sirve para limitar el MSS (acrónimo de Maximum Segment Size que significa Máximo Tamaño de Segmento). Cambiando el valor No por Yes, Shorewall calculará el MSS más apropiado para la conexión. Si se es osado, puede también especificarse un número en paquetes SYN. La recomendación es establecer Yes si se cuenta con un enlace tipo PPP.
CLAMPMSS=Yes
Archivo de configuración /etc/shorewall/zones
Este archivo se utiliza para definir las zonas que se administrarán con Shorewall y el tipo de zona (firewall, ipv4 o ipsec). La zona fw está presente en el archivo /etc/shorewall.conf como configuración predefinida. En el siguiente ejemplo se registrarán las zonas de Internet (net), Red Local (loc) y Zona Desmilitarizada (dmz):
#ZONE DISPLAY OPTIONS
fw firewall
net ipv4
loc ipv4
dmz ipv4
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/interfaces
En éste se establecen cuales serán las interfaces para las tres diferentes zonas. Se establecen las interfaces que corresponden a la Internet, Zona Desmilitarizada DMZ y Red Local. En el siguiente ejemplo, se cuenta con una interfaz ppp0 para acceder hacia Internet, una interfaz eth0 para acceder hacia la LAN y una interfaz eth1 para acceder hacia la DMZ, y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net ppp0 detect
loc eth0 detect
dmz eth1 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se cuenta con una interfaz eth0 para acceder hacia Internet, una interfaz eth1 para acceder hacia la LAN y una interfaz eth2 para acceder hacia la DMZ, y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net eth0 detect
loc eth1 detect
dmz eth2 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Hay una cuarta zona implícita que corresponde al cortafuegos mismo y que se denomina fw.
Si acaso hubiera un servicio de DHCP, sea como cliente, como servidor o como intermediario, en alguna de las interfaces, se debe añadir la opción dhcp para permitir la comunicación requerida para este servicio. En el siguiente ejemplo el anfitrión donde opera el muro cortafuegos obtiene su dirección IP, para la interfaz ppp0, a través del servicio DHCP del ISP; en este mismo anfitrión opera simultáneamente un servidor DHCP, el cual es utilizado en la red de área local para asignar direcciones IP; por todo lo anterior se debe activar la opción DHCP para las interfaces ppp0 y eth1, que correspondientemente son utilizadas por la zona de Internet y la red de área local, pero no es necesario hacerlo para la interfaz eth2 que es utilizada para la zona de la DMZ:
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net ppp0 detect dhcp
loc eth1 detect dhcp
dmz eth2 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/policy
En este archivo se establece como se accederá desde una zona hacia otra y hacia la zona de Internet.
#SOURCE DEST POLICY LOG LIMIT:BURST
loc net ACCEPT
dmz net ACCEPT
fw net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior hace lo siguiente:
1. La zona de la red local puede acceder hacia la zona de Internet.
2. La zona de la DMZ puede acceder hacia la zona de Internet.
3. El cortafuegos mismo puede acceder hacia la zona de Internet.
4. Se impiden conexiones desde Internet hacia el resto de las zonas.
5. Se establece una política de rechazar conexiones para todo lo que se haya omitido.
Todo lo anterior permite el paso entre las diversas zonas hacia Internet, lo cual no es deseable si se quiere mantener una política estricta de seguridad. La recomendación es cerrar todo hacia todo e ir abriendo el tráfico de acuerdo a como se vaya requiriendo. Es decir, utilizar algo como lo siguiente:
#SOURCE DEST POLICY LOG LIMIT:BURST
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior bloquea todo el tráfico desde donde sea a donde sea. Si es necesario realizar pruebas de diagnóstico desde el cortafuegos hacia Internet para probar conectividad y acceso hacia diversos protocolos, se puede utilizar lo siguiente:
#SOURCE DEST POLICY LOG LIMIT:BURST
fw net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior permite al propio cortafuegos acceder hacia la zona de Internet. Esta sería la política más relajada que se pudiera recomendar para mantener un nivel de seguridad aceptable.
Archivo de configuración /etc/shorewall/masq
Se utiliza para definir que a través de que interfaz o interfaces se habilitará enmascaramiento, o NAT, y para que interfaz o interfaces o redes se aplicará dicho enmascaramiento. En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz ppp0 para las redes que acceden desde las interfaces eth0 y eth1:
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
ppp0 eth0
ppp0 eth1
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz eth0 para las redes 192.168.0.0/24 y 192.168.1.0/24:
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
eth0 192.168.0.0/24
eth0 192.168.1.0/24
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
También es posible hacer NAT solamente hacia una IP en particular y para un solo protocolo en particular. En el siguiente ejemplo se hace NAT a través de la interfaz ppp0 para la dirección 192.168.3.25 que accede desde la interfaz eth1 y solo se le permitirá hacer NAT de los protocolos smtp y pop3. Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
ppp0 eth1 192.168.3.25 tcp 25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/rules
Todos los puertos están cerrados de modo predefinido, y es en este archivo donde se habilitan los puertos necesarios. Hay diversas funciones que pueden realizarse.
ACCEPT
La acción ACCEPT se hace para especificar si se permiten conexiones desde o hacia una(s) zona (s) un protocolo(s) y puerto(s) en particular. En el siguiente ejemplo se permiten conexiones desde Internet hacia el puerto 80 (www), 25 (smtp) y 110 (pop3). Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT net fw tcp 80,25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
REDIRECT
La acción REDIRECT permite redirigir peticiones hacia un puerto en particular. Muy útil cuando se quieren redirigir peticiones para HTTP (puerto 80) y se quiere que estas pasen a través de un Servidor Intermediario (Proxy) como Squid. En el siguiente ejemplo las peticiones hechas desde la red local y desde la DMZ serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente.
#ACTION SOURCE DEST PROTO DEST
# PORT
REDIRECT loc 8080 tcp 80
REDIRECT dmz 8080 tcp 80
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
DNAT
La acción DNAT se utiliza para reenviar peticiones desde un puerto del cortafuegos hacia una IP y puerto en particular tanto en la red local como en la DMZ. Cabe destacar que para que el DNAT funcioné se necesita que:
• Esté habilitado el reenvío de paquetes en /etc/sysconfig/sysctl.cfg y /etc/shorewall/shorewall.conf
• Los equipos hacia los que se esté haciendo DNAT utilicen como puerta de enlace al cortafuegos desde sus correspondientes zonas.
En el siguiente ejemplo, se hace DNAT desde la zona de Internet para HTTP (puerto 80), SMTP (puerto 25) y POP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia la IP 10.10.10.28 localizada en la zona de la Red Local.
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT net dmz:10.10.10.28 tcp 80,25,110,53
DNAT net dmz:10.10.10.28 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Ejemplos diversos de reglas.
En el siguiente ejemplo se permite a la zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc dmz tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc:192.168.2.34 dmz tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (ssh) de la dirección 10.10.10.5 que está dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc:192.168.2.34 dmz:10.10.10.5 tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25) y POP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia diversos servidores localizados DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT net dmz:10.10.10.1 tcp 80
DNAT net dmz:10.10.10.2 tcp 25,110
DNAT net dmz:10.10.10.3 tcp 53
DNAT net dmz:10.10.10.3 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de la Red Local para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT loc dmz:10.10.10.1 tcp 80
DNAT loc dmz:10.10.10.2 tcp 25,110
DNAT loc dmz:10.10.10.3 tcp 53
DNAT loc dmz:10.10.10.3 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados DMZ y limitar la taza de conexiones a diez por segundo con ráfagas de hasta cinco conexiones para cada servicio:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
# PORT PORT(S) DEST LIMIT
DNAT net dmz:10.10.10.1 tcp 80 - - 10/sec:5
DNAT net dmz:10.10.10.2 tcp 25,110 - - 10/sec:5
DNAT net dmz:10.10.10.3 tcp 53 - - 10/sec:5
DNAT net dmz:10.10.10.3 udp 53 - - 10/sec:5
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo las peticiones hechas desde la red local (LAN) serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente, limitando la taza de conexiones a veinte por segundo con ráfagas de hasta cinco conexiones. Esto es muy útil para evitar ataques de DoS (acrónimo de Denial of Service que se traduce como Denegación de Servicio) desde la red local (LAN).
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
# PORT PORT(S) DEST LIMIT
REDIRET loc 8080 tcp 80 - - 20/sec:5
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Iniciar el cortafuegos y añadirlo a los servicios de arranque del sistema
Para ejecutar por primera vez el servicio, utilice:
service shorewall start
Para hacer que los cambios hechos a la configuración surtan efecto, utilce:
service shorewall restart
Para detener el cortafuegos, utilice:
service shorewall stop
Cabe señalar que detener el cortafuegos también detiene todo tráfico de red, incluyendo el tráfico proveniente desde la LAN. Si se desea restaurar el tráfico de red, sin la protección de un cortafuegos, será necesario también utilizar el guión de iptables.
service iptables stop
Lo más conveniente, en caso de ser necesario detener el cortafuegos, es definir que direcciones IP o redes podrán continuar accediendo cuando el cortafuegos es detenido, o cuando éste se encuentra en proceso de reinicio. Esto se define en el archivo /etc/shorewall/routestopped, definiendo la interfaz, a través de la cual se permitirá la comunicación, y la dirección IP o red, en un formato de lista separada por comas, de los anfitriones que podrán acceder al cortafuegos. Ejemplo:
#INTERFACE HOST(S) OPTIONS
eth0 192.168.1.0/24
eth0 192.168.2.30,192.168.2.31
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Para añadir Shorewall al arranque del sistema, utilice:
chkconfig shorewall on
Introducción.
Acerca de Shorewall.
Shorewall (Shoreline Firewall) es una robusta y extensible herramienta de alto nivel para la configuración de muros cortafuego. Shorewall solo necesita se le proporcionen algunos datos en algunos archivos de texto simple y éste creará las reglas de cortafuegos correspondientes a través de iptables. Shorewall puede permitir utilizar un sistema como muro cortafuegos dedicado, sistema de múltiples funciones como puerta de enlace, dispositivo de encaminamiento y servidor.
Acerca de Iptables y Netfilter.
Netfilter es un conjunto de ganchos (Hooks, es decir, técnicas de programación que se emplean para crear cadenas de procedimientos como manejador) dentro del núcleo de GNU/Linux y que son utilizados para interceptar y manipular paquetes de red. El componente mejor conocido es el cortafuegos, el cual realiza procesos de filtración de paquetes. Los ganchos son también utilizados por un componente que se encarga del NAT (acrónimo de Network Address Translation o Traducción de dirección de red). Estos componentes son cargados como módulos del núcleo.
Iptables es el nombre de la herramienta de espacio de usuario (User Space, es decir, área de memoria donde todas las aplicaciones, en modo de usuario, pueden ser intercambiadas hacia memoria virtual cuando sea necesario) a través de la cual los administradores crean reglas para cada filtrado de paquetes y módulos de NAT. Iptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux.
Acerca de Iproute.
Iproute es una colección de herramientas (ifcfg, ip, rtmon y tc) para GNU/Linux que se utilizan para controlar el establecimiento de la red TCP/IP, así como también el control de tráfico. Aunque ifconfig sigue siendo la herramienta de configuración de red estándar en las distribuciones de GNU/Linux, iproute tiende a sustituirlo al proveer soporte para la mayoría de las tecnologías modernas de red (incluyendo IP versiones 4 y 6), permitiendo a los administradores configurar los parámetros de red y el control de tráfico.
Requisitos.
• Un sistema GNU/Linux con todos los parches de seguridad correspondientes instalados.
• Shorewall 3.0.8 o versiones posteriores.
• Tres interfaces de red:
• Interfaz para acceso hacia Internet.
• Interfaz para acceso hacia una DMZ, tras la cual se podrán colocar servidores.
• Interfaz para acceso hacia la LAN (acrónimo de Local Area Network o Área de Red Local).
Conceptos requeridos.
¿Qué es una zona desmilitarizada?
Una zona desmilitarizada (DMZ), es parte de una red que no está dentro de la red interna (LAN) pero tampoco está directamente conectada hacia Internet. Podría resumirse como una red que se localiza entre dos redes. En términos más técnicos se refiere a un área dentro del cortafuegos donde los sistemas que la componen tienen acceso hacia las redes interna y externa, sin embargo no tienen acceso completo hacia la red interna y tampoco acceso completamente abierto hacia la red externa. Los cortafuegos y dispositivos de encaminamiento (routers) protegen esta zona con funcionalidades de filtrado de tráfico de red.
Diagrama de una Zona Desmilitarizada.
Imagen de dominio público tomada de Wikipedia y modificada con el Gimp.
¿Que es una Red Privada?
Una Red Privada es aquella que utiliza direcciones IP establecidas en el RFC 1918. Es decir, direcciones IP reservadas para Redes Privadas dentro de los rangos 10.0.0.0/8 (desde 10.0.0.0 hasta 10.255.255.255), 172.16.0.0/12 (desde 172.16.0.0 hasta 172.31.255.255) y 192.168.0.0/16 (desde 192.168.0.0 hasta 192.168.255.255).
¿Qué es un NAT?
NAT (acrónimo de Network Address Translation o Traducción de dirección de red), también conocido como enmascaramiento de IP, es una técnica mediante la cual las direcciones de origen y/o destino de paquetes IP son reescritas mientras pasan a través de un dispositivo de encaminamiento (router) o muro cortafuegos. Se utiliza para permitir a múltiples anfitriones en una Red Privada con direcciones IP para Red Privada para acceder hacia una Internet utilizando una sola dirección IP pública.
¿Qué es un DNAT?
DNAT, (acrónimo de Destination Network Address Translation o traducción de dirección de red de destino) es una técnica mediante la cual se hace público un servicio desde una Red Privada. Es decir permite redirigir puertos hacia direcciones IP de Red Privada. El uso de esta técnica puede permitir a un usuario en Internet alcanzar un puerto en una Red Privada (dentro de una LAN) desde el exterior a través de un encaminados (router) o muro cortafuegos donde ha sido habilitado un NAT.
Equipamiento lógico necesario.
• iptables: Controla el código del núcleo de GNU/Linux para filtración de paquetes de red.
• iproute: Conjunto de utilidades diseñadas para utilizar las capacidades avanzadas de gestión de redes del núcleo de GNU/Linux.
• shorewall: Shoreline Firewall.
La instalación a través del mandato yum requiere utilizar lo siguiente:
yum -y install shorewall
Procedimientos.
Configuración de SELinux.
Con las versiones más recientes del conjunto de políticas de SELinux, Shorewall es incapaz de iniciar debido a que SElinux impide a éste ejecutar componentes localizados en /usr/. El siguiente procedimiento detalla cómo crear una política en SELinux que permita a Shorewall operar de manera normal.
Procedimiento para crear política.
Crear el directorio /usr/share/selinux/packages/shorewall:
mkdir /usr/share/selinux/packages/shorewall
Cambiarse al directorio /usr/share/selinux/packages/shorewall:
cd /usr/share/selinux/packages/shorewall
Descargar desde Alcance Libre el archivo http://www.alcancelibre.org/linux/secrets/shorewall.te:
wget http://www.alcancelibre.org/linux/secrets/shorewall.te
Editar el archivo shorewall.te:
vim shorewall.te
Verificar que el archivo shorewall.te tenga el siguiente contenido:
module shorewall 1.0;
require {
type shorewall_t;
type usr_t;
class file { execute execute_no_trans };
}
#============= shorewall_t ==============
allow shorewall_t usr_t:file { execute execute_no_trans };
Crear el archivo de módulo shorewall.mod a partir del archivo shorewall.te:
checkmodule -M -m -o shorewall.mod shorewall.te
Crear el archivo de política shorewall.pp a partir del archivo shorewall.mod
semodule_package -o shorewall.pp -m shorewall.mod
Incluir la política al sistema:
semodule -i /usr/share/selinux/packages/shorewall/shorewall.pp
Archivo de configuración /etc/shorewall/shorewall.conf
En éste se definen, principalmente, dos parámetros. STARTUP_ENABLED y CLAMPMSS.
STARTUP_ENABLED se utiliza para activar Shorewall. De modo predefinido está desactivado, solo se necesita cambiar No por Yes.
STARTUP_ENABLED=Yes
CLAMPMSS se utiliza en conexiones tipo PPP (PPTP o PPPoE) y sirve para limitar el MSS (acrónimo de Maximum Segment Size que significa Máximo Tamaño de Segmento). Cambiando el valor No por Yes, Shorewall calculará el MSS más apropiado para la conexión. Si se es osado, puede también especificarse un número en paquetes SYN. La recomendación es establecer Yes si se cuenta con un enlace tipo PPP.
CLAMPMSS=Yes
Archivo de configuración /etc/shorewall/zones
Este archivo se utiliza para definir las zonas que se administrarán con Shorewall y el tipo de zona (firewall, ipv4 o ipsec). La zona fw está presente en el archivo /etc/shorewall.conf como configuración predefinida. En el siguiente ejemplo se registrarán las zonas de Internet (net), Red Local (loc) y Zona Desmilitarizada (dmz):
#ZONE DISPLAY OPTIONS
fw firewall
net ipv4
loc ipv4
dmz ipv4
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/interfaces
En éste se establecen cuales serán las interfaces para las tres diferentes zonas. Se establecen las interfaces que corresponden a la Internet, Zona Desmilitarizada DMZ y Red Local. En el siguiente ejemplo, se cuenta con una interfaz ppp0 para acceder hacia Internet, una interfaz eth0 para acceder hacia la LAN y una interfaz eth1 para acceder hacia la DMZ, y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net ppp0 detect
loc eth0 detect
dmz eth1 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se cuenta con una interfaz eth0 para acceder hacia Internet, una interfaz eth1 para acceder hacia la LAN y una interfaz eth2 para acceder hacia la DMZ, y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net eth0 detect
loc eth1 detect
dmz eth2 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Hay una cuarta zona implícita que corresponde al cortafuegos mismo y que se denomina fw.
Si acaso hubiera un servicio de DHCP, sea como cliente, como servidor o como intermediario, en alguna de las interfaces, se debe añadir la opción dhcp para permitir la comunicación requerida para este servicio. En el siguiente ejemplo el anfitrión donde opera el muro cortafuegos obtiene su dirección IP, para la interfaz ppp0, a través del servicio DHCP del ISP; en este mismo anfitrión opera simultáneamente un servidor DHCP, el cual es utilizado en la red de área local para asignar direcciones IP; por todo lo anterior se debe activar la opción DHCP para las interfaces ppp0 y eth1, que correspondientemente son utilizadas por la zona de Internet y la red de área local, pero no es necesario hacerlo para la interfaz eth2 que es utilizada para la zona de la DMZ:
#ZONE INTERFACE BROADCAST OPTIONS GATEWAY
net ppp0 detect dhcp
loc eth1 detect dhcp
dmz eth2 detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/policy
En este archivo se establece como se accederá desde una zona hacia otra y hacia la zona de Internet.
#SOURCE DEST POLICY LOG LIMIT:BURST
loc net ACCEPT
dmz net ACCEPT
fw net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior hace lo siguiente:
1. La zona de la red local puede acceder hacia la zona de Internet.
2. La zona de la DMZ puede acceder hacia la zona de Internet.
3. El cortafuegos mismo puede acceder hacia la zona de Internet.
4. Se impiden conexiones desde Internet hacia el resto de las zonas.
5. Se establece una política de rechazar conexiones para todo lo que se haya omitido.
Todo lo anterior permite el paso entre las diversas zonas hacia Internet, lo cual no es deseable si se quiere mantener una política estricta de seguridad. La recomendación es cerrar todo hacia todo e ir abriendo el tráfico de acuerdo a como se vaya requiriendo. Es decir, utilizar algo como lo siguiente:
#SOURCE DEST POLICY LOG LIMIT:BURST
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior bloquea todo el tráfico desde donde sea a donde sea. Si es necesario realizar pruebas de diagnóstico desde el cortafuegos hacia Internet para probar conectividad y acceso hacia diversos protocolos, se puede utilizar lo siguiente:
#SOURCE DEST POLICY LOG LIMIT:BURST
fw net ACCEPT
net all DROP info
all all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior permite al propio cortafuegos acceder hacia la zona de Internet. Esta sería la política más relajada que se pudiera recomendar para mantener un nivel de seguridad aceptable.
Archivo de configuración /etc/shorewall/masq
Se utiliza para definir que a través de que interfaz o interfaces se habilitará enmascaramiento, o NAT, y para que interfaz o interfaces o redes se aplicará dicho enmascaramiento. En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz ppp0 para las redes que acceden desde las interfaces eth0 y eth1:
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
ppp0 eth0
ppp0 eth1
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz eth0 para las redes 192.168.0.0/24 y 192.168.1.0/24:
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
eth0 192.168.0.0/24
eth0 192.168.1.0/24
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
También es posible hacer NAT solamente hacia una IP en particular y para un solo protocolo en particular. En el siguiente ejemplo se hace NAT a través de la interfaz ppp0 para la dirección 192.168.3.25 que accede desde la interfaz eth1 y solo se le permitirá hacer NAT de los protocolos smtp y pop3. Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
ppp0 eth1 192.168.3.25 tcp 25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Archivo de configuración /etc/shorewall/rules
Todos los puertos están cerrados de modo predefinido, y es en este archivo donde se habilitan los puertos necesarios. Hay diversas funciones que pueden realizarse.
ACCEPT
La acción ACCEPT se hace para especificar si se permiten conexiones desde o hacia una(s) zona (s) un protocolo(s) y puerto(s) en particular. En el siguiente ejemplo se permiten conexiones desde Internet hacia el puerto 80 (www), 25 (smtp) y 110 (pop3). Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT net fw tcp 80,25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
REDIRECT
La acción REDIRECT permite redirigir peticiones hacia un puerto en particular. Muy útil cuando se quieren redirigir peticiones para HTTP (puerto 80) y se quiere que estas pasen a través de un Servidor Intermediario (Proxy) como Squid. En el siguiente ejemplo las peticiones hechas desde la red local y desde la DMZ serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente.
#ACTION SOURCE DEST PROTO DEST
# PORT
REDIRECT loc 8080 tcp 80
REDIRECT dmz 8080 tcp 80
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
DNAT
La acción DNAT se utiliza para reenviar peticiones desde un puerto del cortafuegos hacia una IP y puerto en particular tanto en la red local como en la DMZ. Cabe destacar que para que el DNAT funcioné se necesita que:
• Esté habilitado el reenvío de paquetes en /etc/sysconfig/sysctl.cfg y /etc/shorewall/shorewall.conf
• Los equipos hacia los que se esté haciendo DNAT utilicen como puerta de enlace al cortafuegos desde sus correspondientes zonas.
En el siguiente ejemplo, se hace DNAT desde la zona de Internet para HTTP (puerto 80), SMTP (puerto 25) y POP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia la IP 10.10.10.28 localizada en la zona de la Red Local.
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT net dmz:10.10.10.28 tcp 80,25,110,53
DNAT net dmz:10.10.10.28 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Ejemplos diversos de reglas.
En el siguiente ejemplo se permite a la zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc dmz tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc:192.168.2.34 dmz tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (ssh) de la dirección 10.10.10.5 que está dentro de la DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
ACCEPT loc:192.168.2.34 dmz:10.10.10.5 tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25) y POP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia diversos servidores localizados DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT net dmz:10.10.10.1 tcp 80
DNAT net dmz:10.10.10.2 tcp 25,110
DNAT net dmz:10.10.10.3 tcp 53
DNAT net dmz:10.10.10.3 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de la Red Local para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados DMZ:
#ACTION SOURCE DEST PROTO DEST
# PORT
DNAT loc dmz:10.10.10.1 tcp 80
DNAT loc dmz:10.10.10.2 tcp 25,110
DNAT loc dmz:10.10.10.3 tcp 53
DNAT loc dmz:10.10.10.3 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados DMZ y limitar la taza de conexiones a diez por segundo con ráfagas de hasta cinco conexiones para cada servicio:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
# PORT PORT(S) DEST LIMIT
DNAT net dmz:10.10.10.1 tcp 80 - - 10/sec:5
DNAT net dmz:10.10.10.2 tcp 25,110 - - 10/sec:5
DNAT net dmz:10.10.10.3 tcp 53 - - 10/sec:5
DNAT net dmz:10.10.10.3 udp 53 - - 10/sec:5
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo las peticiones hechas desde la red local (LAN) serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente, limitando la taza de conexiones a veinte por segundo con ráfagas de hasta cinco conexiones. Esto es muy útil para evitar ataques de DoS (acrónimo de Denial of Service que se traduce como Denegación de Servicio) desde la red local (LAN).
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
# PORT PORT(S) DEST LIMIT
REDIRET loc 8080 tcp 80 - - 20/sec:5
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Iniciar el cortafuegos y añadirlo a los servicios de arranque del sistema
Para ejecutar por primera vez el servicio, utilice:
service shorewall start
Para hacer que los cambios hechos a la configuración surtan efecto, utilce:
service shorewall restart
Para detener el cortafuegos, utilice:
service shorewall stop
Cabe señalar que detener el cortafuegos también detiene todo tráfico de red, incluyendo el tráfico proveniente desde la LAN. Si se desea restaurar el tráfico de red, sin la protección de un cortafuegos, será necesario también utilizar el guión de iptables.
service iptables stop
Lo más conveniente, en caso de ser necesario detener el cortafuegos, es definir que direcciones IP o redes podrán continuar accediendo cuando el cortafuegos es detenido, o cuando éste se encuentra en proceso de reinicio. Esto se define en el archivo /etc/shorewall/routestopped, definiendo la interfaz, a través de la cual se permitirá la comunicación, y la dirección IP o red, en un formato de lista separada por comas, de los anfitriones que podrán acceder al cortafuegos. Ejemplo:
#INTERFACE HOST(S) OPTIONS
eth0 192.168.1.0/24
eth0 192.168.2.30,192.168.2.31
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Para añadir Shorewall al arranque del sistema, utilice:
chkconfig shorewall on