Tabla de Contenidos

Instalación y configuración de firewall con Shorewall 3.2

Adaptado por Federico Pereira, FMSI Sistemas de Informática

Shorewall es una robusta y extensible herramienta de alto nivel para la configuración de firewall. Solo necesita que se le proporcionen algunos datos en algunos archivos y éste creará las reglas correspondientes a través de iptables.

Los pasos a seguir son los siguientes:

A) apt-get install shorewall

B) 1) cp /usr/share/doc/shorewall/default-config/interfaces /etc/shorewall
   2) cp /usr/share/doc/shorewall/default-config/zones /etc/shorewall
   3) cp /usr/share/doc/shorewall/default-config/policy /etc/shorewall
   4) cp /usr/share/doc/shorewall/default-config/masq /etc/shorewall
   5) cp /usr/share/doc/shorewall/default-config/rules /etc/shorewall

C) Editar los siguientes archivos en /etc/shorewall

Inicio Shorewall /etc/default/shorewall

Donde dice startup=0 cambiarlo por startup=1

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

Interfaces

/etc/shorewall/interfaces

En este archivo se establecen las interfaces de las zonas a ser tomadas en cuenta por el firewall. Se establecen las que corresponden a la de Internet y Red Local. En el siguiente ejemplo, se cuenta con una interfaz eth0 para acceder hacia Internet, y una interfaz eth1 para acceder hacia la LAN

#ZONE  INTERFACE  BROADCAST  OPTIONS  GATEWAY
net    eth0       detect     dhcp
loc    eth1       detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Zonas

/etc/shorewall/zones

En el archivo zones se definen las zonas que se administraran del firewall.

#ZONE      DISPLAY         OPTIONS
fw         firewall
net        ipv4
loc        ipv4
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Politicas

/etc/shorewall/policy

En este archivo se establecen las políticas por defecto para paquetes que viajan entre una zona hacia otra. 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.

Enmascaramiento

/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 fichero /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

Reglas

/etc/shorewall/rules

Este es el archivo de configuración más importante de Shorewall, ya que aquí se definen las reglas que permitirán o denegarán el acceso a servicios y puertos desde y hacia zonas o el firewall. También se puede definir las reglas DNAT y registro de ciertos paquetes.

Todos los puertos están cerrados de modo predefinido, y es en este fichero 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 fichero /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 tasa 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 tasa 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 fichero /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

Bibliografía