How To: Instalar Shorewall Firewall para Debian y Ubuntu (2 Interfaces)

En este tutorial se va a instalar Shorewall que es un potente Firewall (o mejor dicho interfaz para configurar el netfilter) para Linux, no solo funciona para Debian y Ubuntu sino para cualquier linux, solo que en este tutorial solo se va a instalar para estas 2 distribuciones. La configuración que voy a presentar es [...]

En este tutorial se va a instalar Shorewall que es un potente Firewall (o mejor dicho interfaz para configurar el netfilter) para Linux, no solo funciona para Debian y Ubuntu sino para cualquier linux, solo que en este tutorial solo se va a instalar para estas 2 distribuciones.

La configuración que voy a presentar es para el caso de una computadora con dos interfaces de red .

Esta instalación está dirigida a Debian y Ubuntu tanto las versiones de Desktop como de Server.

Instalación de Shorewall 4.0

Primero se actualiza  la lista de repositorios para que así se instale la última versión de Shorewall.

Modificaremos el archivo sources.list que se encuentra en /etc/apt/sources.list

Se deben de tener privilegios de root o en Ubuntu emplear sudo

#vim /etc/apt/sources.list

Tambien pueden utilizar gedit, nano o el editor de tu preferencia. Agregamos estas líneas al final del archivo:

#############       Para Debian Estable     ########################
# Main
deb http://http.us.debian.org/debian/ stable main non-free contrib
# Source
deb-src http://http.us.debian.org/debian/ stable main non-free contrib
# Security
deb http://security.debian.org/ stable/updates main contrib non-free

Guardamos el archivo y luego agregamos la GnuPG key a nuestra lista de llaves para decir que confiamos en esta fuente y comprobar que están firmados por su autor. Ejecutamos:

#gpg --keyserver keyring.debian.org --recv-key B2B97BB1
#gpg --export -a B2B97BB1 | apt-key add -

Por último actualizamos la lista de paquetes:

#apt-get update

Listo ya tenemos los paquetes de la última versión de Shorewall listo para instalarlos. Ahora ejecutamos:

#apt-get install shorewall shorewall-perl

Configuración de Shorewall para dos Interfaces

Una vez finalizada la instalación procedemos a cambiar la configuración.

Shorewall trae unos ejemplos  para 1,2 y hasta 3 interfaces de configuración en /usr/share/doc/shorewall-common/examples/ que debemos copiar a la carpeta /etc/shorewall para esto ejecutamos los siguientes comandos (en este tutorial solo copiaremos los de una sola interfaz):

#cd /usr/share/doc/shorewall-common/examples/two-interfaces
#cp -p interfaces rules zones policy /etc/shorewall

Nota: Utilizamos la opción -p de copy para que se mantengan todos los privilegios de los archivos para más información consulta man cp.

Ahora que ya tenemos nuestros archivos de configuración base vamos a modificarlos:

Shorewall Zones

El primer archivo de configuración que vamos a modificar es el de zones (/etc/shorewall/zones).

Shorewall ve la red donde se encuentra como un conjunto de zonas, para el caso de dos interfaces de red que estamos haciendo vamos a tener tres zonas. Primero ejecutamos el siguiente comando:

#vim /etc/shorewall/zones

Se verificara el archivo que tiene la linea de loc ipv4 net ipv4 justo después de fw firewall debe verse como el archivo que a continuación se muestra, ya los ejemplos lo traen por eso solo se va a verificar:

# Shorewall version 4.0 - Sample Zones File for two-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-zones"
#
# The manpage is also online at
# http://shorewall.net/manpages/shorewall-zones.html
#
###############################################################################
#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
loc     ipv4
 
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE

Shorewall Interfaces

Ahora vamos a obtener el nombre de la interfaz externa (la que se conecte hacia internet) ejecutando el siguiente comando:

ip route ls

y obtendrás algo como esto:

10.1.0.0/16 via 10.1.0.253 dev eth0
default via 192.168.1.254 dev eth1

Por supuesto que la dirección IP de tu computadora puede ser distinta al igual que el nombre de la interfaz en este caso eth0. Fijense que la interfaz externa viene dado por la línea default via 192.168.1.254 dev eth0. Esto es importante si se tiene más de una interfaz de red.

Con esta información procederemos a modificar el archivo /etc/shorewall/interfaces, ejecutamos el siguiente comando:

#vim /etc/shorewall/interfaces

Y agregamos las siguientes líneas

