Shorewall: Un buen firewall para GNU/Linux

Shorewall: Firewall de red fácil para GNU/Linux

Siempre he querido saber iptables y me han parecido muy difíciles de utilizar, por eso, cuando me surgió la necesidad de configurar un firewall me plantee cual era el método mas fácil para implementarlo en un servidor en linux, la respuesta,  Shorewall. Iptables hecho fácil, asi es la publicidad de este cortafuegos que tiene una forma muy sencilla de utilizar. Os voy aenseñar como utilizar este cortafuegos en una red de área local.

Para los ejemplos voy a utilizar la siguiente configuración de red.

shorewall

Instalación

Para instalar este firewall en Ubuntu el comando sería:

sudo apt-get install shorewall

Shorewall se configura por medio de los ficheros de configuración situados en /etc/shorewall vamos a conocer estos ficheros y sus características.

/etc/shorewall/shorewall.conf

Dentro de este archivo se configuran varios parámetros los mas relevantes son los siguientes:

STARTUP_ENABLED

Hay que poner el valor en “Yes” o “yes” para que el firewall funcione

ADMINISABSENTMINDED

Esta variable si la configuramos en “No” o “no” establece que cuando paremos el firewall solo se permiten las conexiones hacia o desde las direcciones que tengamos puestas en el archivo /etc/shorewall/routestopped. Si esta configurado en “Yes” o “yes” ademas las conexiones que estuviesen activas cuando detuvimos el firewall seguirán funcionando y todas las conexiones que se establezcan con la maquina en la que configuramos shorewall serán aceptadas.

IP_FORWARDING

Establece cuando lo configuramos en “On” si el firewall enruta o no los paquetes IPv4 . Este parámetro es importante para que los equipos de la red interna puedan acceder al exterior.

Para consultar la ayuda de este fichero.

man shorewall.conf

/etc/shorewall/zones

En este archivo se definen cuantas interfaces o zonas tiene el firewall. Cada red que queramos unir por medio del firewall la consideramos una zona, la primera zona seria el propio firewal ,otra zona seria la LAN, otra la zona wifi, otra la DMZ (zona desmilitarizada para los servidores) y una la ultima zona sería  internet.

Ejemplo de este fichero para que el firewall conecte una red a internet, tres zonas , firewall, lan y internet:

# ZONE TYPE OPTIONS     IN           OUT
#                       OPTIONS     OPTIONS
Fw firewall # define el firewall
net ipv4 # define internet WAN
loc ipv4 # define la red de área local LAN

Para consultar la ayuda de este fichero.

man shorewall-zones

/etc/shorewall/interfaces

Aquí se establecen las tarjetas de red, interfaces, que el firewall va ha utilizar y se les asigna la zona en la cual van ha estar cada una de ellas. Además se identifican ciertas propiedades respecto de la interpretación de los paquetes que ingresan o salen por esa interfaz.

Ejemplo de este fichero para que el firewall conecte una red a internet, tres zonas , firewall, lan y internet:

#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect dhcp,tcpflags,routefilter,nosmurfs,logmartians,blacklist 
loc eth1 detect tcpflags,nosmurfs,blacklist

Para consultar la ayuda de este fichero.

man shorewall-interfaces

/etc/shorewall/policy

Aquí se definen las políticas por defecto de que hacer con los paquetes que viajan entre las diferentes zonas.

Las posibles políticas son:

  •  ACCEPT: Se acepta la conexión
  • DROP: Se ignora la conexión
  • REJECT: Se rechaza explícitamente la conexión
  • QUEUE: Enviar el pedido a una aplicación con el target QUEUE.
  • CONTINUE: Dejar que el pedido de conexión continúe para se procesador por otras reglas.
  • NONE: Se asume que esta conexión no puede darse y no se generan reglas al respecto.

Ejemplo de este fichero para que el firewall conecte una red a internet, tres zonas , firewall, lan y internet:

# origen destino política loglevel limite:rafaga
 loc net ACCEPT # permitimos trafico de la red local a internet.
 net all DROP info # Ignoramos las conexiones que desde internet quieran hacer a la red local Y las registramos en el log.
 all all REJECT info # Rechazamos cualquier otra conexión que no este recogida en la parte superior y la registramos.

Para consultar la ayuda de este fichero.

man shorewall-policy

/etc/shorewall/rules

