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.
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 ;).
Muy bueno, gracias por tu aporte.
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
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.
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
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.
Como se puede realizar un balanceo de carga para dos o mas WAN
no lo se, no puedo ayudarte yo los balanceos los hago con routers mikrotik