#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth1            detect          dhcp,tcpflags,logmartians,nosmurfs,blacklist,routeback
loc     eth0            detect          tcpflags,logmartians,blacklist,routeback,nosmurfs
  • ZONE: Aquí definimos la zona a la cual va a pertenecer la interfaz que vamos a definir, en este caso la zona es net que ya definimos anteriormente
  • INTERFACE: El nombre de la interfaz
  • BROADCAST: Es opcional. Aquí definimos que queremos que haga el Shorewall con los paquetes de Broadcast en este caso con la opción detect le decimos que detecte las direcciones de broadcast por nosotros. También podríamos colocar aquí la dirección IP de broadcast de nuestra red.
  • OPTIONS: Esta es la parte más extensa, así que explicaré las opciones utilizadas aquí.
    • dhcp: Esta opción se debe colocar si tu computadora obtiene su dirección IP vía DHCP, o si tu firewall está instalado en un servidor DHCP.
    • tcpflags: Esta opción hace que Shorewall revise los paquetes por combinaciones ilegales de FLAGS (o banderas) TCP. Nunca está de más tenerlo.
    • logmartians: Esta opción hace que Shorewall registre paquetes con direcciones de origen imposibles, para esto tenemos que tener habilitado el routefilter en la interfaz lo cual veremos más adelante como hacerlo.
    • nosmurfs: Filtra paquetes smurfs (paquetes que tienen como dirección de origen una dirección de broadcast)
    • blacklist: Analiza los paquetes contra la lista negra que definiremos más adelante en el archivo blacklist del shorewall
    • routeback:Permite que Shorewall filtre paquetes que se devuelven a esta misma interfaz

Con esto el archivo de interfaces esta listo, lo guardamos y seguimos con la configuración.

Nota: Para más información del archivo de interfaces y sus opciones pueden ejecutar man shorewall-interfaces

Shorewall Policy

Aqui vamos a definir una política que determina como Shorewall maneja la conexión entre las distintas zonas. Es de destacar que las instrucciones se ejecutan de arriba a abajo por lo que es importante mantener el orden para que se ejecuten adecuadamente.

Vamos a modificar el archivo de políticas que se encuentra /etc/shorewall/policy ejecutando el siguiente comando:

vim /etc/shorewall/policy

Y lo modificamos para que quede así:

# Shorewall version 4.0 - Sample Policy File for two-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"
#
# The manpage is also online at
# http://shorewall.net/manpages/shorewall-policy.html
#
###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
loc             net             REJECT
loc             $FW             REJECT          info
loc             all             REJECT          info
 
# Policies for traffic originating from the firewall ($FW)
$FW             net             REJECT          info
$FW             loc             REJECT          info
$FW             all             REJECT          info
# Policies for traffic originating from the Internet zone (net)
net             $FW             DROP            info
net             loc             DROP            info
net             all             DROP            info
 
# THE FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info
 
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE

Lo que estamos diciendo aquí es que todo entre zonas sea rechazado para que pase por las reglas que crearemos a continuación.

Para más información pueden buscar las páginas de manual ejecutando man shorewall-policy.

Shorewall Rules

Las reglas sirven para agregar excepciones a las politicas que declaramos anteriormente, si dejamos las politicas como están sin agregar ninguna regla pues no podremos ni siquiera navegar asi que vamos a modificar el archivo de rules ejecutando:

vim /etc/shorewall/rules

Y lo modificamos para que quede así:

#

# Shorewall version 4.0 - Sample Rules File for two-interface configuration.
# Copyright (C) 2006,2007 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-rules"
#
# The manpage is also online at
# http://shorewall.net/manpages/shorewall-rules.html
#
#############################################################################################################
#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
#
#       Accept DNS connections from the firewall to the network
#
DNS/ACCEPT      $FW             net
#
#       Accept SSH connections from the local network for administration
#
SSH/ACCEPT      loc             $FW
#
#       Allow Ping from the local network
#
Ping/ACCEPT     loc             $FW
 
#
# Drop Ping from the "bad" net zone.. and prevent your log from being flooded..
#
 
Ping/DROP       net             $FW
 
ACCEPT          $FW             loc             icmp
ACCEPT          $FW             net             icmp
#
 
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Los nombres como Ping, SSH, etc nos describe el protocolo sobre el que vamos a efectuar la acción que puede ser ACCEPT. REJECT, DROP entre otras. Shorewall cuenta con varios MACROS, los MACROS no son más que reglas prehechas que estamos utilizando aquí como Ping, SSH, DNS, etc. Para ver una lista completa de los macros puedes ejecutar shorewall show macros.

Luego de colocar el macro y la Acción pasamos a colocar el destino que en este caso es la zona $FW que declaramos al principio y luego colocamos el destino que es la zona net en el caso de las conexiones entrantes (net—>firewall) e invertido para las conexiones salientes (firewall–>net).

Si quisieramos aplicar una regla sobre un puerto y protocolo específico la declaramos de la siguiente forma:

ACCEPT          $FW     net             tcp     873
REJECT          $FW     net             udp     443

Esto son ejemplos, con lo anterior solo tiene permitido que le hagan ping, ssh y https (entrada) y de salida solo tiene habilitado el puerto de ssh y el ping, todo lo demas esta cerrado. Lo debes adecuar a tus necesidades.

Para una lista detallada de los puertos y sus respectivos protocolos puedes ir aquí

En los logs, si tiene algun puerto que este bloqueado y necesitas saber cual es, lo puedes encontrar en los logs /var/log/messages, con el siguiente comando lo ves en el momento.

tail -f /var/log/messages

Para más información acerca de las reglas puedes leer man shorewall-rules.