Aquí se define la apertura de puertos. También se definen las reglas de DNAT y registro de ciertos paquetes.

Ejemplo de este fichero para que el firewall conecte una red a internet, tres zonas , firewall, lan y internet:

# Acción Origen Destino Protocolo Puerto Destino Puerto Origen Destino Original Tasa/Limite
SSH/ACCEPT lan $FW   # Aceptamos conexiones ssh desde la LAN al firewall (sino a ver como lo configuramos)
RDP(DNAT) net loc:192.168.1.23 # redireccionamos el servico RDP puerto 3389 a la ip de la LAN 192.168.1.23
ACCEPT $FW loc icmp # Permitimos ping desde el firewall a la LAN 
ACCEPT $FW net icmp # Permitimos ping desde el firewall a internet

Para consultar la ayuda de este fichero.

man shorewall-rules

/etc/shorewall/masq

Este archivo se utiliza para definir masquerading y SNAT. Configuramos las redes que quieren conectarse a Internet atraves de un firewall.

Ejemplo de este fichero para que el firewall permita a la lan (eth1) conectarse a internet (eth0):

# Interfaz Subred Dirección Protocolo Puertos IPSEC
eth0 eth1

Para consultar la ayuda de este fichero.

man shorewall-masq

Mas ficheros de configuración.

  • hosts: Se utiliza para asociar grupos de hosts a una zona. Es esencial para definir múltiples zonas sobre una interfaz.
  • blacklist: Cualquier dirección IP o bloques de direcciones IP que se añadan a este archivo quedarán automáticamente en lista negra.
  • tunnels: Se utiliza para configurar automáticamente reglas de Netfilter para distintos tipos de túneles (IPSEC, OpenVPN, etc.)
  • tcrules: Se utiliza para cargar reglas de tc (herramienta para la configuración de los servicios de traffic shaping del kernel) desde el firewall. Balanceo de carga.
  • Para conocer el resto mirar en /etc/shorewall

 

Ficheros de ejemplo

Otra gran ventaja del shorewal es que tiene varios ficheros de ejemplo con preconfiguraciones mediante los cuales solamente con copiar y pegar en /etc/shorewall los ficheros el firewall funcionaria correctamente.

los ficheros de ejemplo estan en la siguiente ruta:

 /usr/share/doc/shorewall-common/examples

Hay tres carpetas con los archivos de configuración por defecto para los siguientes casos.

  • Una interfaz de red (solo WAN)
  • Dos interfaces de red (WAN y LAN)
  • Tres interfaces de res (WAN, LAN y DMZ)

Copiariamos los archivos de la carpeta en /etc/shorewall encenderiamos el firewall y a funcionar, mas rápido y fácil no puede ser.

Espero que os sea util este tutorial, si os gusta os agradeceria que hicieseis un +1 en las redes sociales para que llegue a mas gente que me hace ilusión. Muchas gracias por leer el articulo hasta el final ;).


Sobre Ignacio Alba Obaya

Técnico microinformático y formador para el empleo. Amante de las nuevas tecnológias. Administrador de GNU/Linux y Windows.

5 comentarios

  1. muy buen aporte ahora pregunto si deseara bloquear unas ip de la red a que no tengan salida a internet como sera eso como lo podria hacer

    1. Yo cambiaria la puerta de enlace en esas IP y ya no tienen conexion a internet en shorewall lo puedes hacer en /etc/shorewall/rules añadiendo
      DENY lan:192.168.1.34 net tcp 80

      mete las Ip que te hagan falta o la subred que necesites.

  2. Que tal,

    Y si quisieramos dejar pasar todo el trafico de una ip en particular?, osea por ejemplo un vip, que no quiero que el shorewall lo bloquee en na?.

    Gracias

    1. Por defecto el firewall permite la salida de todas las IPs locales (loc) y por todos los puertos hacia internet (net) ya que se lo indicamos en el archivo /etc/shorewall/policy con la entrada loc net ACCEPT. Si son así los equipos no acceden a todo internet puede ser por que alguna regla en /etc/shorewall/rules se lo impide. Si lo que quieres es que desde fuera de la red puedan conectarse a un equipo concreto lo que debes hacer es abrir los puertos o si los quieres todos abiertos pon el equipo en la DMZ. Si ninguna de estas ideas te lo facilita creo que necesito saber mas datos para poder contestarte adecuadamente.

Deja un comentario