Intalación y configuración del firewall shorewall sobre ubuntu/debian
1. Instalación de shorewall
Para instalar el firewall, símplemente tecleamos por consola:
# apt-get install shorewall
2. Configuración general.
La configuración de shorewall vendrá en la carpeta /etc/shorewall. Podemos encontrar la confuración genérica en el archivo /etc/shorewall/shorewall.conf, aunque en este tutorial nos quedaremos con la configuración por defecto.
Ahora vamos a copiar los ejemplos de configuración que trae shorewall por defecto para luego modificarlos según nuestras necesidades. Vamos a copiar los archivos interfaces, policy, rules y zones bajo la carpeta one-interface, si en tu caso usas 2 o 3 interfaces puedes copiar los archivos bajo la carpeta two-interfaces o three-interfaces.
# cp /usr/share/doc/shorewall/examples/one-interface/interfaces /usr/share/doc/shorewall/examples/one-interface/policy /usr/share/doc/shorewall/examples/one-interface/rules /usr/share/doc/shorewall/examples/one-interface/zones /etc/shorewall/
Shorewall escribe sus logs en /var/log/messages si usas ubuntu o debian ese fichero no existe así que lo creamos:
# touch /var/log/messages
3. Configuración de zonas.
En esta sección se confuran las interfaces de red en las que shorewall debe escuchar, en nuestro ejemplo vamos a partir de un servidor con una sóla interfaz de red LAN que será eth0, también podría ser que hubiera una tarjeta WiFi en cuyo caso también deberíamos configurarla.
Editamos el fichero copiado anteriormente zones, los nombres que se eligen son a gusto del consumidor aunque debemos tener en cuenta que luego vamos a referenciar estos nombres en otros ficheros, por defecto, viene configurada la zona del firewall que es la que se ocupa del tráfico que va desde o hacia el firewall directamente, añadiremos otra zona que llamaremos lan para la interfaz de red eth0.
# nano /etc/shorewall/zones
# # Shorewall version 4 - Zones File # # For information about this file, type "man shorewall-zones" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-zones.html # ############################################################################### #ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall net ipv4
3. Configurar políticas.
# nano /etc/shorewall/policy
# # Shorewall version 4.0 - Sample Policy File for one-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #----------------------------------------------------------------------------- # For information about entries in this file, type "man shorewall-policy" ############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST $FW net ACCEPT net all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info
4. Configurar rules.
En este fichero es donde vamos a definir a qué se tiene acceso y a qué no. Cabe destacar que se contemplan siempre 2 tipos de acceso, desde el servidor hacia fuera ($FW –> net) y desde fuera hacia el servidor (net –> $FW).
Para editar las reglas:
# nano /etc/shorewall/rules
En el fichero por defecto que copiamos en el paso 1 vienen 2 directivas para el acceso al protocolo igmp (ping), vamos a analizarlo:
Ping(DROP) net $FW ACCEPT $FW net icmp
En la primera línea usa una acción predefinida por shorewall Ping(), lo que hará esa línea es deshechar cualquier intento de ping desde fuera del servidor, la misma acción se llevaría a cabo si se hubiera puesto así:
DROP net $FW icmp
La segunda línea acepta que los pings hechos desde el servidor hacia fuera puedan llevarse a cabo.
También podemos hacer que algún servicio sólo esté disponible desde la red local, pongamos por ejemplo que tenemos samba instalado y queremos que sólo los usuarios que estén conectados al router del servidor tengan acceso, suponiendo que la red local tenga un rango de IPs entre el 192.168.0.1 a 192.168.0.254, añadiríamos esta directiva:
SMB(ACCEPT) net:192.168.0.0/24 $FW
Por último vamos a ver como activar un servicio en un puerto cualquiera sin usar acciones predefinidas, por ejemplo, supongamos que tenemos activo un servicio creado por nosotros en el puerto 10000 que usa protocolo tcp (también valdría udp) y que queremos que se tenga acceso desde fuera y al revés:
ACCEPT net $FW tcp 10000 ACCEPT $FW net tcp 10000
5. Activar el firewall.
Lo último que nos queda por hacer es activar el firewall, si no hacemos este paso al intentar iniciar el servicio se mostrará un error como el que sigue:
#### WARNING #### The firewall won't be started/stopped unless it is configured Please read about Debian specific customization in /usr/share/doc/shorewall-common/README.Debian.gz. #################
Para que esto no ocurra:
# nano /etc/default/shorewall
Una vez ahí, buscamos la línea donde pone startup=0 y la cambiamos por startup=1 y arrancamos el servicio.
# service shorewall start
6. Comandos útiles.
Para comprobar el estado de la configuración:
# shorewall check
Para comprobar los plugins compilados:
# shorewall show capabilities