Ultimos Pasos

Ahora los últimos toques, vamos a modificar el archivo de configuración de Shorewall:

#vim /etc/shorewall/shorewall.conf

Asegurense que los siguientes valores están correctos:

STARTUP_ENABLED=Yes
ROUTE_FILTER=Yes

Con STARTUP_ENABLED le decimos al Shorewall que inicie con el sistema, y con ROUTE_FILTER del cual hablamos ya arriba en la parte de Interfaces

y por ultimo, que fue un problema que me sucedió y que no lo dicen en todos los tutoriales de Debian o Ubuntu

cambiar la linea startup=0 por startup=1 del archivo /etc/default/shorewall

#vim /etc/default/shorewall

quedando de la siguiente forma

# prevent startup with default configuration
# set the following varible to 1 in order to allow Shorewall to start
 
startup=1
 
# if your Shorewall configuration requires detection of the ip address of a ppp
# interface, you must list such interfaces in "wait_interface" to get Shorewall to
# wait until the interface is configured. Otherwise the script will fail because
# it won't be able to detect the IP address.
#
# Example:
#    wait_interface="ppp0"
# or
#    wait_interface="ppp0 ppp1"
# or, if you have defined  in /etc/shorewall/params
#    wait_interface=
 
#
# Startup options
#
 
OPTIONS=""
 
# EOF

Para iniciar manualmente a Shorewall y probar nuestra configuración ejecutamos:

#shorewall start

Con esto nos dará algo parecido a esto:

Compiling...
Initializing...
Determining Zones...
IPv4 Zones: net loc
Firewall Zone: fw
Validating interfaces file...
Validating hosts file...
Pre-processing Actions...
Pre-processing /usr/share/shorewall/action.Drop...
Pre-processing /usr/share/shorewall/action.Reject...
Validating Policy file...
Determining Hosts in Zones...
net Zone: eth1:0.0.0.0/0
loc Zone: eth0:0.0.0.0/0
Deleting user chains...
Compiling /etc/shorewall/routestopped ...
Creating Interface Chains...
Compiling Common Rules
Adding Anti-smurf Rules
Adding rules for DHCP
Compiling TCP Flags checking...
Compiling Kernel Route Filtering...
Compiling Martian Logging...
Compiling /etc/shorewall/rules...
Compiling Actions...
Compiling /usr/share/shorewall/action.Drop for Chain Drop...
Compiling /usr/share/shorewall/action.Reject for Chain Reject...
Compiling /etc/shorewall/policy...
Compiling Traffic Control Rules...
Compiling Rule Activation...
Compiling IP Forwarding...
Shorewall configuration compiled to /var/lib/shorewall/.start
Starting Shorewall....
Initializing...
Clearing Traffic Control/QOS
Deleting user chains...
Enabling Loopback and DNS Lookups
Creating Interface Chains...
Setting up SMURF control...
Setting up Black List...
Adding Anti-smurf Jumps...
Setting up rules for DHCP...
Setting up TCP Flags checking...
Setting up ARP filtering...
Setting up Route Filtering...
Setting up Martian Logging...
Setting up Accept Source Routing...
Setting up SYN Flood Protection...
Setting up Rules...
Setting up Actions...
Creating action chain Drop
Creating action chain Reject
Creating action chain dropBcast
Creating action chain dropInvalid
Creating action chain dropNotSyn
Applying Policies...
Activating Rules...
done.

Si dice done al final todo quedo bien y si nos da algun error debemos leer que nos indica y tratar de corregirlo.
Shorewall registra todo a través del log del sistema para ver los logs podemos ejecutar los siguientes comandos:

  • shorewall show log (Muestra los últimos 20 mensajes de netfilter)
  • shorewall logwatch (Verifica los logs a un tiempo determinado)
  • shorewall dump (Nos da un amplio reporte de los problemas encontrados por Shorewall)
Este tutorial esta probado para Ubuntu Jaunty y Debian Lenny.
Fue realizado por @kurkuko

Entradas Relacionadas

Related posts:

  1. How To: Instalar Shorewall Firewall para Debian y Ubuntu En este tutorial se va a instalar Shorewall que es...
  2. Instalar Openfire 3.6.3 & Spark 2.5.8 & SparkWeb 0.9.0 en Debian 5.0 Lenny Para poder aplicar este tutorial se necesita tener instalado Debian...
  3. HowTo: Instalar Openfire 3.6.3 & Spark 2.5.8 & SparkWeb 0.9.0 en Debian 5.0 Lenny Para poder aplicar este tutorial se necesita tener instalado Debian...
  4. HowTo: Instalar apache2 con SSL en Debian 5.0 Lenny #apt-get install apache2 Instalar openssl ssl-cert #apt-get install openssl ssl-cert...
  5. HowTo: VirtualBox con soporte para USB en Ubuntu 9.04 Jaunty Antes de empezar debemos de tener instalado VirtualBox en Ubuntu...

Related posts brought to you by Yet Another Related Posts Plugin.

Related Posts

Popular Posts


Leave Your Response

* Name, Email, Comment are Required